Memeriksa konektivitas cluster dengan nettest

nettest Google Distributed Cloud mengidentifikasi masalah konektivitas di Objek Kubernetes di cluster Anda, seperti Pod, Node, Service, dan beberapa target eksternal. nettest tidak memeriksa koneksi dari target eksternal ke Pod, Node, atau Service. Dokumen ini menjelaskan cara men-deploy dan menjalankan nettest dengan salah satu manifes, nettest.yaml atau nettest_rhel.yaml, di tindakan sampel-anthos repositori GitHub ASL. Gunakan nettest_rhel.yaml jika Anda menjalankan Google Distributed Cloud di Red HatEnterprise Linux (RHEL). Gunakan nettest.yaml jika Anda menjalankan Google Distributed Cloud di Ubuntu.

Dokumen ini juga menjelaskan cara Anda menafsirkan log yang dibuat oleh nettest untuk mengidentifikasi masalah konektivitas dengan cluster Anda.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Tentang nettest

Alat diagnostik nettest terdiri dari objek Kubernetes berikut. Masing-masing ditentukan dalam file manifes YAML nettest.

  • cloudprober: DaemonSet dan Service yang bertanggung jawab untuk mengumpulkan jaringan status koneksi, seperti tingkat error dan latensi.
  • echoserver: DaemonSet dan Service yang bertanggung jawab untuk merespons cloudprober, yang menyediakan metrik untuk konektivitas jaringan.
  • nettest: Pod yang berisi container prometheus dan nettest.
    • prometheus mengumpulkan metrik dari cloudprober.
    • nettest mengkueri prometheus dan menampilkan hasil pengujian jaringan dalam log.
  • nettest-engine: ConfigMap untuk mengonfigurasi container nettest di Pod nettest.

Manifes juga menentukan namespace nettest dan atribut ServiceAccount (bersama dengan ClusterRole dan ClusterRoleBinding) untuk mengisolasi nettest dari resource cluster lainnya.

Jalankan nettest

Deploy nettest dengan menjalankan perintah berikut untuk sistem operasi Anda. Saat Pod nettest dimulai, pengujian akan berjalan secara otomatis. Pengujian ini memerlukan waktu sekitar lima menit untuk menyelesaikan pesanan.

Untuk Ubuntu:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml

Untuk RHEL:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest_rhel.yaml

Mendapatkan hasil pengujian

Setelah tes selesai, yang akan memakan waktu sekitar lima menit setelah Manifes nettest sudah di-deploy, jalankan perintah berikut untuk melihat nettest hasil:

kubectl -n nettest logs nettest -c nettest

Saat nettest berjalan, aplikasi ini akan mengirimkan pesan seperti berikut ke stdout:

I0413 03:33:04.879141       1 collectorui.go:130] Listening on ":8999"
I0413 03:33:04.879258       1 prometheus.go:172] Running prometheus controller
E0413 03:33:04.879628       1 prometheus.go:178] Prometheus controller: failed to
retries probers: Get "http://127.0.0.1:9090/api/v1/targets": dial tcp 127.0.0.1:9090:
connect: connection refused

Jika nettest berhasil berjalan tanpa mengidentifikasi kegagalan konektivitas, Anda akan melihat entri log berikut:

I0211 21:58:34.689290       1 validate_metrics.go:78] Metric validation passed!

Jika nettest menemukan masalah koneksi, kode ini akan menulis entri log seperti berikut:

E0211 06:40:11.948634       1 collector.go:65] Engine error: step validateMetrics failed:
"Error rate in percentage": probe from "10.200.0.3" to "172.26.115.210:80" has value 100.000000,
threshold is 1.000000
"Error rate in percentage": probe from "10.200.0.3" to "172.26.27.229:80" has value 100.000000,
threshold is 1.000000
"Error rate in percentage": probe from "192.168.3.248" to "echoserver-hostnetwork_10.200.0.2_8080"
has value 2.007046, threshold is 1.000000

Meskipun batas defaultnya adalah satu persen (1.000000), tingkat error hingga lima persen dapat diabaikan dengan aman. Misalnya, tingkat error untuk konektivitas dari alamat IP 192.168.3.248 ke echoserver-hostnetwork_10.200.0.2_8080 inci contoh sebelumnya adalah sekitar dua persen (2.007046). Ini adalah contoh masalah konektivitas yang dilaporkan yang dapat Anda abaikan.

Menafsirkan hasil pengujian

Saat nettest selesai dan menemukan masalah konektivitas, Anda akan melihat hal berikut entri dalam log Pod nettest:

"Error rate in percentage": probe from {src} to {dst} has value 100.000000, threshold is 1.000000

Di sini, {src} dan {dst} dapat berupa:

  • echoserver IP Pod: koneksi ke atau dari Pod di node.
  • IP Node: koneksi ke atau dari node.
  • IP Layanan (lihat teks berikut untuk detailnya)

Selain itu, {dst} juga dapat:

  • google.com: koneksi eksternal.
  • dns: koneksi ke Layanan non-hostNetwork melalui DNS, yaitu echoserver-non-hostnetwork.nettest.svc.cluster.local.

    Detail untuk IP Layanan ada dalam entri pencarian berformat JSON di log ini, seperti contoh berikut. Contoh {i>probe<i} berikut menunjukkan bahwa 172.26.27.229:80 adalah alamat untuk service-clusterip. Ada dua pemeriksaan dengan nilai targets ini, satu untuk Pod (pod-service-clusterip) dan satu untuk Node (node-service-clusterip).

    probe {
      name: "node-service-clusterip"
      
      targets {
        host_names: "172.26.27.229:80"
      }
    

Memvalidasi perbaikan

Setelah mengatasi semua masalah konektivitas yang dilaporkan, hapus Pod nettest dan terapkan ulang manifes nettest untuk menjalankan kembali pengujian konektivitas.

Misalnya, untuk menjalankan kembali nettest untuk Ubuntu, jalankan perintah berikut:

kubectl -n nettest delete pod nettest
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-utils/abm-nettest/nettest.yaml

Bersihkan nettest

Setelah selesai menguji, jalankan perintah berikut untuk menghapus semua nettest referensi:

kubectl delete namespace nettest
kubectl delete clusterroles nettest:nettest
kubectl delete clusterrolebindings nettest:nettest

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.