Halaman ini menunjukkan cara menyelesaikan masalah jaringan dengan Google Distributed Cloud. Informasi dan panduan pemecahan masalah umum diberikan, beserta alat yang disarankan. Informasi pemecahan masalah DNS dan beberapa masalah umum untuk MetalLB juga disertakan.
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.Pemecahan masalah konektivitas jaringan
Jaringan GKE Enterprise mengandalkan infrastruktur jaringan fisik Anda. Misalnya, MetalLB bergantung pada switch yang mematuhi ARP gratis, load balancing yang dipaketkan dengan Border Gateway Protocol (BGP) bergantung pada router Anda, dan semua node harus dapat berkomunikasi satu sama lain. Jika mengalami masalah jaringan di cluster GKE, Anda harus mengidentifikasi apakah masalahnya ada di komponen GKE Enterprise atau di infrastruktur Anda sendiri.
Pertama, tentukan cakupan masalah, lalu coba identifikasi komponen yang terpengaruh. Cakupan masalah dapat berupa salah satu dari tiga kategori: subjek (dari mana), target (ke mana), dan lapisan jaringan.
Cakupan subjek dapat berupa salah satu dari berikut:
- Semua node (atau Pod hostNetwork) di seluruh cluster.
- Semua Pod di seluruh cluster.
- Semua Pod di satu node atau sekumpulan node.
- Semua Pod dari Deployment atau DaemonSet yang sama.
- Klien dari luar cluster.
Cakupan target dapat berupa satu atau beberapa hal berikut:
- Semua alamat IP Pod lainnya dari cluster yang sama.
- Semua alamat IP Pod lainnya dari node yang sama.
- VIP Layanan ClusterIP dari cluster yang sama.
- VIP Layanan LoadBalancer dari cluster yang sama.
- LoadBalancer Lapisan 7 Ingress (Istio).
- Node lain dari cluster yang sama.
- Nama DNS internal (seperti
*.svc.cluster.local
). - Nama DNS eksternal (seperti
google.com
). - Entitas dari luar cluster.
- Entitas di internet.
Lapisan jaringan dapat berupa satu atau beberapa hal berikut:
- Masalah lapisan link Lapisan 2 seperti sistem tetangga, ARP, atau NDP.
- Masalah pemilihan rute alamat IP Lapisan 3.
- Masalah endpoint TCP atau UDP Lapisan 4.
- Masalah HTTP atau HTTPS Lapisan 7.
- Masalah resolusi DNS.
Memahami cakupan masalah akan membantu mengidentifikasi komponen yang terlibat dalam masalah, dan di lapisan mana masalah tersebut terjadi. Mengumpulkan informasi saat masalah terjadi sangatlah penting karena beberapa masalah bersifat sementara, sehingga snapshot setelah sistem pulih tidak akan menyertakan informasi yang cukup untuk analisis akar masalah.
Masalah ingress
Jika subjek adalah klien dari luar cluster dan gagal terhubung ke Layanan LoadBalancer, ini adalah masalah konektivitas Utara-Selatan. Diagram berikut menunjukkan bahwa dalam contoh yang berfungsi, traffic masuk akan melalui stack dari kiri ke kanan, dan traffic yang ditampilkan akan kembali melalui stack dari kanan ke kiri.
Jika ada masalah dengan alur traffic ini, gunakan diagram alir pemecahan masalah berikut untuk membantu mengidentifikasi letak masalahnya:
Dalam diagram alir ini, panduan pemecahan masalah berikut membantu menentukan lokasi masalah:
- Apakah paket meninggalkan klien? Jika tidak, Anda mungkin mengalami masalah infrastruktur jaringan.
- Apakah Anda menggunakan MetalLB? Jika ya, apakah paket tiba di node LB, dan apakah ARP kemudian dikirim dengan benar? Jika tidak, Anda mungkin memiliki masalah infrastruktur jaringan.
- Apakah Anda menggunakan F5 BIG-IP, dan jika ya, apakah Anda telah memeriksa masalah F5?
- Apakah penafsiran alamat jaringan (NAT) dilakukan dengan benar? Jika tidak, Anda mungkin memiliki masalah kube-proxy / Dataplane V2.
- Apakah paket tiba di node pekerja? Jika tidak, Anda mungkin memiliki masalah Pod-to-Pod Dataplane v2.
- Apakah paket tiba di Pod? Jika tidak, Anda mungkin memiliki masalah penerusan lokal Dataplane v2.
Bagian berikut memberikan langkah-langkah untuk memecahkan masalah setiap tahap guna menentukan apakah traffic mengalir dengan benar atau tidak.
Apakah paket meninggalkan klien?
Periksa apakah paket keluar dari klien dengan benar dan melewati router yang dikonfigurasi di infrastruktur jaringan fisik Anda.
Gunakan
tcpdump
untuk memeriksa paket saat keluar dari klien untuk layanan tujuan:tcpdump -ni any host SERVICE_VIP and port SERVICE_PORT
Jika Anda tidak melihat traffic keluar, ini adalah sumber masalahnya.
Apakah paket tiba di node LoadBalancer?
Jika Anda menggunakan MetalLB sebagai load balancer:
Lihat log
metallb-controller
untuk menentukan node load balancer mana yang menayangkan VIP layanan:kubectl -n kube-system logs -l app=metallb --all-containers=true | grep SERVICE_VIP
Hubungkan ke node menggunakan SSH.
Untuk node MetalLB, gunakan
tcpdump
untuk meninjau traffic:tcpdump -ni any host SERVICE_VIP and port SERVICE_PORT
Untuk ManualLB, traffic dapat diarahkan ke node mana pun. Bergantung pada konfigurasi load balancer, Anda dapat memilih satu atau beberapa node. Gunakan
tcpdump
untuk meninjau traffic:tcpdump -ni any host NODE_IP and port NODE_PORT
Perintah ini berbeda antara jenis load balancer karena MetalLB tidak melakukan NAT sebelum meneruskan paket ke node.
Jika Anda tidak melihat traffic yang masuk ke node mana pun, ini adalah sumber masalah.
Apakah ada masalah F5 BIG-IP?
Untuk memecahkan masalah F5 BIG-IP, lihat salah satu bagian berikut di Layanan F5 tidak menerima traffic.
Apakah ARP dikirim dengan benar?
Node load balancer untuk MetalLB mengandalkan ARP untuk mengiklankan VIP layanan. Jika respons ARP dikirim dengan benar, tetapi traffic tidak masuk, hal ini merupakan sinyal adanya masalah pada infrastruktur jaringan fisik Anda. Penyebab umum masalah ini adalah beberapa fitur pembelajaran dataplane lanjutan mengabaikan respons ARP dalam solusi jaringan yang ditentukan oleh software (SDN).
Gunakan
tcpdump
untuk mendeteksi respons ARP:tcpdump -ni any arp
Coba temukan pesan yang mengiklankan VIP yang bermasalah.
Untuk MetalLB, MetalLB tidak mengirim ARP yang tidak perlu. Frekuensi Anda melihat respons bergantung pada waktu perangkat lain seperti tombol top of rack (ToR) mengirim permintaan ARP.
Apakah NAT dilakukan?
Dataplane v2 / kube-proxy melakukan penafsiran alamat jaringan tujuan (NAT atau DNAT tujuan) untuk menerjemahkan VIP tujuan ke alamat IP Pod backend. Jika Anda mengetahui node mana yang merupakan backend untuk load balancer, hubungkan ke node tersebut menggunakan SSH.
Gunakan
tcpdump
untuk memeriksa apakah VIP Layanan diterjemahkan dengan benar:tcpdump -ni any host BACKEND_POD_IP and port CONTAINER_PORT
Untuk Dataplane v2, Anda juga dapat terhubung ke pod
anetd
dan menggunakan alat debug Cilium tersemat:cilium monitor --type=drop
Untuk informasi selengkapnya, lihat salah satu bagian berikut tentang Masalah Dataplane v2 / Cilium.
Apakah paket tiba di node pekerja?
Di node pekerja, paket tiba di antarmuka eksternal, lalu dikirim ke Pod.
Periksa apakah paket tiba di antarmuka eksternal, biasanya bernama
eth0
atauens192
, menggunakantcpdump
:tcpdump -ni any host BACKEND_POD_IP and port CONTAINER_PORT
cilium_geneve
.
Karena backend Layanan normal berisi beberapa Pod di berbagai node, mungkin sulit memecahkan masalah node mana yang salah. Solusi umum adalah dengan menangkap masalah cukup lama sehingga beberapa paket akhirnya tiba, atau membatasi jumlah backend menjadi satu.
Jika paket tidak pernah sampai di node kerja, hal ini merupakan indikasi masalah infrastruktur jaringan. Hubungi tim infrastruktur jaringan untuk mengetahui alasan paket dihapus di antara node LoadBalancer dan node pekerja. Beberapa masalah umum mencakup hal berikut:
- Periksa log jaringan yang ditentukan software (SDN). Terkadang, SDN dapat menurunkan paket karena berbagai alasan, seperti segmentasi, checksum salah, atau anti-spoofing.
- Aturan firewall yang memfilter paket geneve port UDP 6081.
Jika paket tiba di antarmuka eksternal atau antarmuka tunnel node, paket tersebut harus diteruskan ke Pod tujuan. Jika Pod adalah Pod jaringan host, langkah ini tidak diperlukan karena Pod berbagi namespace jaringan dengan node. Jika tidak, penerusan paket tambahan diperlukan.
Setiap Pod memiliki pasangan antarmuka ethernet virtual, yang berfungsi seperti pipa. Paket
yang dikirim ke salah satu ujung antarmuka diterima dari ujung antarmuka
yang lain. Salah satu antarmuka dipindahkan ke namespace jaringan Pod, dan
diganti namanya menjadi eth0
. Antarmuka lainnya disimpan di namespace host. CNI
yang berbeda memiliki skema yang berbeda. Untuk Dataplane v2, antarmuka biasanya diberi nama
lxcxxxx
. Nama tersebut memiliki nomor antarmuka berturut-turut, seperti lxc17
dan
lxc18
. Anda dapat memeriksa apakah paket tiba di Pod menggunakan tcpdump
, atau Anda juga dapat menentukan antarmuka:
tcpdump -ni lcxxxx host BACKEND_POD_IP and port CONTAINER_PORT
Jika paket tiba di node tetapi gagal tiba di Pod, periksa tabel perutean sebagai berikut:
ip route
Biasanya, setiap Pod harus memiliki entri pemilihan rute yang merutekan alamat IP Pod ke
antarmuka lxc
. Jika entri tidak ada, biasanya berarti datapath CNI memiliki
error. Untuk menentukan akar masalahnya, periksa log DaemonSet CNI.
Masalah egress
Jika traffic dapat masuk ke Pod, Anda mungkin mengalami masalah dengan traffic saat keluar dari Pod. Diagram berikut menunjukkan bahwa dalam contoh yang berfungsi, traffic masuk akan melewati stack dari kiri ke kanan:
Untuk memverifikasi bahwa paket keluar menyamar dengan benar sebagai alamat IP node, periksa layanan eksternal (Lapisan 4).
Alamat IP sumber paket harus dipetakan dari alamat IP Pod ke alamat IP node dengan penafsiran alamat jaringan sumber (NAT sumber atau SNAT). Di Dataplane v2, proses ini dicapai dengan ebpf yang dimuat di antarmuka eksternal.
Gunakan
tcpdump
untuk memeriksa apakah alamat IP sumber diterjemahkan dengan benar dari alamat IP Pod ke alamat IP node:tcpdump -ni EXTERNAL_INTERFACE host EXTERNAL_IP and port EXTERNAL_PORT
Jika
tcpdump
menunjukkan bahwa paket disamarkan dengan benar, tetapi layanan jarak jauh tidak merespons, periksa koneksi ke layanan eksternal di infrastruktur Anda.Jika paket keluar disamarkan dengan benar sebagai alamat IP node, periksa konektivitas host eksternal (Lapisan 3) menggunakan
tcpdump
:tcpdump -ni EXTERNAL_INTERFACE host EXTERNAL_IP and icmp
Pada saat yang sama dengan menjalankan
tcpdump
, lakukan ping dari salah satu Pod:kubectl exec POD_NAME ping EXTERNAL_IP
Jika Anda tidak melihat respons ping, periksa koneksi ke layanan eksternal di infrastruktur Anda.
Masalah dalam cluster
Untuk masalah konektivitas Pod-to-Pod, coba tentukan cakupan masalah ke node. Sering kali, grup node tidak dapat berkomunikasi dengan grup node lain.
Di Dataplane v2, periksa konektivitas node dari node saat ini ke semua node lainnya dalam cluster yang sama. Dari dalam Pod
anetd
, periksa status respons:cilium status --all-health
Masalah lapisan jaringan
Mengidentifikasi lapisan jaringan tempat masalah konektivitas terjadi adalah langkah penting. Pesan error seperti, "Masalah konektivitas dari sumber ke tujuan" tidak cukup informatif untuk membantu menyelesaikan masalah, yang dapat berupa error aplikasi, masalah pemilihan rute, atau masalah DNS. Memahami lapisan mana yang mengalami masalah akan membantu memperbaiki komponen yang tepat.
Sering kali, pesan error langsung menunjukkan lapisan mana yang mengalami masalah. Contoh berikut dapat membantu Anda memecahkan masalah pertanyaan lapisan jaringan:
- Error HTTP menunjukkan bahwa masalahnya berada di Lapisan 7.
- Kode HTTP
40x
,50x
, atau error handshake TLS berarti semuanya berfungsi secara normal di Lapisan 4.
- Kode HTTP
- Error "Connection reset by peer" menunjukkan bahwa ini adalah masalah Lapisan 4.
- Sering kali, soket jarak jauh tidak dapat menyetujui status koneksi
saat ini sehingga mengirim paket
RESET
. Perilaku ini mungkin merupakan kesalahan dalam pelacakan koneksi, atau NAT.
- Sering kali, soket jarak jauh tidak dapat menyetujui status koneksi
saat ini sehingga mengirim paket
- Error "Tidak ada rute ke host" dan "Waktu tunggu koneksi habis" biasanya merupakan masalah Lapisan 3 atau
Lapisan 2.
- Error ini menunjukkan bahwa paket tidak dapat dirutekan dengan benar ke tujuan.
Alat pemecahan masalah yang berguna
DaemonSet terkait jaringan berjalan di node Anda dan dapat menjadi penyebab masalah konektivitas. Namun, kesalahan konfigurasi node, tombol top of rack (ToR), router spine, atau firewall juga dapat menyebabkan masalah. Anda dapat menggunakan alat berikut untuk membantu menentukan cakupan atau lapisan masalah dan menentukan apakah masalahnya ada pada node GKE Enterprise atau infrastruktur fisik Anda.
Ping
Ping berfungsi di Lapisan 3 (lapisan IP) dan memeriksa rute antara sumber dan tujuan. Jika ping gagal menjangkau tujuan, biasanya masalahnya ada di lapisan 3.
Namun, tidak semua alamat IP dapat di-ping. Misalnya, beberapa VIP load balancer
tidak dapat di-ping jika merupakan load balancer Lapisan 4 murni. Layanan ClusterIP
adalah
contoh saat VIP mungkin tidak menampilkan respons ping. Di lapisan 4, Layanan ini
hanya menampilkan respons ping saat Anda menentukan nomor port, seperti
VIP:port
.
Load balancer BGPLB dan MetalLB di Google Distributed Cloud semuanya berfungsi di lapisan 3. Anda dapat menggunakan ping untuk memeriksa konektivitas. Meskipun berbeda, F5 juga mendukung ICMP. Anda dapat menggunakan ping untuk memeriksa konektivitas ke VIP F5.
Arping
Arping mirip dengan ping, tetapi berfungsi di lapisan 2. Masalah lapisan 2 dan lapisan 3 sering kali memiliki pesan error yang serupa dari aplikasi. Arping dan ping dapat membantu membedakan masalah. Misalnya, jika sumber dan tujuan berada di subnet yang sama, tetapi Anda tidak dapat melakukan arping pada tujuan, berarti ada masalah Lapisan 2.
arping <ip>
yang berhasil akan menampilkan alamat MAC tujuan. Di lapisan
2, alamat ini sering kali menunjukkan masalah infrastruktur fisik.
Masalah ini sering kali berupa tombol fisik di antara
node.
Arping juga dapat mendeteksi konflik alamat IP. Konflik alamat IP terjadi saat dua
komputer dikonfigurasi untuk menggunakan alamat IP yang sama di subnet yang sama, atau VIP
digunakan oleh komputer fisik lain. Konflik alamat IP dapat menyebabkan
masalah yang bersifat sementara dan sulit dipecahkan. Jika arping <ip>
menampilkan lebih
dari satu entri alamat MAC, ini merupakan indikasi bahwa ada konflik alamat IP.
Setelah mendapatkan alamat MAC dari arping, Anda dapat menggunakan
https://maclookup.app/
untuk mencari produsen alamat MAC. Setiap produsen memiliki awalan MAC, sehingga Anda dapat menggunakan informasi ini untuk membantu menentukan perangkat mana yang mencoba
menggunakan alamat IP yang sama. Misalnya, VMware memiliki blok 00:50:56
, sehingga alamat MAC 00:50:56:xx:yy:zz
adalah VM di lingkungan vSphere Anda.
iproute2
CLI ip
untuk iproute2
memiliki banyak subperintah yang berguna, seperti berikut:
ip r
: mencetak tabel ruteip n
: mencetak tabel tetangga untuk pemetaan alamat IP ke alamat MACip a
: mencetak semua antarmuka di komputer
Rute yang hilang atau entri yang hilang di tabel tetangga dapat menyebabkan masalah konektivitas dari node. Anetd mengelola tabel rute dan tabel tetangga. Kesalahan konfigurasi dalam tabel tersebut dapat menyebabkan masalah konektivitas.
Cilium / Hubble CLI untuk Dataplane v2
Setiap Pod anetd
memiliki beberapa alat proses debug yang berguna untuk masalah konektivitas:
cilium monitor --type=drop
- Mencetak log untuk setiap paket yang dihapus oleh anetd / Cilium.
hubble observe
- Cetak semua paket yang melewati stack ebpf anetd.
cilium status --all-health
- Cetak status Cilium, termasuk status konektivitas node ke node. Setiap Pod anetd memeriksa kondisi semua node lain dalam cluster dan dapat membantu menentukan masalah konektivitas node ke node.
Iptables
Iptables digunakan di banyak komponen dan subsistem Kubernetes. kube-proxy
menggunakan iptables untuk menerapkan resolusi layanan.
Untuk memecahkan masalah jaringan di tingkat iptables, gunakan perintah berikut:
iptables -L -v | grep DROP
Tinjau aturan penghapusan, dan periksa jumlah paket dan jumlah byte untuk melihat apakah jumlahnya meningkat dari waktu ke waktu.
Tcpdump
Tcpdump adalah alat pengambilan paket yang canggih yang menghasilkan banyak data traffic jaringan. Praktik yang umum adalah menjalankan tcpdump dari sumber dan tujuan. Jika paket diambil saat keluar dari node sumber, tetapi tidak pernah diambil di node tujuan, artinya ada sesuatu di antaranya yang menghapus paket. Perilaku ini biasanya menunjukkan bahwa ada sesuatu di infrastruktur fisik Anda yang keliru menghapus paket.
Pemecahan masalah DNS
Masalah resolusi DNS dibagi menjadi dua kategori utama:
- Pod Reguler, yang menggunakan server DNS dalam cluster.
- Pod atau node jaringan host, yang tidak menggunakan server DNS dalam cluster
Bagian berikut memberikan beberapa informasi tentang arsitektur DNS cluster dan tips bermanfaat sebelum Anda mulai memecahkan masalah salah satu kategori ini.
Arsitektur DNS cluster
Layanan DNS Cluster me-resolve permintaan DNS untuk Pod di cluster. CoreDNS menyediakan layanan ini untuk semua versi Google Distributed Cloud.
Setiap cluster memiliki dua Pod coredns
atau lebih, dan autoscaler yang
bertanggung jawab untuk menskalakan jumlah Pod DNS berdasarkan ukuran cluster.
Ada juga layanan bernama kube-dns
yang melakukan load balancing permintaan di antara semua
Pod coredns
backend.
Sebagian besar Pod memiliki DNS upstream yang dikonfigurasi ke alamat IP Service kube-dns
, dan Pod mengirim permintaan DNS ke salah satu Pod coredns
. Permintaan DNS
dapat dikelompokkan ke dalam salah satu tujuan berikut:
- Jika permintaan ditujukan untuk domain
cluster.local
, permintaan tersebut adalah nama DNS dalam cluster yang mereferensikan Layanan atau Pod dalam cluster.- CoreDNS memantau
api-server
untuk semua Layanan dan Pod di cluster, dan merespons permintaan untuk domaincluster.local
yang valid.
- CoreDNS memantau
- Jika permintaan bukan untuk domain
cluster.local
, permintaan tersebut ditujukan untuk domain eksternal.- CoreDNS meneruskan permintaan ke server nama upstream. Secara default, CoreDNS menggunakan server nama upstream yang dikonfigurasi di node tempat server tersebut berjalan.
Untuk mengetahui informasi selengkapnya, lihat ringkasan cara kerja dan konfigurasi DNS di Kubernetes.
Tips pemecahan masalah DNS
Untuk memecahkan masalah DNS, Anda dapat menggunakan alat dig
dan nslookup
. Alat ini memungkinkan Anda mengirim permintaan DNS untuk menguji apakah resolusi DNS berfungsi dengan benar. Contoh
berikut menunjukkan cara menggunakan dig
dan nslookup
untuk memeriksa masalah
resolusi DNS.
Gunakan
dig
ataunslookup
untuk mengirim permintaangoogle.com
:dig google.com nslookup google.com
Gunakan
dig
untuk mengirim permintaankubernetes.default.svc.cluster.local
ke server192.168.0.10
:dig @192.168.0.10 kubernetes.default.svc.cluster.local
Anda juga dapat menggunakan
nslookup
untuk melakukan pencarian DNS yang sama seperti perintahdig
sebelumnya:nslookup kubernetes.default.svc.cluster.local 192.168.0.10
Tinjau output perintah dig atau nslookup. Jika Anda menerima respons yang salah, atau tidak ada respons, hal ini menunjukkan masalah resolusi DNS.
Pod Reguler
Langkah pertama untuk men-debug masalah DNS adalah menentukan apakah permintaan berhasil masuk ke Pod coredns
atau tidak. Sering kali masalah konektivitas cluster umum muncul sebagai masalah DNS karena permintaan DNS adalah jenis traffic pertama yang dikirim beban kerja.
Tinjau pesan error dari aplikasi Anda. Error seperti io timeout
atau
yang serupa menunjukkan tidak ada respons dan masalah konektivitas jaringan umum.
Pesan error yang menyertakan kode error DNS seperti NXDOMAIN
atau SERVFAIL
menunjukkan bahwa ada konektivitas ke server DNS dalam cluster, tetapi server tersebut gagal menyelesaikan nama domain:
- Error
NXDOMAIN
menunjukkan bahwa server DNS melaporkan bahwa domain tidak ada. Pastikan nama domain yang diminta aplikasi Anda valid. - Error
SERVFAIL
atauREFUSED
menunjukkan bahwa server DNS mengirim kembali respons, tetapi tidak dapat me-resolve domain atau memvalidasi bahwa domain tersebut tidak ada. Untuk informasi selengkapnya, periksa log Podcoredns
.
Anda dapat menemukan alamat IP layanan kube-dns
menggunakan perintah
berikut:
kubectl -n kube-system get svc kube-dns
Dari Pod tempat DNS tidak berfungsi, coba kirim permintaan DNS ke alamat IP ini menggunakan dig
atau nslookup
seperti yang dijelaskan di bagian sebelumnya:
- Jika permintaan ini tidak berhasil, coba kirim permintaan ke alamat IP setiap
Pod
coredns
. - Jika beberapa Pod berfungsi, tetapi yang lainnya tidak, periksa apakah ada pola yang dapat dikenali,
seperti resolusi DNS berfungsi untuk Pod di node yang sama dengan Pod
coredns
, tetapi tidak di seluruh node. Perilaku ini dapat menunjukkan beberapa masalah konektivitas dalam cluster.
Jika CoreDNS tidak dapat me-resolve nama domain eksternal, lihat bagian berikut untuk memecahkan masalah Pod jaringan host. CoreDNS berperilaku seperti Pod jaringan host dan menggunakan server DNS upstream node untuk resolusi nama.
Pod atau node jaringan host
Pod jaringan host dan node menggunakan server nama yang dikonfigurasi di node untuk
resolusi DNS, bukan layanan DNS dalam cluster. Bergantung pada OS, server nama ini
dikonfigurasi di /etc/resolv.conf
atau
/run/systemd/resolve/resolv.conf
. Konfigurasi ini berarti mereka tidak dapat me-resolve nama domain cluster.local
.
Jika Anda mengalami masalah dengan resolusi nama jaringan host, gunakan langkah-langkah pemecahan masalah di bagian sebelumnya untuk menguji apakah DNS berfungsi dengan benar untuk server nama upstream Anda.
Pastikan semua node memiliki kumpulan server yang sama yang dikonfigurasi. Jika telah mengonfigurasi server nama yang berbeda, Anda mungkin melihat inkonsistensi dalam resolusi DNS di node yang berbeda. Pastikan setiap server nama berfungsi satu per satu dengan mengirim permintaan ke setiap server menggunakandig
atau nslookup
. Jika beberapa server nama berfungsi, tetapi yang lainnya tidak, Anda akan melihat jenis kegagalan resolusi DNS yang tidak konsisten ini.
Masalah jaringan umum
Bagian berikut menjelaskan beberapa masalah jaringan umum yang mungkin Anda temui. Untuk membantu menyelesaikan masalah Anda, ikuti panduan pemecahan masalah yang sesuai. Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.
Dataplane v2 / Cilium
Error umum: [PUT /endpoint/{id}][429] putEndpointIdTooManyRequests
Error ini berarti peristiwa pembuatan Pod telah ditolak oleh agen Cilium karena batas kapasitas. Untuk setiap node, Cilium memiliki batas empat permintaan serentak ke endpoint PUT. Jika ada lonjakan permintaan ke satu node, perilaku ini normal. Agen Cilium harus mengejar permintaan yang tertunda.
Di GKE Enterprise 1.14 dan yang lebih baru, batas kapasitas otomatis disesuaikan dengan kapasitas node. Pembatas kapasitas dapat berkonvergensi ke jumlah yang lebih wajar, dengan batas kapasitas yang lebih tinggi untuk node yang lebih canggih.
Error umum: Ebpf map size is full
Dataplane v2 menyimpan status dalam peta eBFP. Status mencakup aturan Layanan, pelacakan koneksi, identitas Pod, dan Kebijakan Jaringan. Jika peta penuh, agen tidak dapat menyisipkan entri, yang menyebabkan perbedaan antara bidang kontrol dan bidang data. Misalnya, peta Layanan memiliki batas entri 64k.
Untuk memeriksa entri peta eBFP dan ukurannya saat ini, gunakan
bpftool
. Contoh berikut memeriksa peta load balancer:bpftool map dump pinned \ /sys/fs/bpf/tc/globals/cilium_lb4_services_v2 | tail -n -1 bpftool map dump pinned \ /sys/fs/bpf/tc/globals/cilium_lb4_backends_v2 | tail -n -1
Jika peta mendekati batas 64 ribu, hapus peta. Contoh berikut akan membersihkan peta load balancer:
bpftool map dump pinned /sys/fs/bpf/tc/globals/cilium_lb4_services_v2 | \ awk '{ print "0x"$2, "0x"$3, "0x"$4, "0x"$5, "0x"$6, "0x"$7, "0x"$8, "0x"$9, "0x"$10, "0x"$11, "0x"$12, "0x"$13}' | \ head -n -1 | \ xargs -L 1 bpftool map delete pinned /sys/fs/bpf/tc/globals/cilium_lb4_services_v2 key bpftool map dump pinned /sys/fs/bpf/tc/globals/cilium_lb4_backends_v2 | \ awk '{ print "0x"$2, "0x"$3, "0x"$4, "0x"$5 }' | \ head -n -1 | \ xargs -L 1 bpftool map delete pinned /sys/fs/bpf/tc/globals/cilium_lb4_backends_v2 key
Untuk mengisi ulang status ke peta eBFP, mulai ulang
anetd
.
Node tidak siap karena error NetworkPluginNotReady
Jika Pod CNI tidak berjalan di node, Anda mungkin melihat error yang mirip dengan berikut:
"Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized
Node mungkin juga dalam status belum siap, dengan error yang mirip dengan contoh berikut:
"Network plugin not installed"
Saat node diinisialisasi, kubelet
menunggu beberapa peristiwa terjadi sebelum
menandai node sebagai Ready
. Salah satu peristiwa yang diperiksa kubelet
adalah
plugin Container Network Interface (CNI) diinstal. Plugin CNI harus
diinstal oleh anetd menggunakan
penampung init untuk menginstal biner CNI dan konfigurasi CNI ke dalam
direktori host yang diperlukan.
Untuk memecahkan masalah ini, periksa alasan Pod tersebut tidak berjalan di node. Biasanya, error ini bukan karena masalah jaringan. Pod tersebut berjalan di jaringan host, sehingga tidak ada dependensi jaringan.
Periksa status Pod
anetd
. Tinjau langkah-langkah pemecahan masalah berikut untuk membantu menentukan penyebab masalah:- Jika Pod berada dalam status
Crashlooping
, periksa log untuk mengetahui alasan Pod tidak dapat berjalan dengan benar. - Jika Pod berada dalam status
Pending
, gunakankubectl describe
dan tinjau peristiwa Pod. Misalnya, Pod mungkin tidak memiliki resource seperti Volume. - Jika Pod dalam status
Running
, periksa log dan konfigurasi. Beberapa implementasi CNI menyediakan opsi untuk menonaktifkan penginstalan CNI, seperti di Cilium. - Ada opsi konfigurasi di anetd yang disebut
custom-cni-conf
. Jika setelan ini dikonfigurasi sebagaitrue
, anetd tidak akan menginstal biner CNI-nya.
- Jika Pod berada dalam status
Node TIDAK SIAP karena entri ARP yang sudah tidak berlaku
Terkadang, entri ARP yang sudah tidak berlaku di node panel kontrol cluster admin dapat menyebabkan
ketidakcocokan pada alamat MAC. Ketidakcocokan alamat ini pada akhirnya dapat menyebabkan waktu tunggu koneksi ke VIP bidang kontrol cluster pengguna terkelola habis. Waktu tunggu koneksi
dapat menyebabkan node dengan entri ARP yang sudah tidak berlaku ditandai sebagai NOT
READY
. Node yang ditandai sebagai NOT READY
dapat menunda penginstalan dan upgrade cluster.
Dalam situasi ini, log kubelet di node dengan entri ARP yang sudah tidak berlaku berisi error waktu tunggu TLS handshake seperti berikut:
failed to get API group resources: unable to retrieve the complete list of server APIs: v1: Get "https://128.160.252.101:443/api/v1": net/http: TLS handshake timeout
Gunakan langkah-langkah berikut untuk memverifikasi dan menyelesaikan masalah:
Gunakan SSH untuk terhubung ke node bidang kontrol cluster pengguna.
Verifikasi alamat MAC antarmuka tempat alamat VIP terikat:
ip a | grep DEVICE_NAME: -A 6
Ganti
DEVICE_NAME
dengan nama perangkat jaringan untuk node platform kontrol.Gunakan SSH untuk terhubung ke node bidang kontrol cluster admin.
Periksa cache ARP di bidang kontrol cluster admin untuk alamat VIP bidang kontrol cluster pengguna:
ip n | grep VIP_ADDRESS
Ganti
VIP_ADDRESS
dengan alamat IP VIP bidang kontrol cluster pengguna (controlPlaneVIP
).Jika dua perintah
ip
menampilkan alamat MAC yang berbeda, Anda terpengaruh oleh masalah ini.Untuk mengatasi masalah ini, hapus cache ARP di node control plane cluster admin:
ip n flush all
Layanan F5 tidak menerima traffic
Jika tidak ada traffic yang diteruskan ke Layanan F5, tinjau langkah-langkah pemecahan masalah berikut:
Pastikan setiap partisi di F5 BIG-IP dikonfigurasi dalam satu cluster, baik cluster admin maupun pengguna. Jika satu partisi digunakan bersama oleh beberapa cluster yang berbeda, Anda akan mengalami gangguan koneksi yang terputus-putus. Perilaku ini terjadi karena dua cluster mencoba mengambil alih kontrol atas partisi yang sama, dan menghapus Layanan dari cluster lain.
Pastikan bahwa dua Pod berikut sedang berjalan. Setiap Pod yang tidak berjalan menunjukkan error:
Load-balancer-f5 K8s-bigip-ctlr-deployment-577d57985d-vk9wj
Load-balancer-f5
dimiliki oleh GKE Enterprise, dan membuat ConfigMap untuk setiap Service jenis LoadBalancer. ConfigMap pada akhirnya akan digunakan oleh pengontrolbigip
.Pastikan ConfigMap ada untuk setiap port dari setiap Layanan. Misalnya, dengan port berikut:
Kube-server-443-tcp 2 31h Kube-server-8132-tcp 2 31h
Layanan
kube-server
akan terlihat seperti contoh berikut:Kube-server LoadBalancer 10.96.232.96 21.1.7.16 443:30095/TCP,8132:32424/TCP 31h
Bagian data di ConfigMap harus memiliki VIP dan port frontend, seperti yang ditunjukkan dalam contoh berikut:
data: '{"virtualServer":{"backend":{"serviceName":"kube-apiserver","servicePort":443,"healthMonitors":[{"protocol":"tcp","interval":5,"timeout":16}]},"frontend":{"virtualAddress":{"bindAddr":"21.1.7.16","port":443},"partition":"herc-b5bead08c95b-admin","balance":"ratio-member","mode":"tcp"}}}' schema: f5schemadb://bigip-virtual-server_v0.1.7.json
Periksa log dan metrik instance BIG-IP Anda. Jika ConfigMap dikonfigurasi dengan benar, tetapi instance BIG-IP gagal mematuhi konfigurasi, hal ini mungkin merupakan masalah F5. Untuk masalah yang terjadi di dalam instance BIG-IP, hubungi dukungan F5 untuk mendiagnosis dan memecahkan masalah.
Kegagalan NAT dengan terlalu banyak koneksi paralel
Untuk node tertentu dalam cluster Anda, alamat IP node menyediakan terjemahan alamat jaringan (NAT) untuk paket yang dirutekan ke alamat di luar cluster.
Demikian pula, saat paket masuk memasuki node load balancing yang dikonfigurasi untuk menggunakan load balancing paket (spec.loadBalancer.mode: bundled
), penafsiran alamat jaringan sumber (SNAT) merutekan paket ke alamat IP node sebelum diteruskan ke Pod backend.
Rentang port untuk NAT yang digunakan oleh Google Distributed Cloud adalah 32768-65535
. Rentang
ini membatasi jumlah koneksi paralel menjadi 32.767 per protokol di node
tersebut. Setiap koneksi memerlukan entri dalam tabel conntrack. Jika Anda memiliki terlalu banyak koneksi berumur pendek, tabel conntrack akan kehabisan port untuk NAT. Pengumpul sampah akan membersihkan entri yang sudah tidak berlaku, tetapi pembersihan tidak dilakukan secara langsung.
Saat jumlah koneksi di node mendekati 32.767, Anda akan mulai melihat paket yang hilang untuk koneksi yang memerlukan NAT.
Untuk menentukan apakah Anda terpengaruh oleh masalah ini:
Jalankan perintah berikut di Pod
anetd
pada node yang bermasalah:kubectl -n kube-system anetd-XXX -- hubble observe \ --from-ip $IP --to-ip $IP -f
Anda akan melihat error dalam bentuk berikut:
No mapping for NAT masquerade DROPPED
Sebagai solusi untuk masalah ini, distribusikan ulang traffic Anda ke node lain.