A new service on the operations cluster (or a managed GCP service) that other things in the VPC need to reach by name. Terraform creates the per-cluster records. Everything else is by hand.
The names that already exist are in Infra. This page is how to add one.
Staging also uses prod.internal
The plastic-labs-staging project has a zone named prod-internal serving
prod.internal. — that is the zone with records in it. staging.internal is
empty. A staging config that says redis.prod.internal is correct;
--project is what disambiguates. This is a relic of the migration to GKE, which
was never corrected to point our staging project to a staging.internal zone.
For anything new: reserve an IP, then name it
Pick a free address in the operations subnet (10.127.0.0/18) — see
what is occupying an IP range.
Reserve it first, then pin the Service to it, so deleting and recreating the
Service does not change the address.
gcloud compute addresses create <service-name> \
--project=plastic-labs-prod --region=us-east4 \
--subnet=operations --addresses=10.127.63.61Pin the Service (networking.gke.io/load-balancer-type: "Internal",
type: LoadBalancer, loadBalancerIP: "10.127.63.61"). Then:
gcloud dns record-sets create <service-name>.<namespace>.prod.internal. \
--project=plastic-labs-prod --zone=prod-internal \
--type=A --ttl=300 --rrdatas=10.127.63.61Check from inside the VPC, not your laptop:
kubectl --context gke_plastic-labs-prod_us-east4_operations -n <ns> \
run dnscheck --rm -it --restart=Never --image=busybox:1.36 -- \
sh -c 'nslookup <service-name>.<namespace>.prod.internal'Then point the consumer at the name. A pod holding the old value keeps it
until it restarts — if that value is in a secret, restarting the fleet is a
roll (roll-secret.sh), not a config change.
Add the name to the table in Infra. A *.prod.internal record that
only lives in someone’s shell history is how vector-aggregator shipped
nothing to BigQuery on production for months.
See also
- Infra — the 10.x plan, PSA vs PSC, the name table
- Where to look — what already occupies a range