Mengonfigurasi agen penyamaran IP di cluster Standard


Halaman ini berisi penjelasan tentang cara mengonfigurasi cluster yang dibuat dalam mode Standard Google Kubernetes Engine (GKE) untuk melakukan penyamaran IP dengan ip-masq-agent. Untuk informasi selengkapnya tentang penyamaran IP dalam mode Autopilot GKE, lihat Menggunakan kebijakan NAT Keluar untuk mengonfigurasi penyamaran IP di cluster Autopilot.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Memeriksa status ip-masq-agent

Bagian ini menunjukkan cara:

  • Menentukan apakah cluster Anda memiliki DaemonSet ip-masq-agent.
  • Memeriksa resource ConfigMap ip-masq-agent.

Memeriksa DaemonSet ip-masq-agent

Untuk memeriksa apakah cluster Anda menjalankan DaemonSet ip-masq-agent, gunakan Google Cloud CLI atau Konsol Google Cloud.

gcloud

  1. Dapatkan kredensial untuk cluster Anda:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    Ganti CLUSTER_NAME dengan nama cluster Anda.

  2. Telusuri ip-masq-agent di namespace kube-system:

    kubectl get daemonsets/ip-masq-agent -n kube-system
    

    Jika DaemonSet ip-masq-agent ada, output-nya akan mirip dengan yang berikut ini:

    NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    ip-masq-agent   3         3         3       3            3           <none>          13d
    

    Jika DaemonSet ip-masq-agent tidak ada, output-nya akan mirip dengan yang berikut ini:

    Error from server (NotFound): daemonsets.apps "ip-masq-agent" not found
    

Konsol

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Untuk Filter , lakukan langkah berikut:

    1. Klik untuk menghapus filter Is system object: False.
    2. Filter properti berikut:
      • Name: ip-masq-agent.
      • Cluster: nama cluster Anda.

    Jika DaemonSet ip-masq-agent ada, Anda dapat melihat data DaemonSet dalam tabel. Jika ip-masq-agent DaemonSet tidak ada, tidak akan ada baris yang ditampilkan.

Untuk membuat ConfigMap ip-masq-agent dan men-deploy DaemonSet ip-masq-agent, lihat Mengonfigurasi dan men-deploy ip-masq-agent.

Memeriksa ConfigMap ip-masq-agent

Untuk memeriksa apakah cluster Anda menjalankan ConfigMap ip-masq-agent, gunakan Google Cloud CLI atau Konsol Google Cloud.

gcloud

  1. Dapatkan kredensial untuk cluster Anda:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    Ganti CLUSTER_NAME dengan nama cluster Anda.

  2. Tentukan ConfigMap ip-masq-agent dalam namespace kube-system:

    kubectl describe configmaps/ip-masq-agent -n kube-system
    

    Jika ConfigMap ip-masq-agent ada, output-nya akan mirip dengan yang berikut ini:

    Name:         ip-masq-agent
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    config:
    ----
    nonMasqueradeCIDRs:
      - 198.15.5.92/24
      - 10.0.0.0/8
    masqLinkLocal: false
    resyncInterval: 60s
    
    BinaryData
    ====
    
    Events:  <none>
    

    Jika ConfigMap ip-masq-agent tidak ada, output-nya akan mirip dengan yang berikut ini:

    Error from server (NotFound): configmaps "ip-masq-agent" not found
    

Konsol

  1. Buka halaman Configuration di Konsol Google Cloud.

    Buka Configuration

  2. Untuk Filter , lakukan langkah berikut:

    1. Klik untuk menghapus filter Is system object: False.
    2. Filter properti berikut:
      • Name: ip-masq-agent.
      • Cluster: nama cluster Anda.

    Jika ip-masq-agent ConfigMap ada, Anda dapat melihat data ConfigMap dalam tabel. Jika ConfigMap ip-masq-agent tidak ada, tidak akan ada baris yang ditampilkan.

Jika cluster sudah memiliki ConfigMap ip-masq-agent, Anda dapat mengonfigurasi dan men-deploy-nya.

Mengonfigurasi dan men-deploy ip-masq-agent

Bagian ini menunjukkan cara membuat atau mengedit ConfigMap ip-masq-agent serta cara men-deploy atau menghapus DaemonSet ip-masq-agent. Untuk menentukan tugas mana yang perlu dilakukan, Anda harus terlebih dahulu menentukan apakah cluster sudah memiliki ConfigMap ip-masq-agent dan DaemonSet ip-masq-agent.

Membuat ConfigMap ip-masq-agent

Langkah-langkah berikut menunjukkan cara membuat ConfigMap ip-masq-agent. Jika cluster Anda sudah memiliki ConfigMap ip-masq-agent, edit ConfigMap ip-masq-agent yang ada.

  1. Buat file konfigurasi menggunakan template berikut dan simpan secara lokal. Anda dapat menggunakan nama apa pun untuk salinan lokal file konfigurasi ini.

    nonMasqueradeCIDRs:
      - CIDR_1
      - CIDR_2
    masqLinkLocal: false
    resyncInterval: SYNC_INTERVALUNIT_OF_TIME
    

    Ganti kode berikut:

    • CIDR_1 dan CIDR_2: rentang alamat IP dalam format CIDR. Saat paket dikirim ke tujuan tersebut, cluster Anda tidak akan menyamarkan sumber alamat IP dan akan mempertahankan alamat IP Pod sumber. Jika memerlukan lebih dari dua CIDR, tambahkan entri lainnya ke daftar nonMasqueradeCIDRs dengan mengikuti format yang sama. Properti nonMasqueradeCIDRs minimal harus menyertakan rentang alamat IP node dan Pod cluster Anda.

    • SYNC_INTERVAL: lamanya waktu setelah setiap Pod ip-masq-agent memeriksa konten ConfigMap ip-masq-agent dan menulis setiap perubahan ke file /etc/config/ip-masq-agent lokalnya. Setelan defaultnya adalah 60.

    • UNIT_OF_TIME: unit waktu untuk resyncInterval. Nilai yang valid adalah s (untuk detik) atau ms (untuk milidetik). Setelan default-nya adalah s.

    Setel masqLinkLocal ke salah (false) (default), kecuali jika Anda perlu mengaktifkan penyamaran paket yang dikirim ke alamat IPv4 link-local. Untuk mengetahui informasi selengkapnya, lihat Penyamaran ke tujuan link-local.

  2. Buat resource ConfigMap:

    kubectl create configmap ip-masq-agent \
       --namespace=kube-system \
       --from-file=config=LOCAL_CONFIG_FILE_PATH
    

    Ganti LOCAL_CONFIG_FILE_PATH dengan jalur ke file konfigurasi yang Anda buat di langkah sebelumnya.

  3. Tentukan ConfigMap ip-masq-agent dalam namespace kube-system:

    kubectl describe configmaps/ip-masq-agent -n kube-system
    

    Outputnya mirip dengan yang berikut ini:

    Name:         ip-masq-agent
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    config:
    ----
    nonMasqueradeCIDRs:
      - 198.15.5.92/24
      - 10.0.0.0/8
    masqLinkLocal: false
    resyncInterval: 60s
    
    BinaryData
    ====
    Events:  <none>
    
    

    Output ini mencakup parameter config dengan perubahan konfigurasi Anda. Sekarang Anda dapat men-deploy DeamonSet ip-masq-agent.

Mengedit ConfigMap ip-masq-agent yang ada

Anda dapat mengubah konten ConfigMap ip-masq-agent yang ada dengan menyelesaikan langkah-langkah berikut:

  1. Buka ConfigMap di editor teks:

    kubectl edit configmap ip-masq-agent --namespace=kube-system
    
  2. Edit konten file ConfigMap:

    apiVersion: v1
    data:
      config: |
        nonMasqueradeCIDRs:
          - CIDR_1
          - CIDR_2
        masqLinkLocal: false
        resyncInterval: SYNC_INTERVALUNIT_OF_TIME
    kind: ConfigMap
    metadata:
      name: ip-masq-agent
      namespace: kube-system
    

    Ganti kode berikut:

    • CIDR_1 dan CIDR_2: rentang alamat IP dalam format CIDR. Saat paket dikirim ke tujuan tersebut, cluster Anda tidak akan menyamarkan sumber alamat IP dan akan mempertahankan alamat IP Pod sumber. Jika Anda memerlukan lebih dari dua CIDR, tambahkan entri lainnya ke daftar nonMasqueradeCIDRs dengan mengikuti format yang sama. Properti nonMasqueradeCIDRs minimal harus menyertakan rentang alamat IP node dan Pod cluster Anda.

    • SYNC_INTERVAL: lamanya waktu setelah setiap Pod ip-masq-agent memeriksa konten ConfigMap ip-masq-agent dan menulis setiap perubahan ke file /etc/config/ip-masq-agent lokalnya. Setelan defaultnya adalah 60.

    • UNIT_OF_TIME: unit waktu untuk resyncInterval. Nilai yang valid adalah s (untuk detik) atau ms (untuk milidetik). Setelan default-nya adalah s.

    Setel masqLinkLocal ke salah (false) (default), kecuali jika Anda perlu mengaktifkan penyamaran paket yang dikirim ke alamat IPv4 link-local. Untuk mengetahui informasi selengkapnya, lihat Penyamaran ke tujuan link-local.

  3. Tentukan ConfigMap ip-masq-agent dalam namespace kube-system:

    kubectl describe configmaps/ip-masq-agent -n kube-system
    

    Outputnya mirip dengan hal berikut ini:

    Name:         ip-masq-agent
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    config:
    ----
    nonMasqueradeCIDRs:
      - 198.15.5.92/24
      - 10.0.0.0/8
    masqLinkLocal: false
    resyncInterval: 60s
    
    BinaryData
    ====
    
    Events:  <none>
    

    Output ini mencakup parameter config yang cocok dengan nilai konfigurasi dari file yang Anda buat.

Men-deploy DaemonSet ip-masq-agent

Setelah membuat atau mengedit ConfigMap ip-masq-agent, deploy DaemonSet ip-masq-agent.

  1. Simpan manifes berikut sebagai file YAML:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: ip-masq-agent
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          k8s-app: ip-masq-agent
      template:
        metadata:
          labels:
            k8s-app: ip-masq-agent
        spec:
          hostNetwork: true
          containers:
          - name: ip-masq-agent
            image: gke.gcr.io/ip-masq-agent:v2.9.3-gke.5@sha256:c75a164d6011c7da7084da0fddfc7419914025e092741c3c230cec1589a1a06b
            args:
            # The masq-chain must be IP-MASQ
            - --masq-chain=IP-MASQ
            # To non-masquerade reserved IP ranges by default,
            # uncomment the following line.
            # - --nomasq-all-reserved-ranges
            securityContext:
              privileged: true
            volumeMounts:
            - name: config-volume
              mountPath: /etc/config
          volumes:
          - name: config-volume
            configMap:
              name: ip-masq-agent
              optional: true
              items:
              - key: config
                path: ip-masq-agent
          tolerations:
          - effect: NoSchedule
            operator: Exists
          - effect: NoExecute
            operator: Exists
          - key: "CriticalAddonsOnly"
            operator: "Exists"
    

    Manifes ini membuat volume bernama config-volume yang dipasang sebagaimana ditentukan oleh volumeMount container.

    Jika Anda perlu mengedit manifes ini, pertimbangkan kondisi berikut:

    • Nama volume dapat berupa apa saja, tetapi harus sama dengan nama volumeMount container.

    • Nama ConfigMap harus sama dengan nama configMap yang disebutkan di Volume config-volume di Pod.

    • Nama rantai (--masq-chain) harus IP-MASQ. Jika tidak, GKE tidak akan mengganti aturan penyamaran default.

    • Pod DaemonSet membaca dari file ip-masq-agent. Konten file ip-masq-agent adalah nilai kunci config di ConfigMap.

    • Jika Anda menggunakan rentang IP yang dicadangkan dan tidak disamarkan secara default, hapus tanda komentar pada baris - --nomasq-all-reserved-ranges di bagian arg.

  2. Deploy DaemonSet:

    kubectl apply -f LOCAL_FILE_PATH
    

    Ganti LOCAL_FILE_PATH dengan jalur ke file yang Anda buat di langkah sebelumnya.

Anda dapat secara manual mengupdate DaemonSet ip-masq-agent yang telah dibuat. Untuk mempelajari lebih lanjut, lihat Mengupdate DaemonSet.

Menghapus ip-masq-agent

Bagian ini menunjukkan cara menghapus DaemonSet ip-masq-agent dan ConfigMap ip-masq-agent.

Menghapus DaemonSet ip-masq-agent

Jika membuat DaemonSet ip-masq-agent secara manual, Anda dapat menghapusnya dengan menjalankan perintah berikut:

kubectl delete daemonsets ip-masq-agent -n kube-system

Menghapus ConfigMap ip-masq-agent

Untuk menghapus ConfigMap ip-masq-agent sepenuhnya, jalankan perintah berikut:

kubectl delete configmap ip-masq-agent -n kube-system

Pemecahan masalah

Langkah berikut memberikan informasi seputar pemecahan masalah:

  • Konfirmasi status ip-masq-agent. Jika ConfigMap tidak ditentukan, traffic ke semua tujuan default tidak akan disamarkan dan akan mempertahankan alamat IP Pod. Traffic ke tujuan lain akan mempertahankan alamat IP node.
  • Periksa apakah rantai IP-MASQ terisi dengan benar di tabel IP NAT dengan menjalankan perintah sudo iptables -t nat -L IP-MASQ di node yang terkena dampak. Jika nonMasqueradeCIDRs yang ditentukan di ConfigMap tidak muncul di Tabel IP NAT, pastikan tidak ada kesalahan ketik di file konfigurasi yang digunakan untuk membuat ConfigMap.
  • Pastikan tujuan yang ingin dijangkau Pod telah disertakan dalam nonMasqueradeCIDRs di ConfigMap. Jika tujuan tidak ada di nonMasqueradeCIDRs, traffic akan mempertahankan alamat IP node.
  • Pastikan bahwa tujuan telah mengizinkan rentang alamat IP node dan Pod.
  • Jika traffic tidak dapat diakses dari node atau Pod, jalankan uji konektivitas.

Langkah selanjutnya