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. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Instal Google Cloud CLI.

  5. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  6. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Instal Google Cloud CLI.

  10. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  11. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init

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 konsol Google Cloud , 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 Region, pilih us-east4.

  7. Masukkan IP address range 192.168.1.0/24.

  8. Klik Done, lalu klik Create.

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 jaringan dan subnet Virtual Private Cloud kustom.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 13.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" \
    --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. Setel Direction of traffic ke Ingress.

  6. Setel Action on match ke Allow.

  7. Tetapkan Targets ke All instances in the network.

  8. Setel Source filter ke IPv4 ranges.

  9. Tetapkan Source IP ranges 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 Create.

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. Centang kotak 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, di kolom New principals, tentukan alamat email mereka.

    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 izin SSH IAP-nya Anda buat. 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.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 Nama gateway 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 Create.
  7. Klik Create.

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 minimal 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