Mendiagnosis masalah koneksi untuk kluster Kubernetes dengan dukungan Azure Arc
Jika Anda mengalami masalah saat menyambungkan kluster ke Azure Arc, itu mungkin karena salah satu masalah yang tercantum di sini. Kami menyediakan dua bagan alur dengan bantuan terpandu: satu jika Anda tidak menggunakan server proksi, dan yang berlaku jika koneksi jaringan Anda menggunakan server proksi.
Tip
Langkah-langkah dalam diagram alur ini berlaku baik Anda menggunakan Azure CLI atau Azure PowerShell untuk menyambungkan kluster Anda. Namun, beberapa langkah memerlukan penggunaan Azure CLI. Jika Anda belum menginstal Azure CLI, pastikan untuk melakukannya sebelum memulai.
Koneksi tanpa proksi
Tinjau diagram alur ini untuk mendiagnosis masalah Anda saat mencoba menyambungkan kluster ke Azure Arc tanpa server proksi. Detail selengkapnya tentang setiap langkah disediakan di bawah ini.
Apakah identitas Azure memiliki izin yang memadai?
Tinjau prasyarat untuk menghubungkan kluster dan pastikan bahwa identitas yang Anda gunakan untuk menghubungkan kluster memiliki izin yang diperlukan.
Apakah Anda menjalankan Azure CLI versi terbaru?
Pastikan Anda memiliki versi terbaru yang terinstal.
Jika Anda menyambungkan kluster dengan menggunakan Azure PowerShell, pastikan Anda menjalankan versi terbaru.
Apakah ekstensi adalah connectedk8s
versi terbaru?
Perbarui ekstensi Azure CLI connectedk8s
ke versi terbaru dengan menjalankan perintah ini:
az extension update --name connectedk8s
Jika Anda belum menginstal ekstensi, Anda dapat melakukannya dengan menjalankan perintah berikut:
az extension add --name connectedk8s
Apakah kubeconfig menunjuk ke kluster yang tepat?
Jalankan kubectl config get-contexts
untuk mengonfirmasi nama konteks target. Kemudian atur konteks default ke kluster yang tepat dengan menjalankan kubectl config use-context <target-cluster-name>
.
Apakah semua penyedia sumber daya yang diperlukan terdaftar?
Pastikan bahwa penyedia sumber daya Microsoft.Kubernetes, Microsoft.KubernetesConfiguration, dan Microsoft.ExtendedLocation terdaftar.
Apakah semua persyaratan jaringan terpenuhi?
Tinjau persyaratan jaringan dan pastikan bahwa tidak ada titik akhir yang diperlukan yang diblokir.
Apakah semua pod dalam azure-arc
namespace layanan berjalan?
Jika semuanya bekerja dengan benar, pod Anda semuanya harus dalam status Running
. Jalankan kubectl get pods -n azure-arc
untuk mengonfirmasi apakah status pod apa pun bukan Running
.
Masih mengalami masalah?
Langkah-langkah di atas akan menyelesaikan banyak masalah koneksi umum, tetapi jika Anda masih tidak dapat tersambung dengan sukses, buat file log pemecahan masalah lalu buka permintaan dukungan sehingga kami dapat menyelidiki masalah lebih lanjut.
Untuk menghasilkan file log pemecahan masalah, jalankan perintah berikut:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
Saat Anda membuat permintaan dukungan, di bagian Detail tambahan, gunakan opsi Unggah file untuk mengunggah file log yang dihasilkan.
Koneksi dengan server proksi
Jika Anda menggunakan server proksi pada setidaknya satu komputer, selesaikan lima langkah pertama bagan alur non-proksi (melalui pendaftaran penyedia sumber daya) untuk langkah-langkah pemecahan masalah dasar. Kemudian, jika Anda masih mengalami masalah, tinjau diagram alur berikutnya untuk langkah-langkah pemecahan masalah tambahan. Detail selengkapnya tentang setiap langkah disediakan di bawah ini.
Apakah mesin menjalankan perintah di belakang server proksi?
Jika mesin menjalankan perintah di belakang server proksi, Anda harus mengatur semua variabel lingkungan yang diperlukan. Untuk informasi selengkapnya, lihat Menyambungkan menggunakan server proksi keluar.
Contohnya:
export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"
Apakah server proksi hanya menerima sertifikat tepercaya?
Pastikan untuk menyertakan jalur file sertifikat dengan menyertakan --proxy-cert <path-to-cert-file>
saat menjalankan az connectedk8s connect
perintah.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>
Apakah server proksi dapat menjangkau titik akhir jaringan yang diperlukan?
Tinjau persyaratan jaringan dan pastikan bahwa tidak ada titik akhir yang diperlukan yang diblokir.
Apakah server proksi hanya menggunakan HTTP?
Jika server proksi Anda hanya menggunakan HTTP, Anda dapat menggunakan proxy-http
untuk kedua parameter.
Jika server proksi Anda disiapkan dengan HTTP dan HTTPS, jalankan az connectedk8s connect
perintah dengan --proxy-https
parameter dan --proxy-http
yang ditentukan. Pastikan Anda menggunakan --proxy-http
untuk proksi HTTP dan --proxy-https
untuk proksi HTTPS.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port>
Apakah server proksi memerlukan rentang lewati untuk komunikasi layanan-ke-layanan?
Jika Anda memerlukan rentang lewati, gunakan --proxy-skip-range <excludedIP>,<excludedCIDR>
dalam perintah Anda az connectedk8s connect
.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port> --proxy-skip-range <excludedIP>,<excludedCIDR>
Apakah semua pod dalam azure-arc
namespace layanan berjalan?
Jika semuanya bekerja dengan benar, pod Anda semuanya harus dalam status Running
. Jalankan kubectl get pods -n azure-arc
untuk mengonfirmasi apakah status pod apa pun bukan Running
.
Periksa apakah resolusi DNS berhasil untuk titik akhir
Dari dalam pod, Anda dapat menjalankan pencarian DNS ke titik akhir.
Bagaimana jika Anda tidak dapat menjalankan perintah kubectl exec untuk terhubung ke pod dan menginstal paket DNS Utils? Dalam situasi ini, Anda dapat memulai pod pengujian di namespace yang sama dengan pod yang bermasalah, lalu menjalankan pengujian.
Catatan
Jika resolusi DNS atau lalu lintas keluar tidak memungkinkan Anda menginstal paket jaringan yang diperlukan, Anda dapat menggunakan rishasi/ubuntu-netutil:1.0
gambar docker. Dalam gambar ini, paket yang diperlukan sudah diinstal.
Berikut adalah contoh prosedur untuk memeriksa resolusi DNS:
Mulai pod pengujian di namespace yang sama dengan pod yang bermasalah:
kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
Setelah pod pengujian berjalan, Anda akan mendapatkan akses ke pod.
Jalankan perintah berikut
apt-get
untuk menginstal paket alat lain:apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat -y
Setelah paket diinstal, jalankan perintah nslookup untuk menguji resolusi DNS ke titik akhir:
$ nslookup microsoft.com Server: 10.0.0.10 Address: 10.0.0.10#53 ... ... Name: microsoft.com Address: 20.53.203.50
Coba resolusi DNS dari server DNS upstream secara langsung. Contoh ini menggunakan Azure DNS:
$ nslookup microsoft.com 168.63.129.16 Server: 168.63.129.16 Address: 168.63.129.16#53 ... ... Address: 20.81.111.85
Jalankan
host
perintah untuk memeriksa apakah permintaan DNS dirutekan ke server upstram:$ host -a microsoft.com Trying "microsoft.com.default.svc.cluster.local" Trying "microsoft.com.svc.cluster.local" Trying "microsoft.com.cluster.local" Trying "microsoft.com.00idcnmrrm4edot5s2or1onxsc.bx.internal.cloudapp.net" Trying "microsoft.com" Trying "microsoft.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62884 ;; flags: qr rd ra; QUERY: 1, ANSWER: 27, AUTHORITY: 0, ADDITIONAL: 5 ;; QUESTION SECTION: ;microsoft.com. IN ANY ;; ANSWER SECTION: microsoft.com. 30 IN NS ns1-39.azure-dns.com. ... ... ns4-39.azure-dns.info. 30 IN A 13.107.206.39 Received 2121 bytes from 10.0.0.10#53 in 232 ms
Jalankan pod pengujian di kumpulan simpul Windows:
# For a Windows environment, use the Resolve-DnsName cmdlet. kubectl run dnsutil-win --image='mcr.microsoft.com/windows/servercore:1809' --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "windows"}}}' -- powershell "Start-Sleep -s 3600"
Jalankan perintah kubectl exec untuk menyambungkan ke pod dengan menggunakan PowerShell:
kubectl exec -it dnsutil-win -- powershell
Jalankan cmdlet Resolve-DnsName di PowerShell untuk memeriksa apakah resolusi DNS berfungsi untuk titik akhir:
PS C:\> Resolve-DnsName www.microsoft.com Name Type TTL Section NameHost ---- ---- --- ------- -------- www.microsoft.com CNAME 20 Answer www.microsoft.com-c-3.edgekey.net www.microsoft.com-c-3.edgekey. CNAME 20 Answer www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net net www.microsoft.com-c-3.edgekey. CNAME 20 Answer e13678.dscb.akamaiedge.net net.globalredir.akadns.net Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:484::356e Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:496::356e Name : e13678.dscb.akamaiedge.net QueryType : A TTL : 12 Section : Answer IP4Address : 23.200.197.152
Jika resolusi DNS tidak berhasil, verifikasi konfigurasi DNS untuk kluster.
Masih mengalami masalah?
Langkah-langkah di atas akan menyelesaikan banyak masalah koneksi umum, tetapi jika Anda masih tidak dapat tersambung dengan sukses, buat file log pemecahan masalah lalu buka permintaan dukungan sehingga kami dapat menyelidiki masalah lebih lanjut.
Untuk menghasilkan file log pemecahan masalah, jalankan perintah berikut:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
Saat Anda membuat permintaan dukungan, di bagian Detail tambahan, gunakan opsi Unggah file untuk mengunggah file log yang dihasilkan.
Langkah berikutnya
- Lihat tips pemecahan masalah lainnya untuk menggunakan Kubernetes dengan dukungan Azure Arc.
- Tinjau proses untuk menyambungkan kluster Kubernetes yang ada ke Azure Arc.