Menggunakan Public NAT dengan GKE

Halaman ini menunjukkan cara mengonfigurasi penyiapan NAT Publik contoh dengan Google Kubernetes Engine (GKE). Sebelum menyiapkan Public NAT, baca Ringkasan Public NAT.

Prasyarat

Anda harus melakukan hal berikut sebelum menyiapkan NAT Publik.

Mendapatkan izin IAM

Peran roles/compute.networkAdmin memberi Anda izin untuk membuat gateway NAT di Cloud Router, mencadangkan dan menetapkan alamat IP NAT, serta menentukan subnetwork (subnet) yang traffic-nya harus menggunakan terjemahan alamat jaringan oleh gateway NAT.

Menyiapkan Google Cloud

Sebelum memulai, siapkan item berikut di Google Cloud.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.

  5. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Install the Google Cloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Menyiapkan contoh GKE

    Gunakan contoh ini jika Anda ingin melihat konfigurasi Public NAT sederhana yang berfungsi dengan GKE.

    Langkah 1: Buat jaringan dan subnet VPC

    Jika sudah memiliki jaringan dan subnet, Anda dapat melewati langkah ini.

    Konsol

    1. Di Google Cloud konsol, buka halaman VPC networks.

      Buka halaman Jaringan VPC

    2. Klik Create VPC network.

    3. Masukkan Nama custom-network1.

    4. Di bagian Subnets, tetapkan Subnet creation mode ke Custom.

    5. Di bagian New subnet, masukkan Name subnet-us-east-192.

    6. Di bagian Region, pilih us-east4.

    7. Masukkan rentang alamat IP 192.168.1.0/24.

    8. Klik Selesai, lalu klik Buat.

    gcloud

    1. Buat jaringan Virtual Private Cloud (VPC) mode kustom baru di project Anda:

      gcloud compute networks create custom-network1 \
          --subnet-mode custom

      Output:

      NAME             MODE     IPV4_RANGE   GATEWAY_IPV4
      custom-network1  custom

    2. Tentukan awalan subnet untuk region pertama Anda. Dalam contoh ini, kita menetapkan 192.168.1.0/24 ke region us-east4.

      gcloud compute networks subnets create subnet-us-east-192 \
         --network custom-network1 \
         --region us-east4 \
         --range 192.168.1.0/24

      Output:

      NAME                REGION    NETWORK          RANGE
      subnet-us-east-192  us-east4  custom-network1  192.168.1.0/24

    Terraform

    Anda dapat menggunakan modul Terraform untuk membuat subnet dan jaringan Virtual Private Cloud kustom.

    module "test-vpc-module" {
      source       = "terraform-google-modules/network/google"
      version      = "~> 10.0"
      project_id   = var.project_id # Replace this with your project ID in quotes
      network_name = "custom-network1"
      mtu          = 1460
    
      subnets = [
        {
          subnet_name   = "subnet-us-east-192"
          subnet_ip     = "192.168.1.0/24"
          subnet_region = "us-east4"
        }
      ]
    }

    Langkah 2: Buat cluster pribadi

    Konsol

    1. Di konsol Google Cloud , buka halaman Kubernetes clusters.

      Buka halaman cluster Kubernetes

    2. Klik Buat kluster.

    3. Untuk Name, masukkan nat-test-cluster.

    4. Tetapkan Location type ke Zonal.

    5. Setel Zone ke us-east4-c.

    6. Di panel navigasi, klik Networking.

    7. Pilih Cluster pribadi.

    8. Hapus centang pada kotak Akses panel kontrol menggunakan alamat IP eksternalnya.

    9. Masukkan Rentang IP bidang kontrol 172.16.0.0/28.

    10. Setel Network ke custom-network1.

    11. Untuk membuat dan memulai cluster, klik Create.

    gcloud

    gcloud container clusters create "nat-test-cluster" \
        --zone "us-east4-c" \
        --username "admin" \
        --cluster-version "latest" \
        --machine-type "e2-medium" \
        --disk-type "pd-standard" \
        --disk-size "100" \
        --scopes "https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \
        --num-nodes "3" \
        --enable-private-nodes \
        --enable-private-endpoint \
        --master-ipv4-cidr "172.16.0.0/28" \
        --enable-ip-alias \
        --network "projects/PROJECT_ID/global/networks/custom-network1" \
        --subnetwork "projects/PROJECT_ID/regions/us-east4/subnetworks/subnet-us-east-192" \
        --max-nodes-per-pool "110" \
        --enable-master-authorized-networks \
        --addons HorizontalPodAutoscaling,HttpLoadBalancing \
        --enable-autoupgrade \
        --enable-autorepair
    

    Terraform

    Anda dapat menggunakan resource Terraform untuk membuat cluster pribadi.

    resource "google_container_cluster" "primary" {
      project            = var.project_id
      name               = "nat-test-cluster"
      location           = "us-east4-c"
      initial_node_count = 3
      network            = var.network # Replace with a reference or self link to your network, in quotes
      subnetwork         = var.subnet  # Replace with a reference or self link to your subnet, in quotes
      private_cluster_config {
        master_ipv4_cidr_block  = "172.16.0.0/28"
        enable_private_endpoint = true
        enable_private_nodes    = true
      }
      ip_allocation_policy {
      }
      master_authorized_networks_config {
      }
    }

    Langkah 3: Buat aturan firewall yang mengizinkan koneksi SSH

    Konsol

    1. Di konsol Google Cloud , buka halaman Firewall policies.

      Buka halaman Kebijakan firewall

    2. Klik Create firewall rule.

    3. Masukkan Nama allow-ssh.

    4. Tentukan Network custom-network1.

    5. Tetapkan Direction of traffic ke Ingress.

    6. Setel Tindakan jika ada kecocokan ke Izinkan.

    7. Tetapkan Targets ke All instances in the network.

    8. Tetapkan Source filter ke IPv4 ranges.

    9. Tetapkan Rentang IP sumber ke 35.235.240.0/20.

    10. Tetapkan Protocols and ports ke Specified protocols and ports.

    11. Pilih kotak centang tcp, lalu masukkan port 22.

    12. Klik Buat.

    gcloud

    gcloud compute firewall-rules create allow-ssh \
        --network custom-network1 \
        --source-ranges 35.235.240.0/20 \
        --allow tcp:22

    Terraform

    Anda dapat menggunakan resource Terraform untuk membuat aturan firewall.

    resource "google_compute_firewall" "rules" {
      project = var.project_id
      name    = "allow-ssh"
      network = var.network
      allow {
        protocol = "tcp"
        ports    = ["22"]
      }
      source_ranges = ["35.235.240.0/20"]
    }

    Langkah 4: Buat izin SSH IAP untuk salah satu node Anda

    Pada langkah selanjutnya, gunakan IAP untuk terhubung ke node Anda.

    Konsol

    1. Di konsol Google Cloud , buka halaman Identity-Aware Proxy.

      Buka halaman Identity-Aware Proxy

    2. Pilih tab SSH and TCP resources.

    3. Pilih kotak centang di samping node pertama dalam daftar di bagian All Tunnel Resources > us-east4-c. Namanya akan mirip dengan gke-nat-test-cluster-default-pool-b50db58d-075t.

    4. Tuliskan nama node; nanti Anda akan menggunakannya untuk menguji konektivitas.

    5. Di panel kanan, klik Tambahkan prinsipal.

    6. Untuk memberikan akses ke resource kepada pengguna, grup, atau akun layanan, masukkan alamat email mereka di kolom New principals.

      Jika hanya menguji fitur ini, Anda dapat memasukkan alamat email Anda sendiri.

    7. Untuk memberikan akses pokok ke resource melalui fitur penerusan TCP Cloud IAP, di daftar drop-down Role, pilih Cloud IAP > IAP-secured Tunnel User.

    8. Klik Simpan.

    gcloud

    Untuk langkah ini, gunakan petunjuk Konsol.

    Langkah 5: Login ke node dan konfirmasi bahwa node tidak dapat mengakses internet

    Konsol

    1. Di konsol Google Cloud , buka halaman VM instances.

      Buka halaman Instance VM

    2. Temukan node yang Anda buat izin SSH IAP-nya. Di kolom Connect, klik panah drop-down SSH, lalu pilih Open in browser window.

      Jika ini adalah pertama kalinya Anda terhubung ke instance,Google Cloud akan membuat kunci SSH untuk Anda.

    3. Dari perintah node, temukan ID proses container kube-dns:

      pgrep '^kube-dns$'
    4. Akses container:

      sudo nsenter --target PROCESS_ID --net /bin/bash
    5. Dari kube-dns, coba hubungkan ke internet:

      curl example.com

      Anda tidak akan mendapatkan hasil apa pun. Jika Anda melakukannya, Anda mungkin belum membuat cluster sebagai cluster pribadi, atau mungkin ada masalah lain. Untuk memecahkan masalah, lihat VM dapat mengakses internet secara tidak terduga tanpa NAT Publik.

      Untuk mengakhiri perintah, Anda mungkin harus memasukkan Ctrl+C.

    gcloud

    1. Temukan nama salah satu node cluster Anda:

      gcloud compute instances list

      Nama node terlihat seperti gke-nat-test-cluster-default-pool-1a4cbd06-3m8v. Catat nama node dan gunakan nama tersebut di mana pun Anda melihat NODE_NAME dalam perintah berikut.

    2. Hubungkan ke node:

      gcloud compute ssh NODE_NAME \
          --zone us-east4-c \
          --tunnel-through-iap
    3. Dari perintah node, temukan ID proses container kube-dns:

      pgrep '^kube-dns$'
    4. Akses container:

      sudo nsenter --target PROCESS_ID --net /bin/bash
    5. Dari kube-dns, coba hubungkan ke internet:

      curl example.com

      Anda tidak akan mendapatkan hasil apa pun.Untuk mengakhiri perintah, Anda mungkin harus memasukkan Ctrl+C.

    Langkah 6: Buat konfigurasi NAT menggunakan Cloud Router

    Anda harus membuat Cloud Router di region yang sama dengan instance yang menggunakan NAT Publik. NAT Publik hanya digunakan untuk menempatkan informasi NAT ke VM. Alamat ini tidak digunakan sebagai bagian dari gateway NAT yang sebenarnya.

    Dengan konfigurasi ini, semua instance di region tersebut dapat menggunakan NAT Publik untuk semua rentang IP primer dan alias. Cloud Router juga otomatis mengalokasikan alamat IP eksternal untuk gateway NAT. Untuk mengetahui opsi lainnya, lihat dokumentasi Google Cloud CLI.

    Konsol

    1. Di konsol Google Cloud , buka halaman Cloud NAT.

      Buka halaman Cloud NAT

    2. Klik Mulai atau Create Cloud NAT gateway.

    3. Masukkan Gateway name nat-config.

    4. Tetapkan VPC network ke custom-network1.

    5. Tetapkan Region ke us-east4.

    6. Di bagian Cloud Router, pilih Create new router.

      1. Masukkan Nama nat-router.
      2. Klik Buat.
    7. Klik Buat.

    gcloud

    1. Membuat cloud router

      gcloud compute routers create nat-router \
          --network custom-network1 \
          --region us-east4
    2. Tambahkan konfigurasi ke router:

      gcloud compute routers nats create nat-config \
          --router-region us-east4 \
          --router nat-router \
          --nat-all-subnet-ip-ranges \
          --auto-allocate-nat-external-ips

    Terraform

    Anda dapat menggunakan resource Terraform untuk membuat Cloud Router.

    resource "google_compute_router" "router" {
      project = var.project_id
      name    = "nat-router"
      network = var.network
      region  = "us-east4"
    }

    Anda dapat menggunakan modul Terraform untuk membuat konfigurasi NAT.

    module "cloud-nat" {
      source                             = "terraform-google-modules/cloud-nat/google"
      version                            = "~> 5.0"
      project_id                         = var.project_id
      region                             = "us-east4"
      router                             = google_compute_router.router.name
      name                               = "nat-config"
      source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
    }

    Langkah 7: Coba hubungkan ke internet lagi

    Mungkin perlu waktu hingga tiga menit agar konfigurasi NAT diterapkan, jadi tunggu setidaknya satu menit sebelum mencoba mengakses internet lagi.

    Jika Anda masih belum login ke kube-dns, hubungkan kembali dengan menggunakan prosedur di Langkah 5. Setelah Anda login, jalankan kembali perintah curl:

    curl example.com

    Anda akan melihat output yang berisi konten berikut:

    
    <html>
    <head>
    <title>Example Domain</title>
    ...
    ...
    ...
    </head>
    
    <body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is established to be used for illustrative examples in documents. You can use this
        domain in examples without prior coordination or asking for permission.</p>
        <p><a href="http://www.iana.org/domains/example">More information...</a></p>
    </div>
    </body>
    </html>
    

    Langkah berikutnya