Panduan ini membantu Anda mendiagnosis alasan workload (Pod atau VM) Anda tidak dapat mengakses jaringan eksternal menggunakan Cloud NAT. Sebagai developer, Anda terutama berinteraksi dengan resource CloudNatGateway. Status resource ini adalah
sumber tepercaya utama Anda untuk proses debug.
Sebelum memulai
Untuk memecahkan masalah konfigurasi Cloud NAT, Anda harus memiliki hal berikut:
- Peran identitas dan akses yang diperlukan. Minta Admin Project IAM Anda untuk
memberi Anda salah satu atau kedua peran berikut:
- Cloud NAT Viewer (
cloud-nat-viewer): Peran ini menawarkan akses hanya baca ke resource Cloud NAT. Peran ini membantu Anda mulai mendiagnosis masalah. - Cloud NAT Developer (
cloud-nat-developer): Peran ini memberikan izin yang diperlukan bagi operator aplikasi untuk Membuat, Membaca, Memperbarui, dan Menghapus (CRUD) objek Cloud NAT dalam project yang ditetapkan kepada mereka. Peran ini memungkinkan Anda melakukan banyak perbaikan yang dijelaskan di halaman ini. - Peran tambahan mungkin diperlukan untuk beberapa tindakan diagnostik dan perbaikan tertentu.
- Cloud NAT Viewer (
Diagnostik awal
Sebelum mempelajari kode error, pastikan resource dasar ada dan dapat dijangkau.
Perintah:
kubectl get cloudnatgateway GATEWAY_NAME -n PROJECT_NAMESPACE -o yaml
Ganti kode berikut:
GATEWAY_NAME: Nama resourceCloudNatGateway.PROJECT_NAMESPACE: Namespace project Anda.
Periksa Kondisi Status: Gateway yang responsif harus memiliki semua kondisi berikut yang ditetapkan ke True:
Ready: Status kesehatan global.SubnetsReady: Konfigurasi kumpulan IP valid.PerimeterConfigurationReady: Infrastruktur jaringan upstream dikonfigurasi.EgressRoutesReady: Kebijakan perutean untuk pod Anda aktif.
Jika salah satunya adalah False, periksa kolom reason dan message dalam output status dan lihat tabel di bagian berikut.
Referensi dan perbaikan kode error
Kode error yang ditampilkan oleh kubectl get cloudnatgateway termasuk dalam tiga kategori utama.
Error subnet (SubnetsReady adalah False)
Kondisi ini menunjukkan masalah pada kumpulan alamat IP yang ditetapkan ke gateway.
| Kode Error | Artinya | Langkah-Langkah Perbaikan |
|---|---|---|
CloudNATSelectorFieldOverlapsCode |
Konflik Konfigurasi. workloadSelector gateway ini cocok dengan workload yang sama dengan gateway lain di project Anda. Traffic tidak dapat dirutekan secara deterministik. |
|
CloudNATSubnetRefsFieldInvalidCode |
Subnet Tidak Valid. Subnet yang ditentukan di
|
|
CloudNATSubnetAlreadyInUseCode |
Konflik Subnet. Subnet yang Anda minta sudah "dimiliki" oleh gateway Cloud NAT lain. Subnet hanya dapat dipasang ke satu gateway dalam satu waktu. |
|
UNETAPIServerErrorCode |
Error Sistem. Pengontrol tidak dapat berkomunikasi dengan server API untuk memvalidasi subnet. | Tindakan: Masalah ini kemungkinan bersifat sementara. Jika masalah berlanjut, hubungi Administrator Platform Anda. |
Error konfigurasi perimeter (PerimeterConfigurationReady adalah False)
Kondisi ini mencerminkan status gateway perimeter.
| Kode Error | Artinya | Langkah-Langkah Perbaikan |
|---|---|---|
NET-E0305 |
Konflik Konfigurasi. (Sama seperti di atas). Pemilih yang tumpang-tindih mencegah sistem menghitung grup pemilihan rute yang benar. |
|
NET-E0301 |
Resource Habis / Kegagalan Node. Sistem telah membuat konfigurasi, tetapi tidak dapat menetapkan IP egress Anda ke node fisik yang responsif. Hal ini biasanya berarti subnet kehabisan IP atau node gateway tidak aktif. |
|
NET-E0001 |
Error Sistem. Kegagalan komunikasi pengontrol. | Tindakan: Hubungi Administrator Platform. |
Error rute egress (EgressRoutesReady adalah False)
Kondisi ini mencerminkan status kebijakan perutean di dalam cluster.
| Kode Error | Artinya | Langkah-Langkah Perbaikan |
|---|---|---|
NET-E0305 |
Konflik Konfigurasi. (Sama seperti di atas). |
|
NET-E0304 |
Kegagalan Pemrograman. Sistem gagal memprogram aturan pemilihan rute (BPF) untuk IP gateway spesifik Anda. | Tindakan: Ini adalah error pemrograman internal atau inkonsistensi status.
|
Masalah umum lainnya
Jika status Gateway adalah Ready: True, tetapi traffic masih gagal, periksa kesalahan konfigurasi umum berikut:
Izin level project tidak ada
Project Anda harus diizinkan secara eksplisit untuk melakukan egress traffic.
- Periksa: Apakah resource Project Anda memiliki label
networking.gdc.goog/enable-default-egress-allow-to-outside-the-org: "true"? - Perbaikan: Minta Admin Project Anda untuk menerapkan label ini.
Anotasi VM tidak ada (Khusus Virtual Machine)
VM mengabaikan jalur egress Pod standar dan memerlukan petunjuk eksplisit untuk menggunakan Cloud NAT.
- Periksa: Apakah objek
VirtualMachineExternalAccess(VMEA) untuk VM Anda memiliki anotasiegress.networking.gke.io/use-cloud-nat: "true"? - Perbaikan: Tambahkan anotasi ke objek VMEA.
Egress node cluster standar
Jika Anda menjalankan Cluster Standard, node itu sendiri memerlukan izin untuk egress.
- Periksa: Apakah objek
Clustermemiliki labelcluster.gdc.goog/enable-node-egress-to-outside-the-org: "true"? - Perbaikan: Minta Admin Platform Anda untuk memberi label pada objek Cluster.
Tabrakan NAT Keluar Default versus Cloud NAT
Error konfigurasi umum terjadi saat workload dikonfigurasi untuk menggunakan mekanisme NAT Egress Default lama, sekaligus dipilih oleh Gateway Cloud NAT. Kombinasi ini menghasilkan tabrakan saat bidang data menerima petunjuk perutean yang bertentangan, sehingga menyebabkan paket hilang atau perilaku perutean non-deterministik.
Mendiagnosis tabrakan Pod
Untuk Pod, NAT Egress Default biasanya diaktifkan dengan menambahkan label tertentu. Pod tidak boleh memiliki label ini sekaligus ditargetkan oleh Gateway Cloud NAT.
Mengidentifikasi Pod Target: Dapatkan label Pod yang mengalami masalah konektivitas.
kubectl get pod <POD_NAME> -n <NAMESPACE> --show-labelsPeriksa Label yang Bertentangan:
- Pemilihan Cloud NAT: Apakah label Pod cocok dengan
workloadSelectordariCloudNatGatewaymana pun di namespace? - Label Egress Default: Apakah Pod memiliki label
egress.networking.gke.io/enabled: "true"?
Kondisi: Jika KEDUANYA benar, Anda mengalami tabrakan.
- Pemilihan Cloud NAT: Apakah label Pod cocok dengan
Penyelesaian: Hapus label egress default lama dari Pod (atau Deployment/StatefulSet induknya) agar Cloud NAT dapat mengambil alih kontrol eksklusif.
Mendiagnosis tabrakan VM
Untuk Virtual Machine, mekanismenya berbeda. VM dengan objek VirtualMachineExternalAccess (VMEA) sering kali dikonfigurasi untuk akses default. Untuk menggunakan Cloud NAT, mereka harus secara eksplisit memilih ikut serta dengan menambahkan anotasi untuk menonaktifkan jalur default dan mengaktifkan jalur Cloud NAT.
Identifikasi VMEA: Temukan objek
VirtualMachineExternalAccessyang terkait dengan VM.kubectl get vmea -n <NAMESPACE>Periksa Anotasi yang Tidak Ada:
- Pemilihan Cloud NAT: Apakah label VM cocok dengan
CloudNatGateway? - Anotasi Opt-in: Periksa VMEA untuk anotasi
egress.networking.gke.io/use-cloud-nat: "true".
Kondisi: Jika VM cocok dengan gateway, tetapi TIDAK MEMILIKI anotasi ini, traffic akan bertabrakan dengan sistem egress default.
- Pemilihan Cloud NAT: Apakah label VM cocok dengan
Penyelesaian: Tambahkan anotasi ke objek VMEA.
kubectl annotate vmea <VMEA_NAME> -n <NAMESPACE> egress.networking.gke.io/use-cloud-nat="true"