Access
Everything private on this platform is reachable only over Tailscale — there is no bastion host and no public IP with an allowlist, on either cloud. The access model is deliberately identical across AWS and GCP: connect to the tailnet, and every private service resolves under the cloud’s private domain. Only the endpoints differ — the private domain, the kubeconfig command, and where the operator credential lives.
Network
tailscale statusYou should see the subnet router advertising the VPC CIDR — one router per
cloud, both created in Stage 1 of their respective lanes. Every private
service (OpenBao, the Kubernetes API, Grafana, Homepage, and so on) resolves
under the private domain you set in the Terramate config —
priv.aws.ogenki.io on AWS, priv.gcp.ogenki.io on GCP in the reference
environment — and is only reachable once you are connected to the tailnet.
Access control is enforced by Tailscale ACLs, evaluated outside Kubernetes entirely; the ACL model and the two Gateways it feeds are covered in Private Access.
OpenBao
Prefer VAULT_CACERT over VAULT_SKIP_VERIFY on both clouds — it validates
the server certificate against the real chain instead of skipping verification
entirely. The CA file is written locally by openbao-config.sh ca during the
deploy, under each management stack’s .tls/ directory.
AWS
export VAULT_ADDR=https://bao.priv.aws.ogenki.io:8200
export VAULT_CACERT=opentofu/aws/openbao/management/.tls/ca.pem
bao status
bao login -method=userpass username=adminThe admin password is generated by the openbao/management stack and
published to AWS Secrets Manager:
aws secretsmanager get-secret-value \
--secret-id openbao/cloud-native-ref/users/admin \
--query SecretString --output text | jqGCP
export VAULT_ADDR=https://bao.priv.gcp.ogenki.io:8200
export VAULT_CACERT=opentofu/gcp/openbao/management/.tls/ca.pem
bao statusThe GCP management stack defines no userpass login — operator access is the
root token written by openbao-config.sh init, published to GCP Secret
Manager:
gcloud secrets versions access latest \
--secret openbao-priv-gcp-root-token --project <your-project> | jq -r .tokenKubernetes
Both control planes have a private endpoint, so the tailnet must be up before either command can reach its cluster.
AWS
aws eks update-kubeconfig --region eu-west-3 --name aws-0
kubectl get nodes
flux get allGCP
gcloud container clusters get-credentials gcp-0 \
--zone europe-west4-a --project <your-project>
kubectl get nodes
flux get allPlatform Dashboard
On AWS, once Flux has reconciled Tooling, the Homepage dashboard aggregates every deployed service — Grafana, Harbor, Headlamp — behind one private hostname, alongside cluster health and documentation links. It is reached the same way as every other private service: over Tailscale, through the general Gateway.
GCP runs the tooling layer too, but only Harbor — not Homepage or Headlamp — so there is no dashboard there; see Cloud support for the current split.