{"id":49317,"date":"2025-05-13T08:07:07","date_gmt":"2025-05-13T08:07:07","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49317"},"modified":"2025-05-13T08:07:07","modified_gmt":"2025-05-13T08:07:07","slug":"what-is-google-cloud-nat","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/what-is-google-cloud-nat\/","title":{"rendered":"What is Google Cloud NAT?"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 What is Google Cloud NAT?<\/h2>\n\n\n\n<p><strong>Google Cloud NAT (Network Address Translation)<\/strong> is a <strong>fully managed service<\/strong> that enables <strong>outbound internet connectivity<\/strong> for resources in <strong>private Google Cloud VPC subnets<\/strong>, <strong>without requiring external IP addresses<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>In simpler terms: Cloud NAT lets <strong>VMs without public IPs<\/strong> access the internet (e.g., to install updates or contact APIs), while remaining <strong>inaccessible from the outside<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 Why Use Cloud NAT?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Secure internet access<\/strong> from <strong>private subnets<\/strong><\/li>\n\n\n\n<li>No need for <strong>bastion hosts<\/strong> or <strong>manual NAT gateways<\/strong><\/li>\n\n\n\n<li>Supports <strong>Compute Engine<\/strong>, <strong>GKE nodes<\/strong>, <strong>Cloud Run VPC connectors<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udf1f Key Features of Cloud NAT<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><strong>No external IPs required<\/strong><\/td><td>VMs stay private but still access the internet<\/td><\/tr><tr><td><strong>Managed Service<\/strong><\/td><td>No need to configure or maintain NAT instances<\/td><\/tr><tr><td><strong>Scalability<\/strong><\/td><td>Automatically scales to meet connection demand<\/td><\/tr><tr><td><strong>High Availability<\/strong><\/td><td>Fully distributed across zones with regional failover<\/td><\/tr><tr><td><strong>Logging &amp; Monitoring<\/strong><\/td><td>Integrated with Cloud Logging and Cloud Monitoring<\/td><\/tr><tr><td><strong>Per Subnet &amp; Per Instance Controls<\/strong><\/td><td>Choose which VMs or subnets are NATed<\/td><\/tr><tr><td><strong>Static IP support<\/strong><\/td><td>Option to use reserved static IPs for egress<\/td><\/tr><tr><td><strong>Port Allocation Options<\/strong><\/td><td>Manual or automatic port management per VM<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 Use Cases<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Use Case<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><strong>Private GKE Clusters<\/strong><\/td><td>Let GKE nodes access the internet without public IPs<\/td><\/tr><tr><td><strong>Private Compute VMs<\/strong><\/td><td>Allow package updates or API calls while remaining internal<\/td><\/tr><tr><td><strong>Secure Outbound API Access<\/strong><\/td><td>Talk to third-party APIs without exposing VMs<\/td><\/tr><tr><td><strong>Avoiding External Attack Surface<\/strong><\/td><td>Keep services invisible to external scanning tools<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf0 How to Set Up Cloud NAT \u2014 Step-by-Step Tutorial<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddfe Prerequisites<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A GCP project with billing enabled<\/li>\n\n\n\n<li>A VPC with at least one <strong>private subnet<\/strong><\/li>\n\n\n\n<li>Compute Engine or GKE nodes without public IPs<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Step 1: Reserve an External Static IP (Optional)<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">gcloud compute addresses create nat-ip \\\n    --region=us-central1\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Step 2: Create a Cloud Router<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">gcloud compute routers create nat-router \\\n    --network=<span class=\"hljs-keyword\">default<\/span> \\\n    --region=us-central1\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Step 3: Create the NAT Configuration<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">gcloud compute routers nats create nat-config \\\n    --router=nat-router \\\n    --region=us-central1 \\\n    --nat-custom-subnet-ip-ranges=<span class=\"hljs-keyword\">default<\/span> \\\n    --nat-external-ip-pool=nat-ip \\\n    --enable-logging\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Explanation:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>nat-custom-subnet-ip-ranges=default<\/code> \u2192 Applies to the default subnet<\/li>\n\n\n\n<li><code>nat-external-ip-pool=nat-ip<\/code> \u2192 Uses the static IP created earlier<\/li>\n\n\n\n<li><code>--enable-logging<\/code> \u2192 Enables Cloud NAT logs<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Step 4: Test NAT Access<\/h3>\n\n\n\n<p>Spin up a VM without a public IP and test:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">gcloud compute instances create vm-nat-test \\\n    --subnet=<span class=\"hljs-keyword\">default<\/span> \\\n    --no-address \\\n    --zone=us-central1-a\n\ngcloud compute ssh vm-nat-test --zone=us-central1-a\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Once inside:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">curl https:<span class=\"hljs-comment\">\/\/api.ipify.org<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You should get the external IP address of your NAT gateway!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcca Logging and Monitoring<\/h2>\n\n\n\n<p>Enable VPC flow logs and NAT logging to track:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Number of connections<\/li>\n\n\n\n<li>Ports used<\/li>\n\n\n\n<li>Source and destination<\/li>\n\n\n\n<li>Bandwidth consumption<\/li>\n<\/ul>\n\n\n\n<p>This is useful for compliance, debugging, and capacity planning.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd01 Alternatives to Cloud NAT<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Service<\/th><th>Use When<\/th><\/tr><\/thead><tbody><tr><td><strong>NAT instance (manual)<\/strong><\/td><td>You need custom firewall\/NAT logic<\/td><\/tr><tr><td><strong>Cloud Proxy (IAP)<\/strong><\/td><td>For authenticated user access from outside<\/td><\/tr><tr><td><strong>VPN\/Interconnect<\/strong><\/td><td>For hybrid connectivity, not just internet<\/td><\/tr><tr><td><strong>AWS NAT Gateway<\/strong><\/td><td>Equivalent in AWS ecosystem<\/td><\/tr><tr><td><strong>Azure NAT Gateway<\/strong><\/td><td>Equivalent in Azure ecosystem<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Cloud NAT vs NAT Instance<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Cloud NAT<\/th><th>NAT Instance<\/th><\/tr><\/thead><tbody><tr><td>Managed<\/td><td>\u2705<\/td><td>\u274c<\/td><\/tr><tr><td>Scalable<\/td><td>\u2705<\/td><td>\ud83d\udeab (manually configured)<\/td><\/tr><tr><td>HA\/Failover<\/td><td>\u2705<\/td><td>\u274c (requires manual setup)<\/td><\/tr><tr><td>Logging<\/td><td>\u2705<\/td><td>Manual setup needed<\/td><\/tr><tr><td>Maintenance<\/td><td>None<\/td><td>Requires patching, scaling, monitoring<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddfe Real-World Example: Private GKE with NAT<\/h2>\n\n\n\n<p>A company has a private GKE cluster for running microservices. To access external APIs and pull container updates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The nodes have <strong>no public IPs<\/strong><\/li>\n\n\n\n<li><strong>Cloud NAT + Cloud Router<\/strong> is configured<\/li>\n\n\n\n<li>No exposure to internet scanners<\/li>\n\n\n\n<li>Traffic logs are enabled for audit<\/li>\n<\/ul>\n\n\n\n<p>Outcome:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Secure architecture<\/li>\n\n\n\n<li>Reduced operational effort<\/li>\n\n\n\n<li>Improved compliance posture<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcd8 Summary<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Capability<\/th><th>Cloud NAT<\/th><\/tr><\/thead><tbody><tr><td>Enable outbound internet for private VMs<\/td><td>\u2705<\/td><\/tr><tr><td>No public IPs required<\/td><td>\u2705<\/td><\/tr><tr><td>Fully managed<\/td><td>\u2705<\/td><\/tr><tr><td>Works with Compute Engine, GKE, Cloud Run VPC<\/td><td>\u2705<\/td><\/tr><tr><td>Logging &amp; Monitoring<\/td><td>\u2705<\/td><\/tr><tr><td>Scalable &amp; HA<\/td><td>\u2705<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Conclusion<\/h2>\n\n\n\n<p><strong>Google Cloud NAT<\/strong> is an essential component for securely allowing internet access from <strong>private Google Cloud networks<\/strong>. It&#8217;s reliable, scalable, and easy to set up \u2014 making it a go-to tool in cloud-native and security-conscious environments.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\ude80 What is Google Cloud NAT? Google Cloud NAT (Network Address Translation) is a fully managed service that enables outbound internet connectivity for resources in private Google Cloud VPC subnets,&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49317","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49317"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49317\/revisions"}],"predecessor-version":[{"id":49318,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49317\/revisions\/49318"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}