Bagikan melalui


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.

Artikel ini menjelaskan dua opsi untuk koneksi aman terhadap AKS Linux dan simpul Windows. 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 atau alamat IP privat host.

Mengakses simpul dengan API Kubernetes

Metode ini memerlukan 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-langkah ini, Anda memerlukan Azure CLI versi 2.0.64 atau yang lebih baru. Jalankan untuk memeriksa versi. Jika Anda perlu menginstal atau meningkatkan, lihat Install Azure CLI.

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

Linux dan macOS

Pengguna Linux dan macOS dapat mengakses simpul mereka menggunakan atau alamat IP privat mereka. Pengguna Windows harus melewati ke bagian proksi Windows Server untuk solusi SSH melalui proksi.

Menghubungkan dengan kubectl debug

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

  1. Untuk membuat daftar 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. Gunakan perintah untuk memulai kontainer dengan hak istimewa pada simpul Anda dan sambungkan ke kontainer tersebut.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/azurelinux/busybox:1.36
    

    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 yang berfungsi sebagai pod debugging.

    Catatan

    Anda dapat berinteraksi dengan sesi node dengan menjalankan dari kontainer istimewa.

Keluar dari mode debug kubectl

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

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 simpul Windows Server secara langsung dengan menggunakan kubectl debug. Sebagai gantinya, Anda harus terlebih dahulu terhubung ke node lain di kluster dengan kubectl, lalu menyambungkan ke simpul Windows Server dari simpul tersebut menggunakan SSH.

Untuk menyambungkan ke simpul lain di kluster, gunakan perintah . Untuk informasi selengkapnya, ikuti langkah-langkah sebelumnya 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 parameter --generate-ssh-keys. Jika Anda ingin menggunakan kunci SSH Anda sendiri, Anda dapat menggunakan untuk mengelola kunci SSH pada kluster AKS yang ada. Untuk informasi selengkapnya, lihat mengelola akses simpul SSH.

Catatan

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

  1. 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/azurelinux/busybox:1.36
    

    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 perintah untuk mendapatkan nama pod yang dimulai oleh .

    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, adalah nama pod yang dimulai oleh .

  3. 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 pada komputer pengembangan Anda ke port pada pod yang disebarkan. Saat menggunakan untuk membuka koneksi dan meneruskan lalu lintas jaringan, koneksi tetap terbuka hingga Anda menghentikan perintah.

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

    kubectl get nodes -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
    aksnpwin000000                      10.224.0.62
    

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

  5. Buat koneksi SSH ke simpul Windows Server menggunakan alamat IP internal, dan sambungkan ke port 22 melalui port 2022 di komputer pengembangan Anda. Nama pengguna default untuk simpul AKS adalah azureuser. Terima perintah untuk melanjutkan koneksi. Anda kemudian diberikan prompt 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 . Contohnya:

     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. Jalankan skrip berikut untuk membuat . Dalam skrip, ganti AKSWINDOWSNODENAME dengan nama simpul Windows AKS.

    Spesifikasi ini menggunakan gambar dasar nanoserver. Gambar dasar tidak memiliki PowerShell, tetapi karena berjalan sebagai kontainer proses host (HPC), PowerShell tersedia di VM yang mendasarinya.

    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/nanoserver:ltsc2022 # Use nanoserver: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 HPC Windows dalam simpul Windows yang ditentukan.

  3. Gunakan .

  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 dengan Azure Bastion

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 Hubungkan dengan Azure Bastion untuk detail selengkapnya.

Melakukan koneksi SSH menggunakan alamat IP privat dari jaringan virtual kluster

Untuk kenyamanan, simpul AKS diekspos pada jaringan virtual kluster melalui alamat IP privat. Namun, Anda harus berada di jaringan virtual kluster untuk melakukan SSH ke simpul.

  1. Jika Anda tidak memiliki akses ke API Kubernetes, Anda bisa mendapatkan akses ke properti seperti dan melalui API kumpulan agen AKS , (tersedia pada versi stabil atau di atasnya) untuk terhubung ke node AKS. Dapatkan IP privat menggunakan perintah , menargetkan semua VM dalam node pool tertentu dengan opsi .

    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 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 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 simpul Linux.

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

Langkah selanjutnya

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.