Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Lalu lintas jaringan aplikasi melalui pemutusan jaringan
Topik di halaman ini terkait dengan jaringan cluster Kubernetes dan lalu lintas aplikasi selama pemutusan jaringan antara node dan bidang kontrol Kubernetes.
Cilium
Cilium memiliki beberapa mode untuk manajemen alamat IP (IPAM), enkapsulasi, penyeimbangan beban, dan perutean cluster. Mode yang divalidasi dalam panduan ini menggunakan Cluster Scope IPAM, overlay VXLAN, penyeimbangan beban BGP, dan kube-proxy. Cilium juga digunakan tanpa penyeimbangan beban BGP, menggantikannya dengan penyeimbangan beban MetallB L2.
Basis instalasi Cilium terdiri dari operator Cilium dan agen Cilium. Operator Cilium berjalan sebagai Deployment dan mendaftarkan Cilium Custom Resource Definitions (CRD), mengelola IPAM, dan menyinkronkan objek cluster dengan server API Kubernetes di antara kemampuan lainnya. https://docs.cilium.io/en/stable/internals/cilium_operator/
Umumnya, perutean in-cluster yang dikonfigurasi oleh Cilium tetap tersedia dan di tempatnya selama pemutusan jaringan, yang dapat dikonfirmasi dengan mengamati aliran lalu lintas dalam cluster dan aturan tabel IP (iptables) untuk jaringan pod.
ip route show table all | grep cilium
10.86.2.0/26 via 10.86.3.16 dev cilium_host proto kernel src 10.86.3.16 mtu 1450 10.86.2.64/26 via 10.86.3.16 dev cilium_host proto kernel src 10.86.3.16 mtu 1450 10.86.2.128/26 via 10.86.3.16 dev cilium_host proto kernel src 10.86.3.16 mtu 1450 10.86.2.192/26 via 10.86.3.16 dev cilium_host proto kernel src 10.86.3.16 mtu 1450 10.86.3.0/26 via 10.86.3.16 dev cilium_host proto kernel src 10.86.3.16 10.86.3.16 dev cilium_host proto kernel scope link ...
Namun, selama pemutusan jaringan, operator Cilium dan agen Cilium memulai ulang karena penggabungan pemeriksaan kesehatan mereka dengan kesehatan koneksi dengan server API Kubernetes. Diharapkan untuk melihat hal berikut dalam log operator Cilium dan agen Cilium selama pemutusan jaringan. Selama pemutusan jaringan, Anda dapat menggunakan alat seperti crictl CLI untuk mengamati restart komponen ini termasuk log mereka.
msg="Started gops server" address="127.0.0.1:9890" subsys=gops msg="Establishing connection to apiserver" host="https://<k8s-cluster-ip>:443" subsys=k8s-client msg="Establishing connection to apiserver" host="https://<k8s-cluster-ip>:443" subsys=k8s-client msg="Unable to contact k8s api-server" error="Get \"https://<k8s-cluster-ip>:443/api/v1/namespaces/kube-system\": dial tcp <k8s-cluster-ip>:443: i/o timeout" ipAddr="https://<k8s-cluster-ip>:443" subsys=k8s-client msg="Start hook failed" function="client.(*compositeClientset).onStart (agent.infra.k8s-client)" error="Get \"https://<k8s-cluster-ip>:443/api/v1/namespaces/kube-system\": dial tcp <k8s-cluster-ip>:443: i/o timeout" msg="Start failed" error="Get \"https://<k8s-cluster-ip>:443/api/v1/namespaces/kube-system\": dial tcp <k8s-cluster-ip>:443: i/o timeout" duration=1m5.003834026s msg=Stopping msg="Stopped gops server" address="127.0.0.1:9890" subsys=gops msg="failed to start: Get \"https://<k8s-cluster-ip>:443/api/v1/namespaces/kube-system\": dial tcp <k8s-cluster-ip>:443: i/o timeout" subsys=daemon
Jika Anda menggunakan kemampuan BGP Control Plane Cilium untuk penyeimbangan beban aplikasi, sesi BGP untuk pod dan layanan Anda mungkin mati selama pemutusan jaringan karena fungsionalitas speaker BGP terintegrasi dengan agen Cilium, dan agen Cilium akan terus restart saat terputus dari bidang kontrol Kubernetes. Untuk informasi lebih lanjut, lihat Panduan Operasi Pesawat Kontrol Cilium BGP dalam dokumentasi Cilium. Selain itu, jika Anda mengalami kegagalan simultan selama pemutusan jaringan seperti siklus daya atau reboot mesin, rute Cilium tidak akan dipertahankan melalui tindakan ini, meskipun rute dibuat ulang ketika node terhubung kembali ke bidang kontrol Kubernetes dan Cilium memulai lagi.
Calico
Segera hadir
MetalB
MetallB memiliki dua mode untuk penyeimbangan beban: mode L2
kube-proxy
Dalam klaster EKS, kube-proxy berjalan sebagai a DaemonSet pada setiap node dan bertanggung jawab untuk mengelola aturan jaringan untuk memungkinkan komunikasi antara layanan dan pod dengan menerjemahkan alamat IP layanan ke alamat IP dari pod yang mendasarinya. Aturan tabel IP (iptables) yang dikonfigurasi oleh kube-proxy dipertahankan selama pemutusan jaringan dan perutean dalam cluster terus berfungsi dan pod kube-proxy terus berjalan.
Anda dapat mengamati aturan kube-proxy dengan perintah iptables berikut. Perintah pertama menunjukkan paket yang melewati PREROUTING rantai diarahkan ke KUBE-SERVICES rantai.
iptables -t nat -L PREROUTING
Chain PREROUTING (policy ACCEPT) target prot opt source destination KUBE-SERVICES all -- anywhere anywhere /* kubernetes service portals */
Memeriksa KUBE-SERVICES rantai kita dapat melihat aturan untuk berbagai layanan cluster.
Chain KUBE-SERVICES (2 references) target prot opt source destination KUBE-SVL-NZTS37XDTDNXGCKJ tcp -- anywhere 172.16.189.136 /* kube-system/hubble-peer:peer-service cluster IP / KUBE-SVC-2BINP2AXJOTI3HJ5 tcp -- anywhere 172.16.62.72 / default/metallb-webhook-service cluster IP / KUBE-SVC-LRNEBRA3Z5YGJ4QC tcp -- anywhere 172.16.145.111 / default/redis-leader cluster IP / KUBE-SVC-I7SKRZYQ7PWYV5X7 tcp -- anywhere 172.16.142.147 / kube-system/eks-extension-metrics-api:metrics-api cluster IP / KUBE-SVC-JD5MR3NA4I4DYORP tcp -- anywhere 172.16.0.10 / kube-system/kube-dns:metrics cluster IP / KUBE-SVC-TCOU7JCQXEZGVUNU udp -- anywhere 172.16.0.10 / kube-system/kube-dns:dns cluster IP / KUBE-SVC-ERIFXISQEP7F7OF4 tcp -- anywhere 172.16.0.10 / kube-system/kube-dns:dns-tcp cluster IP / KUBE-SVC-ENODL3HWJ5BZY56Q tcp -- anywhere 172.16.7.26 / default/frontend cluster IP / KUBE-EXT-ENODL3HWJ5BZY56Q tcp -- anywhere <LB-IP> / default/frontend loadbalancer IP / KUBE-SVC-NPX46M4PTMTKRN6Y tcp -- anywhere 172.16.0.1 / default/kubernetes:https cluster IP / KUBE-SVC-YU5RV2YQWHLZ5XPR tcp -- anywhere 172.16.228.76 / default/redis-follower cluster IP / KUBE-NODEPORTS all -- anywhere anywhere / kubernetes service nodeports; NOTE: this must be the last rule in this chain */
Memeriksa rantai layanan frontend untuk aplikasi, kita dapat melihat alamat IP pod yang mendukung layanan.
iptables -t nat -L KUBE-SVC-ENODL3HWJ5BZY56Q
Chain KUBE-SVC-ENODL3HWJ5BZY56Q (2 references) target prot opt source destination KUBE-SEP-EKXE7ASH7Y74BGBO all -- anywhere anywhere /* default/frontend -> 10.86.2.103:80 / statistic mode random probability 0.33333333349 KUBE-SEP-GCY3OUXWSVMSEAR6 all -- anywhere anywhere / default/frontend -> 10.86.2.179:80 / statistic mode random probability 0.50000000000 KUBE-SEP-6GJJR3EF5AUP2WBU all -- anywhere anywhere / default/frontend -> 10.86.3.47:80 */
Pesan log kube-proxy berikut diharapkan selama pemutusan jaringan saat mencoba mengawasi server API Kubernetes untuk pembaruan sumber daya node dan titik akhir.
"Unhandled Error" err="k8s.io/client-go/informers/factory.go:160: Failed to watch *v1.Node: failed to list *v1.Node: Get \"https://<k8s-endpoint>/api/v1/nodes?fieldSelector=metadata.name%3D<node-name>&resourceVersion=2241908\": dial tcp <k8s-ip>:443: i/o timeout" logger="UnhandledError" "Unhandled Error" err="k8s.io/client-go/informers/factory.go:160: Failed to watch *v1.EndpointSlice: failed to list *v1.EndpointSlice: Get \"https://<k8s-endpoint>/apis/discovery.k8s.io/v1/endpointslices?labelSelector=%21service.kubernetes.io%2Fheadless%2C%21service.kubernetes.io%2Fservice-proxy-name&resourceVersion=2242090\": dial tcp <k8s-ip>:443: i/o timeout" logger="UnhandledError"
CoreDNS
Secara default, pod di cluster EKS menggunakan alamat IP cluster CoreDNS sebagai server nama untuk kueri DNS dalam cluster. Di kluster EKS, CoreDNS berjalan sebagai Deployment pada node. Dengan node hybrid, pod dapat terus berkomunikasi dengan CoreDNS selama pemutusan jaringan ketika ada replika CoreDNS yang berjalan secara lokal pada node hybrid. Jika Anda memiliki cluster EKS dengan node di cloud dan node hybrid di lingkungan lokal Anda, disarankan untuk memiliki setidaknya satu replika CoreDNS di setiap lingkungan. CoreDNS terus melayani kueri DNS untuk catatan yang dibuat sebelum pemutusan jaringan dan terus berjalan melalui koneksi ulang jaringan untuk stabilitas statis.
Pesan log CoreDNS berikut diharapkan selama pemutusan jaringan saat mencoba mencantumkan objek dari server API Kubernetes.
Failed to watch *v1.Namespace: failed to list *v1.Namespace: Get "https://<k8s-cluster-ip>:443/api/v1/namespaces?resourceVersion=2263964": dial tcp <k8s-cluster-ip>:443: i/o timeout Failed to watch *v1.Service: failed to list *v1.Service: Get "https://<k8s-cluster-ip>:443/api/v1/services?resourceVersion=2263966": dial tcp <k8s-cluster-ip>:443: i/o timeout Failed to watch *v1.EndpointSlice: failed to list *v1.EndpointSlice: Get "https://<k8s-cluster-ip>:443/apis/discovery.k8s.io/v1/endpointslices?resourceVersion=2263896": dial tcp <k8s-cluster-ip>: i/o timeout