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 Calico, Seesaw, dan MetalLB juga disertakan.
Pemecahan masalah konektivitas jaringan
Jaringan GKE Enterprise mengandalkan infrastruktur jaringan fisik Anda. Misalnya, Seesaw atau MetalLB mengandalkan switch Anda yang mendukung ARP gratis, load balancing yang dipaketkan dengan Border Gateway Protocol (BGP) mengandalkan 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 pada 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.
Network layer dapat berupa salah satu atau beberapa hal berikut:
- Masalah lapisan link Layer 2 seperti sistem tetangga, ARP, atau NDP.
- Masalah perutean alamat IP Layer 3.
- Masalah endpoint TCP atau UDP Lapisan 4.
- Masalah HTTP atau HTTPS Lapisan 7.
- Masalah resolusi DNS.
Memahami cakupan masalah membantu mengidentifikasi komponen yang terlibat dalam masalah, dan di lapisan mana masalah terjadi. Mengumpulkan informasi saat masalah terjadi penting karena beberapa masalah bersifat sementara, sehingga snapshot setelah sistem pulih tidak akan menyertakan informasi yang cukup untuk analisis penyebab utama.
Masalah ingress
Jika subjek adalah klien dari luar cluster dan gagal terhubung ke Layanan LoadBalancer, berarti ada masalah konektivitas Utara-Selatan. Diagram berikut menunjukkan bahwa dalam contoh yang berfungsi, traffic masuk melewati stack dari kiri ke kanan, dan traffic kembali melewati stack dari kanan ke kiri. Seesaw berbeda karena traffic kembali melewati load balancer dan langsung kembali ke klien:
Jika ada masalah dengan alur traffic ini, gunakan diagram alur pemecahan masalah berikut untuk membantu mengidentifikasi letak masalahnya:
Dalam diagram alur ini, panduan pemecahan masalah berikut membantu menentukan penyebab masalah:
- Apakah paket keluar dari klien? Jika tidak, kemungkinan Anda mengalami masalah infrastruktur jaringan.
- Apakah Anda menggunakan load balancer Seesaw? Jika ya, apakah paket tiba di node Seesaw, dan apakah ARP kemudian dikirim dengan benar? Jika tidak, kemungkinan Anda 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 mengalami masalah infrastruktur jaringan.
- Apakah Anda menggunakan F5 BIG-IP, dan jika ya, apakah Anda telah memeriksa masalah F5?
- Apakah terjemahan alamat jaringan (NAT) dilakukan dengan benar? Jika tidak, Anda mungkin mengalami masalah kube-proxy / Dataplane V2.
- Apakah paket tiba di node pekerja? Jika tidak, kemungkinan Anda mengalami masalah Pod-ke-Pod Calico / Dataplane v2.
- Apakah paket tiba di Pod? Jika tidak, Anda mungkin mengalami masalah penerusan lokal Calico / Dataplane v2.
Bagian berikut memberikan langkah-langkah untuk memecahkan masalah setiap tahap guna menentukan apakah traffic mengalir dengan benar atau tidak.
Apakah paket keluar dari 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 meninggalkan klien menuju layanan tujuan:tcpdump -ni any host SERVICE_VIP and port SERVICE_PORT
Jika Anda tidak melihat traffic keluar, inilah sumber masalahnya.
Apakah paket tiba di node Seesaw?
Jika Anda menggunakan Seesaw, lihat dokumentasi versi 1.16, temukan node master, lalu hubungkan ke node menggunakan SSH.
Gunakan
tcpdump
untuk memeriksa apakah paket yang diharapkan tiba di node Seesaw:tcpdump -ni any host SERVICE_VIP and port SERVICE_PORT
Jika Anda tidak melihat traffic masuk, inilah 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 melayani 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 mendarat di 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
Perintahnya berbeda di antara jenis load balancer karena MetalLB dan Seesaw tidak melakukan NAT sebelum meneruskan paket ke node.
Jika Anda tidak melihat traffic masuk ke node mana pun, berarti inilah sumber masalahnya.
Apakah ada masalah F5 BIG-IP?
Untuk memecahkan masalah F5 BIG-IP, lihat salah satu bagian berikut di F5 Service doesn't receive traffic.
Apakah ARP dikirim dengan benar?
Node load balancer untuk MetalLB atau Seesaw mengandalkan ARP untuk mengiklankan VIP layanan. Jika respons ARP dikirim dengan benar, tetapi traffic tidak masuk, hal ini menandakan 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 Anda alami masalahnya.
Untuk Seesaw, ARP yang serampangan dikirim untuk semua VIP. Anda akan melihat pesan ARP untuk setiap VIP setiap 10 detik.
Untuk MetalLB, ARP serampangan tidak dikirim. Frekuensi Anda melihat respons bergantung pada waktu perangkat lain seperti switch top of rack (ToR) atau switch virtual mengirim permintaan ARP.
Apakah NAT dilakukan?
Dataplane v2 / kube-proxy melakukan penafsiran alamat jaringan tujuan (NAT tujuan atau DNAT) untuk menerjemahkan VIP tujuan ke alamat IP Pod backend. Jika Anda mengetahui node mana yang menjadi backend untuk load balancer, hubungkan ke node 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 yang disematkan:cilium monitor --type=drop
Untuk mengetahui informasi selengkapnya, lihat salah satu bagian berikut di halaman Masalah Dataplane v2 / Cilium.
Apakah paket tiba di node pekerja?
Di node pekerja, paket tiba di antarmuka eksternal, lalu dikirimkan 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
Karena backend Service normal berisi beberapa Pod di berbagai node, mungkin sulit untuk memecahkan masalah node mana yang bermasalah. Solusi umum adalah mengambil masalah cukup lama sehingga beberapa paket akhirnya tiba, atau membatasi jumlah backend menjadi satu.
Jika paket tidak pernah tiba di node pekerja, hal ini menunjukkan adanya masalah infrastruktur jaringan. Tanyakan kepada tim infrastruktur jaringan untuk mengetahui alasan paket dihapus di antara node LoadBalancer dan node pekerja. Beberapa masalah umum meliputi:
- Periksa log software-defined network (SDN) Anda. Terkadang, SDN dapat menjatuhkan paket karena berbagai alasan, seperti segmentasi, checksum yang salah, atau anti-spoofing.
- Aturan firewall yang memfilter paket yang tujuannya adalah alamat IP dan port Pod backend.
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
lainnya. 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, antarmukanya biasanya diberi nama
lxcxxxx
. Nama memiliki nomor antarmuka berurutan, 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 perutean yang merutekan alamat IP Pod ke antarmuka
lxc
. Jika entri tidak ada, biasanya berarti jalur data CNI mengalami error. Untuk menentukan penyebab utama, periksa log CNI DaemonSet.
Masalah keluar
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 melewati stack dari kiri ke kanan:
Untuk memverifikasi bahwa paket keluar dengan benar menyamar 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. Calico menggunakan aturan iptables.
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 di-masquerade dengan benar, tetapi layanan jarak jauh tidak merespons, periksa koneksi ke layanan eksternal di infrastruktur Anda.Jika paket keluar dengan benar di-masquerade sebagai alamat IP node, periksa konektivitas host eksternal (Layer 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 batasi cakupan masalah ke node. Sering kali, sekelompok node tidak dapat berkomunikasi dengan sekelompok node lainnya.
Di Dataplane v2, periksa konektivitas node dari node saat ini ke semua node lain dalam cluster yang sama. Dari dalam Pod
anetd
, periksa status kesehatan:cilium status --all-health
Google Distributed Cloud menggunakan mode perutean langsung. Anda akan melihat satu entri rute per node dalam cluster, seperti yang ditunjukkan dalam contoh berikut:
# <pod-cidr> via <node-ip> dev <external-interface> 192.168.1.0/24 via 21.0.208.188 dev ens192 192.168.2.0/24 via 21.0.208.133 dev ens192
Jika rute yang diharapkan tidak ada untuk suatu node, koneksi ke node tersebut akan terputus.
Masalah lapisan jaringan
Mengidentifikasi lapisan jaringan tempat terjadinya masalah konektivitas adalah langkah penting. Pesan error seperti, "Masalah konektivitas dari sumber ke tujuan" tidak cukup informatif untuk membantu menyelesaikan masalah, yang bisa berupa error aplikasi, masalah perutean, atau masalah DNS. Memahami di lapisan mana masalah terjadi akan membantu memperbaiki komponen yang tepat.
Sering kali, pesan error secara langsung menunjukkan di lapisan mana masalah terjadi. Contoh berikut dapat membantu Anda memecahkan masalah pertanyaan lapisan jaringan:
- Error HTTP menunjukkan bahwa ini adalah masalah Layer 7.
- Kode HTTP
40x
,50x
, atau error handshake TLS berarti semuanya berfungsi normal di Layer 4.
- Kode HTTP
- Error "Connection reset by peer" menunjukkan bahwa ini adalah masalah Layer 4.
- Sering kali, soket jarak jauh tidak dapat menyetujui status koneksi saat ini dan mengirim paket
RESET
. Perilaku ini bisa menjadi kesalahan dalam pelacakan koneksi, atau NAT.
- Sering kali, soket jarak jauh tidak dapat menyetujui status koneksi saat ini dan mengirim paket
- Error "No route to host" dan "Connection timeout" biasanya merupakan masalah Layer 3 atau Layer 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, switch top of rack (ToR), router tulang belakang, atau firewall juga dapat menyebabkan masalah. Anda dapat menggunakan alat berikut untuk membantu menentukan cakupan atau lapisan masalah dan menentukan apakah masalah tersebut terkait dengan 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 Layer 4 murni. ClusterIP
Service adalah contoh ketika VIP mungkin tidak menampilkan respons ping. Di lapisan 4, Service ini hanya menampilkan respons ping saat Anda menentukan nomor port, seperti VIP:port
.
Load balancer BGPLB , MetalLB, dan Seesaw 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, kecuali karena berfungsi di layer 2. Masalah layer 2 dan layer 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 ke tujuan, berarti ada masalah Layer 2.
arping <ip>
yang berhasil akan menampilkan alamat MAC tujuan. Di layer
2, alamat ini sering kali menunjukkan masalah infrastruktur fisik.
Masalah ini adalah kesalahan konfigurasi switch virtual.
Arping juga dapat mendeteksi konflik alamat IP. Konflik alamat IP terjadi saat dua
mesin dikonfigurasi untuk menggunakan alamat IP yang sama pada subnet yang sama, atau VIP
digunakan oleh mesin fisik lain. Konflik alamat IP dapat menyebabkan masalah sesekali yang sulit dipecahkan. Jika arping <ip>
menampilkan lebih dari satu entri alamat MAC, hal ini menunjukkan 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 tidak ada atau entri yang tidak ada dalam tabel tetangga dapat menyebabkan masalah konektivitas dari node. Anetd dan Calico 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 dihentikan oleh anetd / Cilium.
hubble observe
- Mencetak semua paket yang melewati stack ebpf anetd.
cilium status --all-health
- Mencetak status Cilium, termasuk status konektivitas antar-node. Setiap Pod anetd memeriksa kondisi semua node lain dalam cluster dan dapat membantu menentukan masalah konektivitas antar-node.
Iptables
Iptables digunakan di banyak komponen dan subsistem Kubernetes. kube-proxy
menggunakan iptables untuk menerapkan penyelesaian layanan.
Calico menggunakan iptables untuk menerapkan kebijakan jaringan
Untuk memecahkan masalah jaringan di tingkat iptables, gunakan perintah berikut:
iptables -L -v | grep DROP
Tinjau aturan pelepasan, dan periksa jumlah paket dan jumlah byte untuk melihat apakah jumlahnya meningkat seiring waktu.
Tcpdump
Tcpdump adalah alat pengambilan paket yang canggih yang menghasilkan banyak data traffic jaringan. Praktik umum adalah menjalankan tcpdump dari sumber dan tujuan. Jika paket diambil saat meninggalkan node sumber, tetapi tidak pernah diambil di node tujuan, berarti ada sesuatu di antara keduanya yang menghentikan paket. Perilaku ini biasanya menunjukkan bahwa ada sesuatu di infrastruktur fisik Anda yang secara keliru membuang paket.
Metrik
Google Distributed Cloud berisi beberapa metrik untuk membantu Anda melacak perilaku jaringan Anda. Metrik berikut memberikan titik awal yang baik:
Kategori | Metrik | Deskripsi |
---|---|---|
Paket yang dihentikan | cilium_drop_bytes_total |
Total byte yang dihentikan, diberi tag berdasarkan alasan penghentian dan arah masuk/keluar. Metrik ini adalah titik awal yang baik untuk menyelidiki penurunan tingkat byte. |
cilium_drop_count_total |
Total paket yang dihapus, diberi tag berdasarkan alasan penghapusan dan arah masuk/keluar. | |
container_network_receive_packets_dropped_total |
Jumlah kumulatif paket yang dihapus saat menerima. Sampelnya dibuat setiap 60 detik. | |
container_network_transmit_packets_dropped_total |
Jumlah kumulatif paket yang dihapus saat mengirim. Sampelnya dibuat setiap 60 detik. | |
Paket yang diteruskan | cilium_forward_bytes_total |
Total byte yang diteruskan, diberi tag menurut arah masuk/keluar. Sampelnya dibuat setiap 60 detik. Metrik ini memberikan informasi penerusan tingkat byte. |
cilium_forward_count_total |
Total paket yang diteruskan, diberi tag berdasarkan arah masuk/keluar. Sampelnya dibuat setiap 60 detik. Metrik ini memberi Anda jumlah paket untuk traffic yang diteruskan. | |
cilium_policy_l7_forwarded_total |
Total permintaan yang diteruskan L7. | |
Received packets | cilium_policy_l7_received_total |
Jumlah total permintaan/respons yang diterima L7. Sampelnya dibuat setiap 60 detik. |
container_network_receive_bytes_total |
Jumlah kumulatif byte yang diterima. Dibuat sampelnya setiap 60 detik. | |
container_network_receive_packets_total |
Jumlah kumulatif paket yang diterima. Dibuat sampelnya setiap 60 detik. | |
container_network_receive_errors_total |
Jumlah kumulatif error yang terjadi saat menerima. Sampelnya dibuat setiap 60 detik. | |
cilium_kubernetes_events_received_total |
Jumlah peristiwa Kubernetes yang diterima dan diberi label berdasarkan cakupan, tindakan, data yang valid, dan kesamaan. Dibuat sampelnya setiap 60 detik. | |
BPF | cilium_bpf_maps_virtual_memory_max_bytes |
BPF memetakan ukuran penggunaan memori maksimum kernel dalam byte. |
cilium_bpf_progs_virtual_memory_max_bytes |
Ukuran penggunaan memori maksimum kernel program BPF dalam byte. | |
Conntrack | node_nf_conntrack_entries |
Jumlah entri alur yang dialokasikan saat ini untuk pelacakan koneksi. Dibuat sampelnya setiap 60 detik. |
node_nf_conntrack_entries_limit |
Ukuran maksimum tabel pelacakan koneksi. Dibuat sampelnya setiap 60 detik. | |
Konektivitas | cilium_node_connectivity_latency_seconds |
Latensi terakhir yang diamati antara agen Cilium saat ini dan node Cilium lainnya dalam detik. Dibuat sampelnya setiap 60 detik. |
cilium_node_connectivity_status |
Status terakhir yang diamati dari konektivitas ICMP dan HTTP antara agen Cilium saat ini dan node Cilium lainnya. Dibuat sampelnya setiap 60 detik. | |
Operator Cilium | cilium_operator_process_cpu_seconds_total |
Total waktu CPU pengguna dan sistem yang dihabiskan dalam hitungan detik. Sampelnya dibuat setiap 60 detik. |
cilium_operator_process_max_fds |
Jumlah maksimum deskriptor file terbuka. Dibuat sampelnya setiap 60 detik. | |
cilium_operator_process_open_fds |
Jumlah deskriptor file terbuka. Dibuat sampelnya setiap 60 detik. | |
cilium_operator_process_resident_memory_bytes |
Ukuran memori residen dalam byte. Dibuat sampelnya setiap 60 detik. | |
cilium_operator_process_start_time_seconds |
Waktu mulai proses sejak epoch unix dalam detik. Sampelnya dibuat setiap 60 detik. | |
cilium_operator_process_virtual_memory_bytes |
Ukuran memori virtual dalam byte. Dibuat sampelnya setiap 60 detik. | |
cilium_operator_process_virtual_memory_max_bytes |
Jumlah memori virtual maksimum yang tersedia dalam byte. Sampelnya dibuat setiap 60 detik. | |
cilium_operator_identity_gc_entries |
Jumlah identitas yang aktif dan dihapus di akhir proses garbage collector. Dibuat sampelnya setiap 60 detik. | |
cilium_operator_identity_gc_runs |
Jumlah berapa kali pengumpul sampah identitas telah berjalan. Sampelnya dibuat setiap 60 detik. |
Untuk menerima notifikasi saat salah satu metrik ini melampaui atau berada di bawah nilai minimum tertentu, buat kebijakan pemberitahuan. Untuk mempelajari lebih lanjut, lihat artikel Membuat kebijakan pemberitahuan batas metrik di dokumentasi Cloud Monitoring.
Untuk mempelajari lebih lanjut metrik ini dan melihat daftar lengkap metrik, lihat Metrik Google Distributed Cloud.
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 menyelesaikan permintaan DNS untuk Pod di cluster. CoreDNS menyediakan layanan ini untuk Google Distributed Cloud versi 1.9.0 dan yang lebih baru.
Setiap cluster memiliki dua atau lebih Pod coredns
, dan autoscaler yang
bertanggung jawab untuk menskalakan jumlah Pod DNS relatif terhadap ukuran cluster.
Ada juga layanan bernama kube-dns
yang menyeimbangkan beban 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 Service atau Pod di 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
, maka permintaan tersebut adalah untuk domain eksternal.- CoreDNS meneruskan permintaan ke server nama upstream. Secara default, CoreDNS menggunakan server nama upstream yang dikonfigurasi di node tempat CoreDNS 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 mencapai Pod coredns
atau tidak. Masalah konektivitas cluster umum sering kali muncul sebagai masalah DNS karena permintaan DNS adalah jenis traffic pertama yang dikirimkan 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
gagal menyelesaikan nama domain:
- Error
NXDOMAIN
menunjukkan bahwa server DNS melaporkan bahwa domain tidak ada. Verifikasi bahwa nama domain yang diminta aplikasi Anda valid. - Error
SERVFAIL
atauREFUSED
menunjukkan bahwa server DNS mengirim kembali respons, tetapi tidak dapat menyelesaikan domain atau memvalidasi bahwa domain tersebut tidak ada. Untuk mengetahui 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 lain tidak, periksa apakah ada pola yang dapat dibedakan,
seperti resolusi DNS berfungsi untuk Pod di node yang sama dengan Pod
coredns
, tetapi tidak di seluruh node. Perilaku ini dapat menunjukkan adanya masalah konektivitas dalam cluster.
Jika CoreDNS tidak dapat menyelesaikan nama domain eksternal, lihat bagian berikut untuk memecahkan masalah Pod host-network. 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 menyelesaikan nama domain cluster.local
.
Jika Anda mengalami masalah dengan resolusi nama host-jaringan, gunakan langkah-langkah pemecahan masalah di bagian sebelumnya untuk menguji apakah DNS berfungsi dengan benar untuk server nama upstream Anda.
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.
Calico
Error umum: calico/node is not ready: BIRD is not ready: BGP not
established
Error status "tidak siap" di Kubernetes ini biasanya berarti bahwa peer tertentu tidak dapat dijangkau di cluster. Pastikan konektivitas BGP antara dua peer diizinkan di lingkungan Anda.
Error ini juga dapat terjadi jika resource node yang tidak aktif dikonfigurasi untuk mesh node-ke-node. Untuk memperbaiki masalah ini, nonaktifkan node yang tidak aktif.
Dataplane v2 / Cilium
Error umum: [PUT /endpoint/{id}][429] putEndpointIdTooManyRequests
Error ini berarti peristiwa pembuatan Pod telah ditolak oleh agen Cilium karena batas laju. Untuk setiap node, Cilium memiliki batas empat permintaan serentak ke endpoint PUT. Perilaku ini wajar jika ada lonjakan permintaan ke satu node. Agen Cilium akan memproses permintaan yang tertunda.
Di GKE Enterprise 1.14 dan yang lebih baru, batas frekuensi otomatis disesuaikan dengan kapasitas node. Pembatas kecepatan dapat menyatu ke jumlah yang lebih wajar, dengan batas kecepatan yang lebih tinggi untuk node yang lebih canggih.
Error umum: Ebpf map size is full
Dataplane v2 menyimpan status di peta eBFP. Status mencakup Layanan, pelacakan koneksi, identitas Pod, dan aturan 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 hampir mencapai batas 64k, bersihkan peta. Contoh berikut 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 akan 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 juga mungkin dalam status tidak 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
apakah plugin Container Network Interface (CNI) telah diinstal. Plugin CNI harus diinstal oleh anetd atau Calico menggunakan container init untuk menginstal biner CNI dan konfigurasi CNI ke direktori host yang diperlukan.
Untuk memecahkan masalah ini, periksa alasan Pod tersebut tidak berjalan di node. Biasanya, error ini bukan disebabkan oleh masalah jaringan. Pod tersebut berjalan di jaringan host, sehingga tidak ada dependensi jaringan.
Periksa status Pod
anetd
ataucalico-node
. Tinjau langkah-langkah pemecahan masalah berikut untuk membantu menentukan penyebab masalah:- Jika Pod dalam status
Crashlooping
, periksa log untuk mengetahui alasan Pod tidak dapat berjalan dengan benar. - Jika Pod 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 penerapan 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 dalam status
Node TIDAK SIAP karena entri ARP yang tidak aktif
Terkadang, entri ARP yang sudah usang di node panel kontrol cluster admin dapat menyebabkan ketidakcocokan alamat MAC. Ketidakcocokan alamat ini pada gilirannya dapat menyebabkan waktu tunggu koneksi habis untuk VIP bidang kontrol cluster pengguna terkelola. Waktu tunggu koneksi dapat menyebabkan node dengan entri ARP yang tidak aktif ditandai sebagai NOT
READY
. Node yang ditandai sebagai NOT READY
dapat menghentikan penginstalan dan upgrade cluster.
Dalam situasi ini, log kubelet di node dengan entri ARP yang tidak aktif 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 yang terikat dengan alamat VIP:
ip a | grep DEVICE_NAME: -A 6
Ganti
DEVICE_NAME
dengan nama perangkat jaringan untuk node control plane.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, bersihkan cache ARP di node bidang kontrol cluster admin:
ip n flush all
Layanan F5 tidak menerima traffic
Jika tidak ada traffic yang melewati 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 merebut kontrol atas partisi yang sama, dan menghapus Layanan dari cluster lain.
Pastikan dua Pod berikut sedang berjalan. Setiap Pod yang tidak berjalan menunjukkan adanya error:
Load-balancer-f5 K8s-bigip-ctlr-deployment-577d57985d-vk9wj
Load-balancer-f5
yang dimiliki oleh GKE Enterprise, dan membuat ConfigMap untuk setiap Service jenis LoadBalancer. ConfigMap pada akhirnya digunakan oleh pengontrolbigip
.Pastikan ConfigMap ada untuk setiap port dari setiap Service. 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 menerapkan konfigurasi, hal ini mungkin merupakan masalah F5. Untuk masalah yang terjadi di dalam instance BIG-IP, hubungi dukungan F5 untuk mendiagnosis dan memecahkan masalah tersebut.
Langkah berikutnya
Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.
Anda juga dapat melihat bagian Mendapatkan dukungan untuk mengetahui informasi selengkapnya tentang sumber dukungan, termasuk yang berikut:
- Persyaratan untuk membuka kasus dukungan.
- Alat untuk membantu Anda memecahkan masalah, seperti log dan metrik.
- Komponen yang didukung, versi, dan fitur Google Distributed Cloud untuk VMware (khusus software).