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 melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda sudah memiliki cluster Standard. Jika Anda memerlukannya, buat cluster Standar.
Memeriksa status ip-masq-agent
Bagian ini menunjukkan cara:
- Menentukan apakah cluster Anda memiliki DaemonSet
ip-masq-agent. - Periksa resource
ConfigMap
ip-masq-agent.
Periksa DaemonSet ip-masq-agent
Untuk memeriksa apakah cluster Anda menjalankan DaemonSet ip-masq-agent, gunakan
Google Cloud CLI atau Google Cloud console.
gcloud
Dapatkan kredensial untuk cluster Anda:
gcloud container clusters get-credentials CLUSTER_NAMEGanti
CLUSTER_NAMEdengan nama cluster Anda.Telusuri
ip-masq-agentdi namespacekube-system:kubectl get daemonsets/ip-masq-agent -n kube-systemJika DaemonSet
ip-masq-agentada, 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> 13dJika DaemonSet
ip-masq-agenttidak ada, output-nya akan mirip dengan yang berikut ini:Error from server (NotFound): daemonsets.apps "ip-masq-agent" not foundPeriksa apakah DaemonSet
ip-masq-agentmenjalankan versi terbaru:kubectl get daemonsets/ip-masq-agent -n kube-system -o jsonpath='{.spec.template.spec.containers[].image}'Perintah ini harus menampilkan image container yang sama seperti yang ditentukan dalam Men-deploy DaemonSet ip-masq-agent.
Konsol
Buka halaman Workloads di konsol Google Cloud .
Untuk Filter , lakukan langkah berikut:
- Klik untuk menghapus filter Is system object: False.
- Filter properti berikut:
- Name:
ip-masq-agent. - Cluster: nama cluster Anda.
- Name:
Jika DaemonSet
ip-masq-agentada, Anda dapat melihat data DaemonSet dalam tabel. Jikaip-masq-agentDaemonSet 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 Google Cloud konsol.
gcloud
Dapatkan kredensial untuk cluster Anda:
gcloud container clusters get-credentials CLUSTER_NAMEGanti
CLUSTER_NAMEdengan nama cluster Anda.Tentukan ConfigMap
ip-masq-agentdalam namespacekube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemJika ConfigMap
ip-masq-agentada, 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-agenttidak ada, output-nya akan mirip dengan yang berikut ini:Error from server (NotFound): configmaps "ip-masq-agent" not found
Konsol
Buka halaman Configuration di konsol Google Cloud .
Untuk Filter , lakukan langkah berikut:
- Klik untuk menghapus filter Is system object: False.
- Filter properti berikut:
- Name:
ip-masq-agent. - Cluster: nama cluster Anda.
- Name:
Jika
ip-masq-agentConfigMap ada, Anda dapat melihat data ConfigMap dalam tabel. Jika ConfigMapip-masq-agenttidak 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.
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_TIMEGanti kode berikut:
CIDR_1danCIDR_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 daftarnonMasqueradeCIDRsdengan mengikuti format yang sama. PropertinonMasqueradeCIDRsminimal harus menyertakan rentang alamat IP node dan Pod cluster Anda.SYNC_INTERVAL: lamanya waktu setelah setiap Podip-masq-agentmemeriksa konten ConfigMapip-masq-agentdan menulis setiap perubahan ke file/etc/config/ip-masq-agentlokalnya. Setelan defaultnya adalah60.UNIT_OF_TIME: unit waktu untuk resyncInterval. Nilai yang valid adalahs(untuk detik) ataums(untuk milidetik). Setelan default-nya adalahs.
Setel
masqLinkLocalke 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.Buat resource ConfigMap:
kubectl create configmap ip-masq-agent \ --namespace=kube-system \ --from-file=config=LOCAL_CONFIG_FILE_PATHGanti
LOCAL_CONFIG_FILE_PATHdengan jalur ke file konfigurasi yang Anda buat di langkah sebelumnya.Tentukan ConfigMap
ip-masq-agentdalam namespacekube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemOutputnya 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
configdengan perubahan konfigurasi Anda. Sekarang Anda dapat men-deploy DeamonSetip-masq-agent.
Mengedit ConfigMap ip-masq-agent yang ada
Anda dapat mengubah konten ConfigMap ip-masq-agent yang ada dengan
menyelesaikan langkah-langkah berikut:
Buka ConfigMap di editor teks:
kubectl edit configmap ip-masq-agent --namespace=kube-systemEdit 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-systemGanti kode berikut:
CIDR_1danCIDR_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 daftarnonMasqueradeCIDRsdengan mengikuti format yang sama. PropertinonMasqueradeCIDRsminimal harus menyertakan rentang alamat IP node dan Pod cluster Anda.SYNC_INTERVAL: lamanya waktu setelah setiap Podip-masq-agentmemeriksa konten ConfigMapip-masq-agentdan menulis setiap perubahan ke file/etc/config/ip-masq-agentlokalnya. Setelan defaultnya adalah60.UNIT_OF_TIME: unit waktu untuk resyncInterval. Nilai yang valid adalahs(untuk detik) ataums(untuk milidetik). Setelan default-nya adalahs.
Setel
masqLinkLocalke 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.Tentukan ConfigMap
ip-masq-agentdalam namespacekube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemOutputnya 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
configyang 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.
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.12.3-gke.4@sha256:b5db41ddaf863b660da330322714f668101482b528829c50c53229d901d11af5 args: - --v=2 - --logtostderr=false - --log_file=/dev/stdout - --log_file_max_size=0 # 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 # Must be set to false when using Dataplane V2. - --random-fully=false securityContext: privileged: false capabilities: drop: ["ALL"] add: ["NET_ADMIN", "NET_RAW"] allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault 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-volumeyang 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
volumeMountcontainer.Nama ConfigMap harus sama dengan nama
configMapyang disebutkan di Volumeconfig-volumedi Pod.Nama rantai (
--masq-chain) harusIP-MASQ. Jika tidak, GKE tidak akan mengganti aturan penyamaran default.Pod DaemonSet membaca dari file
ip-masq-agent. Konten fileip-masq-agentadalah nilai kunciconfigdi ConfigMap.Jika Anda menggunakan rentang IP yang dicadangkan dan tidak disamarkan secara default, hapus tanda komentar pada baris
- --nomasq-all-reserved-rangesdi bagianarg.
Deploy DaemonSet:
kubectl apply -f LOCAL_FILE_PATHGanti
LOCAL_FILE_PATHdengan 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 ip-masq-agent tidak akan mengembalikan setelan penyamaran IP yang ada di node.
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
Bagian berikut memberikan saran pemecahan masalah.
Pemecahan masalah umum
Langkah-langkah berikut membantu Anda mendiagnosis masalah terkait penyamaran alamat IP:
- 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. - Konfirmasi versi image
ip-masq-agentyang ditentukan dalam DaemonSet. Jika versi DaemonSetip-masq-agentbukan yang terbaru, ikuti langkah-langkah deployment untuk mengupdate DaemonSet. - Periksa apakah rantai IP-MASQ diisi dengan benar dalam tabel IP NAT dengan menjalankan perintah
sudo iptables -t nat -L IP-MASQdi node yang terpengaruh. JikanonMasqueradeCIDRsyang ditentukan dalam ConfigMap tidak muncul di Tabel IP NAT, pastikan tidak ada salah ketik dalam file konfigurasi yang digunakan untuk membuat ConfigMap. - Pastikan bahwa tujuan telah mengizinkan rentang alamat IP node dan Pod.
- Jika traffic tidak dapat diakses dari node atau Pod, jalankan uji konektivitas.
Masalah: Alamat IP Pod berubah menjadi alamat IP node
Saat menggunakan agen penyamaran IP, Anda mungkin melihat alamat IP sumber Pod secara tidak terduga menggunakan alamat IP node saat Pod Anda berkomunikasi dengan tujuan eksternal.
Masalah ini disebabkan oleh daftar Source Network Address Translation (SNAT) kustom yang tidak ada atau tidak lengkap. Saat Anda menggunakan agen penyamaran IP, SNAT default cluster akan digunakan jika ConfigMap tidak ada atau tidak berisi daftar nonMasqueradeCIDRs. Saat paket meninggalkan Pod, SNAT default akan mengubah alamat IP sumber dari alamat IP Pod menjadi alamat IP internal node. Untuk mempelajari SNAT lebih lanjut, lihat
Agen penyamaran IP.
Untuk mengatasi masalah ini, konfigurasikan daftar SNAT kustom dengan menentukan daftar nonMasqueradeCIDRs di ConfigMap ip-masq-agent:
Buka ConfigMap
ip-masq-agent:kubectl edit configmap ip-masq-agent --namespace=kube-systemTinjau daftar
nonMasqueradeCIDRsdalam ConfigMap. DaftarnonMasqueradeCIDRsharus ada dan lengkap. Contoh:... nonMasqueradeCIDRs: - 35.100.0.0/16 ...Jika daftar tidak ada atau tidak lengkap, tambahkan atau ubah daftar
nonMasqueradeCIDRsuntuk menyertakan rentang IP tujuan yang alamat IP Pod sumbernya ingin Anda pertahankan. Daftar ini juga harus menyertakan alamat yang ingin Anda gunakan untuk Cloud NAT.Jika Anda tidak ingin traffic eksternal menggunakan SNAT, tetapkan kolom
nonMasqueradeCIDRske0.0.0.0/0. Contoh:... nonMasqueradeCIDRs: - 0.0.0.0/0 ...Jika traffic Anda tidak menggunakan SNAT, semua paket yang dikirim dari Pod akan mempertahankan alamat IP Pod sebagai alamat IP sumbernya, terlepas dari tujuannya.
Periksa alamat IP sumber paket keluar dari Pod Anda. Untuk memeriksa alamat ini, lakukan pengambilan paket. Jika hal tersebut tidak memungkinkan, Anda dapat memeriksa alamat IP node, yang seharusnya merupakan alamat IP sumber paket keluar yang tunduk pada SNAT, dengan perintah berikut:
kubectl get nodes -o wide
Langkah berikutnya
- Pelajari cara menggunakan Kebijakan NAT Keluar untuk mengonfigurasi penyamaran IP di cluster Autopilot.
- Pelajari cara membuat cluster VPC native.
- Membaca ringkasan jaringan GKE.
- Pelajari cara mengonfigurasi jaringan yang diizinkan.