Each step adds one piece. Press Send a packet to see how far a packet gets. Press the red button to remove the piece and see what breaks. When you know why each piece exists, the whole design follows.
The customer VPC and our VPC have no routes to each other, and here they even use the same range (10.1.0.0/16). The client and one of our nodes both have IP 10.1.0.11. Every piece below exists to make one connection work between two networks that cannot see each other.
Press Send a packet. The log shows source and destination at each hop.
| Piece | Who | One-line job | Without it | Switchboard picture |
|---|---|---|---|---|
| NAT subnet | YBM | Gives each incoming connection a source IP that our VPC owns | Our node cannot reply. GCP will not create the attachment. | Visitor extensions |
| Service attachment | YBM | The door: points at the LB, holds the accept list | Nothing for the customer to point at | Switchboard with a guest list |
| Firewall rule | YBM | Lets NAT addresses reach the nodes on 5433, 9042 | Nodes drop every packet | Staff take calls from visitor extensions |
| Endpoint | Customer | An IP in their VPC that leads to our door | Their apps have no address that goes to us | Speed-dial button in their office |
| DNS record | Customer | Gives the endpoint IP the name on our TLS certificate | Works with sslmode=require only. verify-full fails. | Name in the contact list |