Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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.
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 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ć kubectl debug 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 na węźle.
Aby wyświetlić listę węzłów, użyj
kubectl get nodespolecenia :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 ,
kubectl debugaby 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.0Przykł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
chroot /hostw uprzywilejowanym kontenerze.
Zamykanie trybu debugowania kubectl
Po zakończeniu pracy z węzłem wprowadź polecenie exit, aby zakończyć interakcyjną sesję powłoki. Po zamknięciu interaktywnej sesji kontenera usuń zasobnik debugowania używany z kubectl delete pod.
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, a następnie z tego węzła połączyć się z węzłem systemu Windows Server, korzystając z 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 Azure Bastion, aby nawiązać połączenie.
Użyj polecenia ,
kubectl debugaby 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.0Przykł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 podspolecenia , aby uzyskać nazwę zasobnika uruchomionego przezkubectl debug.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 node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx jest nazwą poda uruchomionego przez
kubectl debug.Użyj polecenia
kubectl port-forward, 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
2022na komputerze deweloperskim do portu22na wdrożonym zasobniku. W przypadku używaniakubectl port-forwardpolecenia do otwierania połączenia i przesyłania dalej ruchu sieciowego połączenie pozostaje otwarte do momentu zatrzymaniakubectl port-forwardpolecenia.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.8W 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
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 o węźle systemu 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
-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
Uruchom następujący skrypt, aby utworzyć
hostprocess.yamlplik . W skrypcie zastąp ciągAKSWINDOWSNODENAMEnazwą węzła systemu Windows usługi AKS.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 polecenie
kubectl apply -f hostprocess.yaml, aby wdrożyć narzędzie HPC systemu Windows 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
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 , (dostępnego w stabilnych wersjach lub nowszych), aby nawiązać połączenie z węzłami 07-01-2024 usługi AKS.
Tworzenie interaktywnego połączenia powłoki z węzłem przy użyciu adresu IP
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 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, używając polecenia
az aks machine list, skierowanego na wszystkie maszyny wirtualne 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 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
--machine-name.az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o tableNa poniższym przykładzie danych wyjściowych przedstawiono wewnętrzny adres IP wszystkich określonych węzłów.
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 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 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.