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íží.

Tento článek popisuje dvě možnosti zabezpečeného připojení s uzly AKS v linuxových a windowsových uzlech. 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ď , nebo privátní IP adresu hostitele.

Přístup k uzlům pomocí rozhraní Kubernetes API

Tato metoda vyžaduje příkaz.

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 těchto kroků, potřebujete Azure CLI verze 2.0.64 nebo novější. Spusťte ke kontrole verze. Pokud potřebujete nainstalovat nebo upgradovat, 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 uzlu pro macOS a Linux nebo Windows. Uložte pár klíčů ve formátu OpenSSH a vyhněte se nepodporovaným formátům, například . 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í nebo jejich privátní IP adresy. Windows by uživatelé měli přeskočit do části Windows Server proxy, kde najdete alternativní řešení pro SSH přes proxy server.

Připojte se pomocí kubectl debug

Pokud chcete vytvořit interaktivní připojení, použijte 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 -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. 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/azurelinux/busybox:1.36
    

    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

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

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

Až s uzlem skončíte, zadejte 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 node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx

Proxy připojení pro SSH na Windows Server.

Postupujte podle těchto kroků jako alternativní řešení pro připojení pomocí SSH na Windows Server uzlu.

Vytvoření proxy serveru

V tuto chvíli se nemůžete připojit k uzlu Windows Server přímo pomocí kubectl debug. Místo toho se musíte nejprve připojit k jinému uzlu v clusteru pomocí kubectl a pak se připojit k uzlu Windows Server z daného uzlu pomocí SSH.

Pokud se chcete připojit k jinému uzlu v clusteru, použijte příkaz. Další informace najdete v předchozích krocích v části kubectl. Vytvořte připojení SSH k uzlu Windows Server z jiného uzlu pomocí klíčů SSH zadaných při vytváření clusteru AKS a interní IP adresy uzlu Windows Server.

Důležité

Následující kroky pro vytvoření připojení SSH k uzlu Windows Server 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 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áš proxy uzel Linuxu nefunkční a nereaguje, použijte k připojení metodu Azure Bastion.

  1. 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/azurelinux/busybox:1.36
    

    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 získejte název podu spuštěného .

    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 název podu zahájeného .

  3. Pomocí příkazu 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 na vývojovém počítači na port na nasazeném podu. Při použití 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 .

  4. Otevřete nový terminál a spuštěním příkazu kubectl get nodes zobrazte interní IP adresu uzlu Windows Server:

    kubectl get nodes -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
    aksnpwin000000                      10.224.0.62
    

    V předchozím příkladu je 10.224.0.62 interní IP adresou uzlu Windows Server.

  5. Pomocí interní IP adresy vytvořte připojení SSH k uzlu Windows Server a připojte se k portu 22 přes port 2022 ve 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 Windows Server uzlu:

    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 . 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 procesu hostitele pro přístup k uzlu Windows

  1. Spuštěním následujícího skriptu vytvořte . 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. Spuštěním příkazu kubectl apply -f hostprocess.yaml nasaďte Windows prostředí HPC v zadaném uzlu Windows.

  3. Použijte .

  4. V kontejneru HPC můžete spustit libovolné příkazy PowerShellu pro přístup k Windows uzlu.

Poznámka

Pro přístup k souborům v uzlu Windows musíte přepnout kořenovou složku na C:\ uvnitř kontejneru PROSTŘEDÍ HPC.

SSH s pomocí Azure Bastion

Pokud není váš proxy uzel Linuxu dostupný, můžete použít Azure Bastion jako proxy server jako alternativu. Tato metoda vyžaduje, abyste nastavili hostitele Azure Bastion pro virtuální síť, ve které se cluster nachází. Další podrobnosti najdete v tématu Pojení pomocí Azure Bastion.

SSH s privátními IP adresami z virtuální sítě clusteru

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.

  1. Pokud nemáte přístup k rozhraní Kubernetes API, můžete získat přístup k vlastnostem, jako jsou a prostřednictvím API fondu agentů AKS, (dostupné ve stabilních verzích nebo vyšších) pro připojení k uzlům AKS. Získejte privátní IP adresy pomocí příkazu , zacílením na všechny virtuální počítače v konkrétním fondu uzlů pomocí příznaku .

    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 :

    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 zadaného uzlu:

    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 uzly Linuxu.

    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.