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.
Metode ini memerlukan penggunaan kubectl debug
perintah.
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.
Pengguna Linux dan macOS dapat 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.
Untuk membuat koneksi shell interaktif, gunakan kubectl debug
perintah untuk menjalankan kontainer istimewa pada simpul Anda.
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
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.
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
Ikuti langkah-langkah ini sebagai solusi untuk menyambungkan dengan SSH pada simpul Windows Server.
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.
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:/#
Buka jendela terminal baru dan gunakan
kubectl get pods
perintah untuk mendapatkan nama pod yang dimulai olehkubectl 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
.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 port22
pada pod yang disebarkan. Saat menggunakankubectl port-forward
untuk membuka sambungan dan meneruskan lalu lintas jaringan, sambungan tetap terbuka hingga Anda menghentikan perintahkubectl port-forward
.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.
Buat koneksi SSH ke simpul Windows Server menggunakan alamat IP internal, dan sambungkan ke port
22
melalui port2022
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
. Contohnya:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
Buat
hostprocess.yaml
dengan konten berikut dan gantiAKSWINDOWSNODENAME
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
Jalankan
kubectl apply -f hostprocess.yaml
untuk menyebarkan kontainer proses host Windows (HPC) di simpul Windows yang ditentukan.Gunakan
kubectl exec -it [HPC-POD-NAME] -- powershell
.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.
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 Menyambungkan dengan Azure Bastion untuk detail selengkapnya.
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:
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.
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
SSH ke simpul menggunakan alamat IP privat yang Anda peroleh di langkah sebelumnya. Langkah ini hanya berlaku untuk komputer Linux. Untuk komputer Windows, lihat Menyambungkan dengan Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
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.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: