Připojení k uzlům clusteru Azure Kubernetes Service (AKS) kvůli údržbě nebo řešení potíží
V průběhu životního cyklu clusteru Azure Kubernetes Service (AKS) budete nakonec potřebovat přímý přístup k uzlu AKS. Tento přístup může být určený pro operace údržby, shromažďování protokolů nebo řešení potíží.
K uzlu přistupujete prostřednictvím ověřování, které metody se liší v závislosti na operačním systému uzlu a metodě připojení. Bezpečně se ověřujete v uzlech AKS s Linuxem a Windows prostřednictvím dvou možností probíraných v tomto článku. Jeden vyžaduje, abyste měli přístup k rozhraní API Kubernetes a druhý je prostřednictvím rozhraní AKS ARM API, které poskytuje přímé informace o privátníCH IP adresách. Z bezpečnostních důvodů nejsou uzly AKS přístupné z internetu. Pokud se chcete připojit přímo k jakýmkoli uzlům AKS, musíte použít kubectl debug
buď privátní IP adresu hostitele, nebo privátní IP adresu hostitele.
Přístup k uzlům pomocí rozhraní Kubernetes API
Tato metoda vyžaduje použití kubectl debug
příkazu.
Než začnete
V této příručce se dozvíte, jak vytvořit připojení k uzlu AKS a aktualizovat klíč SSH clusteru AKS. Pokud chcete postupovat podle kroků, musíte použít Azure CLI, které podporuje verzi 2.0.64 nebo novější. Spusťte kontrolu az --version
verze. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
Pokud nemáte klíč SSH, proveďte tyto kroky. Vytvořte klíč SSH v závislosti na imagi operačního systému Node pro macOS a Linux nebo Windows. Ujistěte se, že jste pár klíčů uložili ve formátu OpenSSH, vyhněte se nepodporovaným formátům, například .ppk
. Dále si přečtěte informace o správě konfigurace SSH a přidejte klíč do clusteru.
Linux a macOS
Uživatelé s Linuxem a macOS mají přístup ke svému uzlu pomocí kubectl debug
nebo jejich privátní IP adresy. Uživatelé Windows by měli přeskočit do části Proxy Windows Serveru, kde najdete alternativní řešení pro SSH přes proxy server.
Připojení pomocí ladění kubectl
Pokud chcete vytvořit interaktivní připojení prostředí, použijte kubectl debug
příkaz ke spuštění privilegovaného kontejneru na vašem uzlu.
Pokud chcete zobrazit seznam uzlů, použijte příkaz
kubectl get nodes
:kubectl get nodes -o wide
Ukázkový výstup:
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
Pomocí příkazu spusťte v uzlu privilegovaný kontejner a připojte se k němu.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Ukázkový výstup:
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:/#
Teď máte přístup k uzlu prostřednictvím privilegovaného kontejneru jako podu ladění.
Poznámka:
Relaci uzlu můžete interagovat spuštěním
chroot /host
z privilegovaného kontejneru.
Ukončení režimu ladění kubectl
Až s uzlem skončíte, zadejte exit
příkaz, kterým ukončíte interaktivní relaci prostředí. Po zavření interaktivní relace kontejneru odstraňte pod ladění použitý s kubectl delete pod
.
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
Připojení proxy serveru windows pro SSH
Postupujte podle těchto kroků jako alternativní řešení pro připojení pomocí SSH na uzlu Windows Serveru.
Vytvoření proxy serveru
V tuto chvíli se nemůžete připojit k uzlu Windows Serveru přímo pomocí kubectl debug
. Místo toho se musíte nejprve připojit k jinému uzlu v clusteru a kubectl
pak se z něj připojit k uzlu Windows Serveru pomocí SSH.
Pokud se chcete připojit k jinému uzlu v clusteru, použijte kubectl debug
příkaz. Další informace najdete v části kubectl podle výše uvedených kroků. Vytvořte připojení SSH k uzlu Windows Serveru z jiného uzlu pomocí klíčů SSH zadaných při vytváření clusteru AKS a interní IP adresy uzlu Windows Serveru.
Důležité
Následující kroky pro vytvoření připojení SSH k uzlu Windows Serveru z jiného uzlu je možné použít pouze v případě, že jste cluster AKS vytvořili pomocí Azure CLI s parametrem --generate-ssh-keys
. Pokud chcete místo toho použít vlastní klíče SSH, můžete použít az aks update
ke správě klíčů SSH v existujícím clusteru AKS. Další informace najdete v tématu správa přístupu k uzlu SSH.
Poznámka:
Pokud je váš linuxový proxy uzel spuštěný nebo nereaguje, použijte k připojení metodu Azure Bastion .
kubectl debug
Pomocí příkazu spusťte privilegovaný kontejner na uzlu proxy (Linux) a připojte se k němu.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Ukázkový výstup:
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:/#
Otevřete nové okno terminálu a pomocí
kubectl get pods
příkazu získejte název podu, kterýkubectl debug
začal .kubectl get pods
Ukázkový výstup:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21s
V ukázkovém výstupu je node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx názvem podu, který
kubectl debug
spustil .kubectl port-forward
Pomocí příkazu otevřete připojení k nasazeným podu:kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
Ukázkový výstup:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22
Předchozí příklad začíná směrovat síťový provoz z portu
2022
na vývojovém počítači na port22
na nasazeném podu. Při použitíkubectl port-forward
k otevření připojení a přesměrování síťového provozu zůstane připojení otevřené, dokud příkaz nezastavítekubectl port-forward
.Otevřete nový terminál a spuštěním příkazu
kubectl get nodes
zobrazte interní IP adresu uzlu Windows Serveru:kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
Ukázkový výstup:
NAME INTERNAL_IP aks-nodepool1-19409214-vmss000003 10.224.0.8
V předchozím příkladu je 10.224.0.62 interní IP adresa uzlu Windows Serveru.
Vytvořte připojení SSH k uzlu Windows Serveru pomocí interní IP adresy a připojte se k portu přes port
22
2022
na vývojovém počítači. Výchozí uživatelské jméno pro uzly AKS je azureuser. Přijměte výzvu, abyste mohli pokračovat v připojení. Pak se zobrazí výzva bash vašeho uzlu Windows Serveru:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
Ukázkový výstup:
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
Poznámka:
Pokud raději používáte ověřování heslem, zahrňte parametr
-o PreferredAuthentications=password
. Příklad:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
Použití kontejneru hostitelských procesů pro přístup k uzlu Windows
Vytvořte
hostprocess.yaml
následující obsah a nahraďteAKSWINDOWSNODENAME
názvem uzlu AKS pro 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
Spusťte
kubectl apply -f hostprocess.yaml
nasazení kontejneru hostitelských procesů Systému Windows (HPC) v zadaném uzlu Windows.Použijte
kubectl exec -it [HPC-POD-NAME] -- powershell
.Pro přístup k uzlu Windows můžete v kontejneru PROSTŘEDÍ HPC spustit všechny příkazy PowerShellu.
Poznámka:
Pokud chcete získat přístup k souborům v uzlu Windows, musíte přepnout kořenovou složku do C:\
kontejneru prostředí HPC.
SSH s využitím služby Azure Bastion pro Windows
Pokud není dostupný váš linuxový proxy uzel, můžete použít Azure Bastion jako proxy server jako alternativu. Tato metoda vyžaduje, abyste pro virtuální síť, ve které se nachází cluster, nastavili hostitele služby Azure Bastion. Další podrobnosti najdete v tématu Připojení ke službě Azure Bastion .
SSH s využitím privátních IP adres z rozhraní API AKS (Preview)
Pokud nemáte přístup k rozhraní Kubernetes API, můžete získat přístup k vlastnostem, jako Node IP
je rozhraní Node Name
API fondu agentů AKS (Preview) (dostupné ve verzích 07-02-2023
Preview nebo novějších), abyste se mohli připojit k uzlům AKS.
Důležité
Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:
Vytvoření interaktivního připojení prostředí k uzlu pomocí IP adresy
Pro usnadnění přístupu se uzly AKS zveřejňují ve virtuální síti clusteru prostřednictvím privátních IP adres. Musíte ale být ve virtuální síti clusteru, abyste se k uzlu mohli připojit pomocí protokolu SSH. Pokud ještě nemáte nakonfigurované prostředí, můžete pomocí služby Azure Bastion vytvořit proxy server, ze kterého můžete SSH připojit k uzlům clusteru. Ujistěte se, že je služba Azure Bastion nasazená ve stejné virtuální síti jako cluster.
Pomocí příkazu získejte privátní IP adresy
az aks machine list
, které cílí na všechny virtuální počítače v konkrétním fondu uzlů s příznakem--nodepool-name
.az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
Následující příklad výstupu ukazuje interní IP adresy všech uzlů ve fondu uzlů:
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
Pokud chcete cílit na konkrétní uzel ve fondu uzlů, použijte příznak
--machine-name
:az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
Následující příklad výstupu ukazuje interní IP adresu všech zadaných uzlů:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4
Připojte se k uzlu přes SSH pomocí privátní IP adresy, kterou jste získali v předchozím kroku. Tento krok platí jenom pro počítače s Linuxem. Informace o počítačích s Windows najdete v tématu Připojení ke službě Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
Další kroky
Pokud potřebujete další data pro řešení potíží, můžete zobrazit protokoly kubeletu nebo zobrazit protokoly řídicí roviny Kubernetes.
Další informace o správě klíčů SSH najdete v tématu Správa konfigurace SSH.
Azure Kubernetes Service