Panduan ini membantu Anda mendiagnosis alasan workload (Pod atau VM) tidak dapat mengakses
jaringan eksternal menggunakan Cloud NAT. Sebagai developer, Anda terutama
berinteraksi dengan resource CloudNatGateway. Status resource ini adalah
sumber kebenaran 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 IAM Project Anda untuk memberi Anda salah satu atau kedua peran berikut:
- Pelihat Cloud NAT (
cloud-nat-viewer): Peran ini menawarkan akses hanya baca ke resource Cloud NAT. Peran ini akan membantu Anda memulai mendiagnosis masalah. - Developer Cloud NAT (
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. Dengan peran ini, Anda dapat melakukan banyak perbaikan yang dijelaskan di halaman ini. - Peran tambahan mungkin diperlukan untuk beberapa langkah dan perbaikan diagnostik tertentu.
- Pelihat Cloud NAT (
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 berfungsi baik 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 pemilihan rute 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 dikelompokkan ke 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 dalam
|
|
CloudNATSubnetAlreadyInUseCode |
Konflik Subnet. Subnet yang Anda minta sudah "dimiliki" oleh gateway Cloud NAT lain. Subnet hanya dapat dilampirkan 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 Salah (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 perutean yang benar. |
|
NET-E0301 |
Kehabisan Resource / Kegagalan Node. Sistem telah membuat konfigurasi, tetapi tidak dapat menetapkan IP keluar Anda ke node fisik yang berfungsi dengan baik. Hal ini biasanya berarti subnet kehabisan IP atau node gateway tidak berfungsi. |
|
NET-E0001 |
Error Sistem. Kegagalan komunikasi pengontrol. | Tindakan: Hubungi Administrator Platform. |
Error rute keluar (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 perutean (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 diberi otorisasi secara eksplisit untuk mengirim traffic keluar.
- 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 melewati jalur keluar 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.
Traffic keluar node cluster standar
Jika Anda menjalankan Cluster Standar, node itu sendiri memerlukan izin untuk keluar.
- 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.
Konflik NAT Keluar Default versus Cloud NAT
Error konfigurasi umum terjadi saat beban kerja dikonfigurasi untuk menggunakan mekanisme NAT Keluar Default lama sekaligus dipilih oleh Gateway Cloud NAT. Kombinasi ini menyebabkan tabrakan saat bidang data menerima petunjuk perutean yang bertentangan, sehingga menyebabkan kehilangan paket atau perilaku perutean non-deterministik.
Mendiagnosis bentrokan Pod
Untuk Pod, Egress NAT Default biasanya diaktifkan dengan menambahkan label tertentu. Pod tidak dapat memiliki label ini sekaligus menjadi target Cloud NAT Gateway.
Identifikasi Pod Target: Dapatkan label Pod yang mengalami masalah konektivitas.
kubectl get pod <POD_NAME> -n <NAMESPACE> --show-labelsMemeriksa Label yang Bertentangan:
- Pemilihan Cloud NAT: Apakah label Pod cocok dengan
workloadSelectorCloudNatGatewaydi namespace? - Label Egress Default: Apakah Pod memiliki label
egress.networking.gke.io/enabled: "true"?
Kondisi: Jika KEDUA kondisi benar, Anda mengalami tabrakan.
- Pemilihan Cloud NAT: Apakah label Pod cocok dengan
Penyelesaian: Hapus label keluar default lama dari Pod (atau Deployment/StatefulSet induknya) untuk mengizinkan Cloud NAT mengambil alih kontrol eksklusif.
Mendiagnosis konflik VM
Untuk Virtual Machine, mekanismenya berbeda. VM dengan objek
VirtualMachineExternalAccess (VMEA) sering dikonfigurasi untuk akses
default. Untuk menggunakan Cloud NAT, mereka harus memilih untuk ikut serta secara eksplisit 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>Memeriksa Anotasi yang Tidak Ada:
- Pemilihan Cloud NAT: Apakah label VM cocok dengan
CloudNatGateway? - Anotasi dengan Persetujuan Pengguna: 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 berkonflik dengan sistem keluar 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"