Nawiązywanie połączenia z węzłami klastra usługi Azure Kubernetes Service na potrzeby konserwacji lub rozwiązywania problemów
W całym cyklu życia klastra usługi Azure Kubernetes Service (AKS) należy ostatecznie uzyskać bezpośredni dostęp do węzła usługi AKS. Ten dostęp może być przeznaczony dla operacji konserwacji, zbierania dzienników lub rozwiązywania problemów.
Uzyskujesz dostęp do węzła za pośrednictwem uwierzytelniania, które metody różnią się w zależności od systemu operacyjnego Node i metody połączenia. Bezpiecznie uwierzytelniasz się w węzłach AKS Linux i Windows za pomocą dwóch opcji omówionych w tym artykule. Jeden z nich wymaga dostępu do interfejsu API kubernetes, a drugi jest za pośrednictwem interfejsu API ARM usługi AKS, który zapewnia bezpośrednie prywatne informacje o adresach IP. Ze względów bezpieczeństwa węzły usługi AKS nie są uwidocznione w Internecie. Zamiast tego, aby nawiązać bezpośrednie połączenie z dowolnymi węzłami usługi AKS, musisz użyć kubectl debug
prywatnego adresu IP lub prywatnego adresu IP hosta.
Uzyskiwanie dostępu do węzłów przy użyciu interfejsu API platformy Kubernetes
Ta metoda wymaga użycia kubectl debug
polecenia.
Zanim rozpoczniesz
W tym przewodniku pokazano, jak utworzyć połączenie z węzłem usługi AKS i zaktualizować klucz SSH klastra usługi AKS. Aby wykonać poniższe kroki, musisz użyć interfejsu wiersza polecenia platformy Azure obsługującego wersję 2.0.64 lub nowszą. Uruchom polecenie az --version
, aby sprawdzić wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Wykonaj te kroki, jeśli nie masz klucza SSH. Utwórz klucz SSH w zależności od obrazu systemu operacyjnego Node, dla systemów macOS i Linux lub Windows. Pamiętaj, aby zapisać parę kluczy w formacie OpenSSH, unikaj nieobsługiwanych formatów, takich jak .ppk
. Następnie zapoznaj się z tematem Zarządzanie konfiguracją protokołu SSH, aby dodać klucz do klastra.
Linux i macOS
Użytkownicy systemów Linux i macOS mogą uzyskiwać dostęp do węzła przy użyciu kubectl debug
lub prywatnego adresu IP. Użytkownicy systemu Windows powinni przejść do sekcji Serwer proxy systemu Windows Server, aby obejść problem z protokołem SSH za pośrednictwem serwera proxy.
Nawiązywanie połączenia przy użyciu debugowania kubectl
Aby utworzyć interaktywne połączenie powłoki, użyj kubectl debug
polecenia , aby uruchomić uprzywilejowany kontener w węźle.
Aby wyświetlić listę węzłów, użyj
kubectl get nodes
polecenia :kubectl get nodes -o wide
Przykładowe dane wyjściowe:
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
Użyj polecenia ,
kubectl debug
aby uruchomić uprzywilejowany kontener w węźle i nawiązać z nim połączenie.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Przykładowe dane wyjściowe:
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:/#
Masz teraz dostęp do węzła za pośrednictwem uprzywilejowanego kontenera jako zasobnika debugowania.
Uwaga
Możesz wchodzić w interakcje z sesją węzła, uruchamiając polecenie
chroot /host
z uprzywilejowanego kontenera.
Zamykanie trybu debugowania kubectl
Po zakończeniu pracy z węzłem wprowadź polecenie , aby zakończyć sesję exit
interakcyjnej powłoki. Po zamknięciu interakcyjnej sesji kontenera usuń zasobnik debugowania używany z kubectl delete pod
programem .
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
Połączenie serwera proxy systemu Windows Server dla protokołu SSH
Wykonaj następujące kroki jako obejście, aby nawiązać połączenie z protokołem SSH w węźle systemu Windows Server.
Tworzenie serwera proxy
Obecnie nie można nawiązać bezpośredniego połączenia z węzłem systemu Windows Server przy użyciu polecenia kubectl debug
. Zamiast tego należy najpierw nawiązać połączenie z innym węzłem kubectl
w klastrze za pomocą polecenia , a następnie nawiązać połączenie z węzłem systemu Windows Server z tego węzła przy użyciu protokołu SSH.
Aby nawiązać połączenie z innym węzłem w klastrze, użyj kubectl debug
polecenia . Aby uzyskać więcej informacji, wykonaj powyższe kroki w sekcji kubectl. Utwórz połączenie SSH z węzłem systemu Windows Server z innego węzła przy użyciu kluczy SSH podanych podczas tworzenia klastra usługi AKS i wewnętrznego adresu IP węzła systemu Windows Server.
Ważne
Poniższe kroki tworzenia połączenia SSH z węzłem systemu Windows Server z innego węzła mogą być używane tylko w przypadku utworzenia klastra usługi AKS przy użyciu interfejsu wiersza polecenia platformy Azure z parametrem --generate-ssh-keys
. Jeśli zamiast tego chcesz użyć własnych kluczy SSH, możesz użyć polecenia az aks update
do zarządzania kluczami SSH w istniejącym klastrze usługi AKS. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do węzła SSH.
Uwaga
Jeśli węzeł serwera proxy systemu Linux nie działa lub nie odpowiada, użyj metody usługi Azure Bastion , aby nawiązać połączenie.
Użyj polecenia ,
kubectl debug
aby uruchomić uprzywilejowany kontener w węźle serwera proxy (Linux) i nawiązać z nim połączenie.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Przykładowe dane wyjściowe:
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:/#
Otwórz nowe okno terminalu i użyj
kubectl get pods
polecenia , aby uzyskać nazwę zasobnika uruchomionego przezkubectl debug
.kubectl get pods
Przykładowe dane wyjściowe:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21s
W przykładowych danych wyjściowych węzeł-debugger-aks-nodepool1-37663765-vmss000000-bkmmx jest nazwą zasobnika uruchomionego przez
kubectl debug
polecenie .kubectl port-forward
Użyj polecenia , aby otworzyć połączenie z wdrożonym zasobnikiem:kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
Przykładowe dane wyjściowe:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22
Poprzedni przykład rozpoczyna przekazywanie ruchu sieciowego z portu
2022
na komputerze deweloperskim do portu22
na wdrożonym zasobniku. W przypadku używaniakubectl port-forward
polecenia do otwierania połączenia i przesyłania dalej ruchu sieciowego połączenie pozostaje otwarte do momentu zatrzymaniakubectl port-forward
polecenia.Otwórz nowy terminal i uruchom polecenie
kubectl get nodes
, aby wyświetlić wewnętrzny adres IP węzła systemu Windows Server:kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
Przykładowe dane wyjściowe:
NAME INTERNAL_IP aks-nodepool1-19409214-vmss000003 10.224.0.8
W poprzednim przykładzie 10.224.0.62 jest wewnętrznym adresem IP węzła systemu Windows Server.
Utwórz połączenie SSH z węzłem systemu Windows Server przy użyciu wewnętrznego adresu IP i połącz się z portem
22
za pośrednictwem portu2022
na komputerze dewelopera. Domyślną nazwą użytkownika węzłów usługi AKS jest azureuser. Zaakceptuj monit, aby kontynuować połączenie. Następnie zostanie wyświetlony monit powłoki bash o węźle systemu Windows Server:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
Przykładowe dane wyjściowe:
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
Uwaga
Jeśli wolisz używać uwierzytelniania za pomocą hasła, dołącz parametr
-o PreferredAuthentications=password
. Na przykład:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
Uzyskiwanie dostępu do węzła systemu Windows przy użyciu kontenera procesów hosta
Utwórz
hostprocess.yaml
następującą zawartość i zastąp ciągAKSWINDOWSNODENAME
nazwą węzła systemu Windows usługi AKS.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
Uruchom polecenie
kubectl apply -f hostprocess.yaml
, aby wdrożyć kontener procesów hosta systemu Windows (HPC) w określonym węźle systemu Windows.Użyj witryny
kubectl exec -it [HPC-POD-NAME] -- powershell
.Aby uzyskać dostęp do węzła systemu Windows, możesz uruchomić dowolne polecenia programu PowerShell wewnątrz kontenera HPC.
Uwaga
Aby uzyskać dostęp do plików w węźle systemu Windows, należy przełączyć folder główny na C:\
wewnątrz kontenera HPC.
Protokół SSH przy użyciu usługi Azure Bastion dla systemu Windows
Jeśli węzeł proxy systemu Linux nie jest osiągalny, użycie usługi Azure Bastion jako serwera proxy jest alternatywą. Ta metoda wymaga skonfigurowania hosta usługi Azure Bastion dla sieci wirtualnej, w której znajduje się klaster. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z usługą Azure Bastion .
Protokół SSH przy użyciu prywatnych adresów IP z interfejsu API usługi AKS (wersja zapoznawcza)
Jeśli nie masz dostępu do interfejsu API platformy Kubernetes, możesz uzyskać dostęp do właściwości, takich jak Node IP
i Node Name
za pośrednictwem interfejsu API puli agentów usługi AKS (wersja zapoznawcza) (dostępnego w wersjach zapoznawczych lub nowszych 07-02-2023
), aby nawiązać połączenie z węzłami usługi AKS.
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Tworzenie interaktywnego połączenia powłoki z węzłem przy użyciu adresu IP
Dla wygody węzły usługi AKS są uwidocznione w sieci wirtualnej klastra za pośrednictwem prywatnych adresów IP. Należy jednak znajdować się w sieci wirtualnej klastra do połączenia SSH z węzłem. Jeśli nie masz jeszcze skonfigurowanego środowiska, możesz użyć usługi Azure Bastion do ustanowienia serwera proxy, z którego można nawiązać połączenie SSH z węzłami klastra. Upewnij się, że usługa Azure Bastion jest wdrożona w tej samej sieci wirtualnej co klaster.
Uzyskaj prywatne adresy IP przy użyciu
az aks machine list
polecenia , przeznaczone dla wszystkich maszyn wirtualnych w określonej puli węzłów z flagą--nodepool-name
.az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
W poniższych przykładowych danych wyjściowych przedstawiono wewnętrzne adresy IP wszystkich węzłów w puli węzłów:
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
Aby zastosować element docelowy określonego węzła w puli węzłów, użyj flagi
--machine-name
:az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
W poniższych przykładowych danych wyjściowych przedstawiono wewnętrzny adres IP wszystkich określonego węzła:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4
Połączenie SSH z węzłem przy użyciu prywatnego adresu IP uzyskanego w poprzednim kroku. Ten krok dotyczy tylko maszyn z systemem Linux. W przypadku maszyn z systemem Windows zobacz Nawiązywanie połączenia z usługą Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
Następne kroki
Jeśli potrzebujesz więcej danych dotyczących rozwiązywania problemów, możesz wyświetlić dzienniki kubeletu lub wyświetlić dzienniki płaszczyzny sterowania kubernetes.
Aby dowiedzieć się więcej na temat zarządzania kluczami SSH, zobacz Zarządzanie konfiguracją protokołu SSH.
Azure Kubernetes Service