kubernetesgoogle-cloud-platformgoogle-kubernetes-enginenat

Google Kubernetes Enginge NAT routing outgoing IP doesn't work


I want to connect GKE (Google Kubernetes Engine) cluster to MongoDB Atlas. But I need to green the IP of my nodes (allow them). But sometimes I have 3 nodes, sometimes I have 10 and sometimes nodes are falling down and re-creating - constant changing means no single IP.

I have tried to create NAT on the GCP followed this guide: https://medium.com/google-cloud/using-cloud-nat-with-gke-cluster-c82364546d9e

Also I want to green my cluster's IP in the Google Maps APIs so I can use the Directions API, for example.

This is a common situation, since there may be many other third party APIs that I want to enable that require incoming requests from certain IPs only, besides Atlas or Google Maps..

How can I achieve this?


Solution

  • Private GKE cluster means the nodes do not have public IP addresses but you mentioned

    the actual outbound transfer goes from the node's IP instead of the NAT's

    Looks like you have a public cluster of GKE, you have to use the same NAT option to get outbound egress single IP.

    If you are using the ingress which means there is a single point for incoming request to cluster but if your Nodes have public IP PODs will use Node's IP when there is an outgoing request unless you use NAT or so.

    Your single outbound IP will be there, so all requests going out of PODs won't have node's IP instead they will use the NAT IP.

    how to set up the NAT gateway

    https://registry.terraform.io/modules/GoogleCloudPlatform/nat-gateway/google/latest/examples/gke-nat-gateway

    Here is terraform ready for the GKE clusters, you just have to run this terraform example bypassing project ID and others vars.

    The above terraform example will create the NAT for you and verify the PODs IP as soon as NAT is set. You mostly won't require any changes in NAT terraform script.

    GitHub link: https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway/tree/v1.2.3/examples/gke-nat-gateway

    if you dont have idea of terraform you can follow this article to setup the NAT which will stop the SNAT for PODs : https://rajathithanrajasekar.medium.com/google-cloud-public-gke-clusters-egress-traffic-via-cloud-nat-for-ip-whitelisting-7fdc5656284a