Sdílet prostřednictvím


Připojení k uzlům clusteru Azure Kubernetes Service (AKS) pro účely údržby 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 na uzlech AKS na Linuxu a Windows pomocí dvou možností, které jsou uvedeny 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 buď kubectl debug, 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 az --version ke kontrole verze. Pokud potřebujete instalovat nebo upgradovat, podívejte se na Install 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řipojte se pomocí příkazu kubectl debug

Pokud chcete vytvořit interaktivní připojení, použijte kubectl debug příkaz pro 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í.

    Note

    Můžete pracovat s relací uzlu spuštěním chroot /host z kontejneru s oprávněními.

Ukončení režimu ladění kubectl

Až s uzlem skončíte, zadejte exit příkaz, kterým ukončíte interaktivní relaci shellu. Po ukončení interaktivní relace kontejneru odstraňte ladicí pod 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. Postupujte podle výše uvedených kroků v sekci kubectl pro více informací. 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.

Important

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.

Note

Pokud je váš linuxový proxy uzel nefunkč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í příkazu kubectl get pods získejte název podu spuštěného kubectl debug.

    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. Pomocí příkazu kubectl port-forward otevřete připojení k nasazenému 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
    

    Note

    Pokud raději používáte ověřování heslem, zahrňte parametr -o PreferredAuthentications=password. Napří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ého procesu pro přístup k uzlu Windows

  1. Spuštěním následujícího skriptu vytvořte hostprocess.yaml. Ve skriptu nahraďte AKSWINDOWSNODENAME názvem uzlu Windows AKS.

    Tato specifikace používá základní image nanoserveru. Základní image nemá PowerShell, ale protože běží jako kontejner hostitelských procesů (HPC), powershell je k dispozici na základním virtuálním počítači.

    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: Exists
    
  2. Spusťte kubectl apply -f hostprocess.yaml k nasazení prostředí 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.

Note

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

Pokud nemáte přístup k rozhraní Kubernetes API, můžete získat přístup k vlastnostem, jako jsou Node IP a Node Name prostřednictvím API fondu agentů AKS, (dostupné ve stabilních verzích 07-01-2024 nebo vyšších) pro připojení k uzlům AKS.

Vytvoření interaktivního shellového připojení 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. Získejte privátní IP adresy pomocí příkazu az aks machine list, zacílením na všechny virtuální počítače v konkrétním fondu uzlů pomocí příznaku --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í 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.