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 můžou přes SSH přistupovat ke svému uzlu pomocí kubectl debug nebo 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.

SSH s využitím 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.

  1. 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
    
  2. 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 kubectlpak 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 .

  1. 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:/#
    
  2. Otevřete nové okno terminálu a pomocí kubectl get pods příkazu získejte název podu, který kubectl debugzač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 debugspustil .

  3. 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 port 22 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íte kubectl port-forward .

  4. 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.

  5. Vytvořte připojení SSH k uzlu Windows Serveru pomocí interní IP adresy a připojte se k portu přes port 222022 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

  1. Vytvořte hostprocess.yaml následující obsah a nahraďte AKSWINDOWSNODENAME 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
    
  2. Spusťte kubectl apply -f hostprocess.yaml nasazení kontejneru hostitelských procesů Systému Windows (HPC) v zadaném uzlu Windows.

  3. Použijte kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. 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í se službou 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.

  1. 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
    
  2. 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í se službou 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.