Bagikan melalui


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.

Diagram alur memperlihatkan representasi visual memeriksa masalah koneksi saat tidak menggunakan proksi.

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.

Diagram alur memperlihatkan representasi visual memeriksa masalah koneksi saat menggunakan proksi.

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:

  1. 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.

  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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"
    
  7. Jalankan perintah kubectl exec untuk menyambungkan ke pod dengan menggunakan PowerShell:

    kubectl exec -it dnsutil-win powershell
    
  8. 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