Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
W tym artykule opisano dwie opcje bezpiecznego połączenia z węzłami AKS Linux i węzłami Windows. 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 informacje o prywatnych 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ć lub prywatnego adresu IP hosta.
Uzyskiwanie dostępu do węzłów za pomocą interfejsu API platformy Kubernetes
Ta metoda wymaga 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ć te kroki, musisz Azure CLI w wersji 2.0.64 lub nowszej. Uruchom polecenie , aby sprawdzić wersję. Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI.
Wykonaj te kroki, jeśli nie masz klucza SSH. Utwórz klucz SSH w zależności od obrazu systemu operacyjnego węzła dla macOS i Linux lub Windows. Zapisz parę kluczy w formacie OpenSSH i unikaj nieobsługiwanych formatów, takich jak . 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 swojego węzła przy użyciu lub prywatnego adresu IP. Użytkownicy Windows powinni przejść do sekcji serwera proxy dla Windows Server, aby znaleźć obejście problemu z używaniem SSH przez serwer proxy.
Nawiązywanie połączenia za pomocą debugowania narzędzia kubectl
Aby utworzyć interaktywne połączenie powłoki, użyj polecenia, aby uruchomić uprzywilejowany kontener na węźle.
Aby wyświetlić listę węzłów, użyj polecenia :
kubectl get nodes -o widePrzykł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 DatacenterUżyj polecenia , 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/azurelinux/busybox:1.36Przykł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 komunikować się z sesją węzła, uruchamiając polecenie w uprzywilejowanym kontenerze.
Zamykanie trybu debugowania kubectl
Po zakończeniu pracy z węzłem wprowadź polecenie , aby zakończyć interakcyjną sesję powłoki. Po zamknięciu interaktywnej sesji kontenera usuń zasobnik debugowania używany z .
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
Windows Server połączenie serwera proxy dla protokołu SSH
Wykonaj następujące kroki jako obejście, aby nawiązać połączenie z protokołem SSH w węźle Windows Server.
Tworzenie serwera proxy
Obecnie nie można nawiązać połączenia z węzłem Windows Server bezpośrednio przy użyciu kubectl debug. Zamiast tego należy najpierw nawiązać połączenie z innym węzłem w klastrze przy użyciu kubectl, a następnie połączyć się z węzłem 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 polecenia . Aby uzyskać więcej informacji, wykonaj poprzednie kroki w sekcji kubectl. Utwórz połączenie SSH z węzłem 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 Windows Server.
Ważne
Poniższe kroki tworzenia połączenia SSH z węzłem Windows Server z innego węzła mogą być używane tylko w przypadku utworzenia klastra usługi AKS przy użyciu Azure CLI z parametrem --generate-ssh-keys. Jeśli zamiast tego chcesz użyć własnych kluczy SSH, możesz użyć polecenia 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 Azure Bastion, aby nawiązać połączenie.
Użyj polecenia , 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/azurelinux/busybox:1.36Przykł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 polecenia , aby uzyskać nazwę zasobnika uruchomionego przez .
kubectl get podsPrzykładowe dane wyjściowe:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21sW przykładowych danych wyjściowych jest nazwą zasobnika uruchomionego przez .
Użyj polecenia , aby otworzyć połączenie z wdrożonym zasobnikiem.
kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22Przykładowe dane wyjściowe:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22Poprzedni przykład rozpoczyna przekazywanie ruchu sieciowego z portu na komputerze deweloperskim do portu na wdrożonym zasobniku. W przypadku używania polecenia do otwierania połączenia i przesyłania dalej ruchu sieciowego połączenie pozostaje otwarte do momentu zatrzymania polecenia.
Otwórz nowy terminal i uruchom polecenie
kubectl get nodes, aby wyświetlić wewnętrzny adres IP węzła Windows Server:kubectl get nodes -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 aksnpwin000000 10.224.0.62W poprzednim przykładzie
10.224.0.62jest wewnętrznym adresem IP węzła Windows Server.Utwórz połączenie SSH z węzłem Windows Server przy użyciu wewnętrznego adresu IP i połącz się z portem
22za pośrednictwem portu2022na 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 węzła serwera Windows Server.ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62Przykł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)? yesUwaga
Jeśli wolisz używać uwierzytelniania za pomocą hasła, dołącz parametr . 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
Użyj kontenera procesów hosta do uzyskania dostępu do węzła Windows
Uruchom następujący skrypt, aby utworzyć plik . W skrypcie zastąp
AKSWINDOWSNODENAMEnazwą węzła usługi AKS Windows.Ta specyfikacja używa obrazu podstawowego nanoserver. Obraz podstawowy nie ma programu PowerShell, ale ponieważ działa jako kontener procesów hosta (HPC), program PowerShell jest dostępny na podstawowej maszynie wirtualnej.
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: ExistsUruchom
kubectl apply -f hostprocess.yaml, aby wdrożyć Windows HPC w określonym węźle Windows.Użyj witryny .
Aby uzyskać dostęp do węzła Windows, można uruchomić dowolne polecenia programu PowerShell wewnątrz kontenera HPC.
Uwaga
Należy przełączyć folder główny na C:\ wewnątrz kontenera HPC, aby uzyskać dostęp do plików w węźle Windows.
Protokół SSH z Azure Bastion
Jeśli węzeł serwera proxy systemu Linux nie jest osiągalny, użycie Azure Bastion jako serwera proxy jest alternatywą. Ta metoda wymaga skonfigurowania hosta Azure Bastion dla sieci wirtualnej, w której znajduje się klaster. Aby uzyskać więcej informacji, zobacz Połączenie z Azure Bastion.
Protokół SSH z prywatnymi adresami IP z sieci wirtualnej klastra
Dla wygody węzły AKS są dostępne w sieci wirtualnej klastra poprzez prywatne adresy IP. Musisz jednak być w wirtualnej sieci klastra, aby połączyć się przez SSH z węzłem.
Jeśli nie masz dostępu do interfejsu API platformy Kubernetes, możesz uzyskać dostęp do właściwości, takich jak i za pośrednictwem interfejsu API puli agentów usługi AKS , (dostępnego w stabilnych wersjach lub nowszych), aby nawiązać połączenie z węzłami usługi AKS. Uzyskaj prywatne adresy IP, używając polecenia , skierowanego na wszystkie maszyny wirtualne w określonej puli węzłów, z flagą .
az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o tableW 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 IPv4Aby skierować działania na określony węzeł w puli węzłów, użyj flagi .
az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o tableNastępujące przykładowe dane wyjściowe pokazują wewnętrzny adres IP określonego węzła:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4Połącz się z węzłem przez SSH, używając prywatnego adresu IP uzyskanego w poprzednim kroku. Ten krok dotyczy tylko węzłów systemu Linux.
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 kubelet oraz dzienniki płaszczyzny kontrolnej Kubernetes.
Aby dowiedzieć się więcej na temat zarządzania kluczami SSH, zobacz Zarządzanie konfiguracją protokołu SSH.