Menyambungkan ke node kluster Azure Kubernetes Service (AKS) untuk pemeliharaan atau pemecahan masalah

Sepanjang siklus hidup kluster Azure Kubernetes Service (AKS), Anda akhirnya perlu langsung mengakses simpul AKS. Akses ini bisa untuk operasi pemeliharaan, pengumpulan log, atau pemecahan masalah.

Anda mengakses simpul melalui autentikasi, metode mana yang bervariasi tergantung pada OS Node dan metode koneksi Anda. Anda mengautentikasi dengan aman terhadap simpul AKS Linux dan Windows melalui dua opsi yang dibahas dalam artikel ini. Salah satu mengharuskan Anda memiliki akses API Kubernetes, dan yang lainnya adalah melalui AKS ARM API, yang menyediakan informasi IP privat langsung. Untuk alasan keamanan, node AKS tidak terekspos ke internet. Sebagai gantinya, untuk terhubung langsung ke simpul AKS apa pun, Anda perlu menggunakan salah satu kubectl debug atau alamat IP privat host.

Mengakses simpul menggunakan API Kubernetes

Metode ini memerlukan penggunaan kubectl debug perintah.

Sebelum Anda mulai

Panduan ini menunjukkan kepada Anda cara membuat koneksi ke simpul AKS dan memperbarui kunci SSH kluster AKS Anda. Untuk mengikuti langkah-langkahnya, Anda perlu menggunakan Azure CLI yang mendukung versi 2.0.64 atau yang lebih baru. Jalankan az --version untuk memeriksa versi. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Selesaikan langkah-langkah ini jika Anda tidak memiliki kunci SSH. Buat kunci SSH tergantung pada Gambar OS Node Anda, untuk macOS dan Linux, atau Windows. Pastikan Anda menyimpan pasangan kunci dalam format OpenSSH, hindari format yang tidak didukung seperti .ppk. Selanjutnya, lihat Mengelola konfigurasi SSH untuk menambahkan kunci ke kluster Anda.

Linux dan macOS

Pengguna Linux dan macOS dapat SSH untuk mengakses simpul mereka menggunakan kubectl debug atau Alamat IP privat mereka. Pengguna Windows harus melompat ke bagian Proksi Windows Server untuk solusi untuk SSH melalui proksi.

SSH menggunakan debug kubectl

Untuk membuat koneksi shell interaktif, gunakan kubectl debug perintah untuk menjalankan kontainer istimewa pada simpul Anda.

  1. Untuk mencantumkan kubectl get nodes simpul Anda, gunakan perintah :

    kubectl get nodes -o wide
    

    Contoh output:

    NAME                                STATUS   ROLES   AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE
    aks-nodepool1-37663765-vmss000000   Ready    agent   166m   v1.25.6   10.224.0.33   <none>        Ubuntu 22.04.2 LTS
    aks-nodepool1-37663765-vmss000001   Ready    agent   166m   v1.25.6   10.224.0.4    <none>        Ubuntu 22.04.2 LTS
    aksnpwin000000                      Ready    agent   160m   v1.25.6   10.224.0.62   <none>        Windows Server 2022 Datacenter
    
  2. kubectl debug Gunakan perintah untuk memulai kontainer istimewa pada simpul Anda dan sambungkan ke simpul tersebut.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
    

    Contoh output:

    Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000.
    If you don't see a command prompt, try pressing enter.
    root@aks-nodepool1-37663765-vmss000000:/#
    

    Anda sekarang memiliki akses ke simpul melalui kontainer istimewa sebagai pod debugging.

    Catatan

    Anda dapat berinteraksi dengan sesi simpul dengan menjalankannya chroot /host dari kontainer khusus.

Keluar dari mode debug kubectl

Setelah selesai dengan simpul, masukkan exit perintah untuk mengakhiri sesi shell interaktif. Setelah sesi kontainer interaktif ditutup, hapus pod debugging yang digunakan dengan kubectl delete pod.

kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx

Koneksi proksi Windows Server untuk SSH

Ikuti langkah-langkah ini sebagai solusi untuk menyambungkan dengan SSH pada simpul Windows Server.

Membuat server proksi

Saat ini, Anda tidak dapat tersambung ke node Windows Server secara langsung menggunakan kubectl debug. Sebagai gantinya, Anda harus terlebih dahulu terhubung ke node lain di kluster dengan kubectl, lalu sambungkan ke simpul Windows Server dari simpul tersebut menggunakan SSH.

Untuk menyambungkan ke simpul lain di kluster, gunakan kubectl debug perintah . Untuk informasi selengkapnya, ikuti langkah-langkah di atas di bagian kubectl. Buat koneksi SSH ke simpul Windows Server dari simpul lain menggunakan kunci SSH yang disediakan saat Anda membuat kluster AKS dan alamat IP internal simpul Windows Server.

Penting

Langkah-langkah berikut untuk membuat koneksi SSH ke simpul Windows Server dari simpul lain hanya dapat digunakan jika Anda membuat kluster AKS menggunakan Azure CLI dengan --generate-ssh-keys parameter . Jika Anda ingin menggunakan kunci SSH Anda sendiri, Anda dapat menggunakan az aks update untuk mengelola kunci SSH pada kluster AKS yang ada. Untuk informasi selengkapnya, lihat mengelola akses simpul SSH.

Catatan

Jika simpul proksi Linux Anda tidak berfungsi atau tidak responsif, gunakan metode Azure Bastion untuk menyambungkan sebagai gantinya.

  1. kubectl debug Gunakan perintah untuk memulai kontainer istimewa pada simpul proksi (Linux) Anda dan sambungkan ke kontainer tersebut.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
    

    Contoh output:

    Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000.
    If you don't see a command prompt, try pressing enter.
    root@aks-nodepool1-37663765-vmss000000:/#
    
  2. Buka jendela terminal baru dan gunakan kubectl get pods perintah untuk mendapatkan nama pod yang dimulai oleh kubectl debug.

    kubectl get pods
    

    Contoh output:

    NAME                                                    READY   STATUS    RESTARTS   AGE
    node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx   1/1     Running   0          21s
    

    Dalam output sampel, node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx adalah nama pod yang dimulai oleh kubectl debug.

  3. kubectl port-forward Gunakan perintah untuk membuka koneksi ke pod yang disebarkan:

    kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
    

    Contoh output:

    Forwarding from 127.0.0.1:2022 -> 22
    Forwarding from [::1]:2022 -> 22
    

    Contoh sebelumnya mulai meneruskan lalu lintas jaringan dari port 2022 pada komputer pengembangan Anda ke port 22 pada pod yang disebarkan. Saat menggunakan kubectl port-forward untuk membuka sambungan dan meneruskan lalu lintas jaringan, sambungan tetap terbuka hingga Anda menghentikan perintah kubectl port-forward.

  4. Buka terminal baru dan jalankan perintah kubectl get nodes untuk menampilkan alamat IP internal simpul Windows Server:

    kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
    

    Contoh output:

    NAME                                INTERNAL_IP
    aks-nodepool1-19409214-vmss000003   10.224.0.8
    

    Dalam contoh sebelumnya, 10.224.0.62 adalah alamat IP internal simpul Windows Server.

  5. Buat koneksi SSH ke simpul Windows Server menggunakan alamat IP internal, dan sambungkan ke port 22 melalui port 2022 pada komputer pengembangan Anda. Nama pengguna default untuk simpul AKS adalah azureuser. Terima permintaan untuk melanjutkan koneksi. Anda kemudian diberikan perintah bash dari simpul Windows Server Anda:

    ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
    

    Contoh output:

    The authenticity of host '10.224.0.62 (10.224.0.62)' can't be established.
    ECDSA key fingerprint is SHA256:1234567890abcdefghijklmnopqrstuvwxyzABCDEFG.
    Are you sure you want to continue connecting (yes/no)? yes
    

    Catatan

    Jika Anda lebih suka menggunakan autentikasi kata sandi, sertakan parameter -o PreferredAuthentications=password. Misalnya:

     ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
    

Menggunakan Kontainer Proses Host untuk mengakses simpul Windows

  1. Buat hostprocess.yaml dengan konten berikut dan ganti AKSWINDOWSNODENAME dengan nama simpul AKS Windows.

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        pod: hpc
      name: hpc
    spec:
      securityContext:
        windowsOptions:
          hostProcess: true
          runAsUserName: "NT AUTHORITY\\SYSTEM"
      hostNetwork: true
      containers:
        - name: hpc
          image: mcr.microsoft.com/windows/servercore:ltsc2022 # Use servercore:1809 for WS2019
          command:
            - powershell.exe
            - -Command
            - "Start-Sleep 2147483"
          imagePullPolicy: IfNotPresent
      nodeSelector:
        kubernetes.io/os: windows
        kubernetes.io/hostname: AKSWINDOWSNODENAME
      tolerations:
        - effect: NoSchedule
          key: node.kubernetes.io/unschedulable
          operator: Exists
        - effect: NoSchedule
          key: node.kubernetes.io/network-unavailable
          operator: Exists
        - effect: NoExecute
          key: node.kubernetes.io/unreachable
          operator: Exists
    
  2. Jalankan kubectl apply -f hostprocess.yaml untuk menyebarkan kontainer proses host Windows (HPC) di simpul Windows yang ditentukan.

  3. Gunakan kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. Anda dapat menjalankan perintah PowerShell apa pun di dalam kontainer HPC untuk mengakses simpul Windows.

Catatan

Anda perlu mengalihkan folder akar ke C:\ di dalam kontainer HPC untuk mengakses file di simpul Windows.

SSH menggunakan Azure Bastion untuk Windows

Jika simpul proksi Linux Anda tidak dapat dijangkau, menggunakan Azure Bastion sebagai proksi adalah alternatif. Metode ini mengharuskan Anda menyiapkan host Azure Bastion untuk jaringan virtual tempat kluster berada. Lihat Koneksi dengan Azure Bastion untuk detail selengkapnya.

SSH menggunakan IP privat dari API AKS (pratinjau)

Jika Anda tidak memiliki akses ke API Kubernetes, Anda bisa mendapatkan akses ke properti seperti Node IP dan Node Name melalui API kumpulan agen AKS (pratinjau), (tersedia pada versi 07-02-2023 pratinjau atau di atasnya) untuk terhubung ke simpul AKS.

Penting

Fitur pratinjau AKS tersedia berdasarkan layanan mandiri. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau AKS sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:

Membuat koneksi shell interaktif ke simpul menggunakan alamat IP

Untuk kenyamanan, simpul AKS diekspos pada jaringan virtual kluster melalui alamat IP privat. Namun, Anda harus berada di jaringan virtual kluster untuk SSH ke dalam simpul. Jika Anda belum memiliki lingkungan yang dikonfigurasi, Anda dapat menggunakan Azure Bastion untuk membuat proksi tempat Anda dapat melakukan SSH ke node kluster. Pastikan Azure Bastion disebarkan di jaringan virtual yang sama dengan kluster.

  1. Dapatkan IP privat menggunakan az aks machine list perintah , yang menargetkan semua VM dalam kumpulan simpul tertentu dengan --nodepool-name bendera .

    az aks machine list --resource-group myResourceGroup  --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
    

    Contoh output berikut menunjukkan alamat IP internal semua simpul di kumpulan simpul:

    Name                               Ip           Family
    ---------------------------------  -----------  -----------
    aks-nodepool1-33555069-vmss000000  10.224.0.5   IPv4
    aks-nodepool1-33555069-vmss000001  10.224.0.6   IPv4
    aks-nodepool1-33555069-vmss000002  10.224.0.4   IPv4
    

    Untuk menargetkan simpul tertentu di dalam kumpulan simpul, gunakan --machine-name bendera:

    az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
    

    Contoh output berikut menunjukkan alamat IP internal dari semua simpul yang ditentukan:

    Name                               Ip         Family
    ---------------------------------  -----------  -----------
    aks-nodepool1-33555069-vmss000000  10.224.0.5   IPv4
    
  2. SSH ke simpul menggunakan alamat IP privat yang Anda peroleh di langkah sebelumnya. Langkah ini hanya berlaku untuk komputer Linux. Untuk komputer Windows, lihat Koneksi dengan Azure Bastion.

    ssh -i /path/to/private_key.pem azureuser@10.224.0.33
    

Langkah berikutnya

Jika membutuhkan lebih banyak data pemecahan masalah, Anda dapat melihat log kubelet atau melihat log sarana kontrol Kube.

Untuk mempelajari tentang mengelola kunci SSH Anda, lihat Mengelola konfigurasi SSH.