Share via


連線 至 Azure 操作員 Nexus Kubernetes 叢集

在整個 Azure 操作員 Nexus Kubernetes 叢集生命週期中,您最終需要直接存取叢集節點。 此存取可能用於維護、記錄收集,或疑難排解作業。 您可以透過驗證來存取節點,其方法會因連線方法而有所不同。 您可以透過本文所討論的兩個選項,安全地對叢集節點進行驗證。 基於安全性考慮,叢集節點不會公開至因特網。 相反地,若要直接連線到叢集節點,您需要從 jumpbox 使用 kubectl debug 或主機的 IP 位址。

必要條件

  • 部署在 Azure 訂用帳戶中資源群組中的 Azure 操作員 Nexus Kubernetes 叢集。
  • 叢集節點的 SSH 私鑰。
  • 若要使用節點 IP 位址進行 SSH,您必須在與叢集節點相同的容器網路介面 (CNI) 網路上部署 Jumpbox VM。

透過適用於伺服器的 Azure Arc 存取叢集節點

此命令 az ssh arc 可讓用戶遠端訪問已連線到 Azure Arc 的叢集 VM。此方法是直接從命令行透過 SSH 連線到叢集節點的安全方式,使其成為遠端管理的快速且有效率的方法。

注意

操作員 Nexus Kubernetes 叢集節點預設為 Arc 連線的伺服器。

  1. 設定必要的變數。 以與 Azure 環境和 Nexus Kubernetes 叢集相關的實際值取代佔位符。

    RESOURCE_GROUP="myResourceGroup" # Resource group where the Nexus Kubernetes cluster is deployed
    CLUSTER_NAME="myNexusK8sCluster" # Name of the Nexus Kubernetes cluster
    SUBSCRIPTION_ID="<Subscription ID>" # Azure subscription ID
    ADMIN_USERNAME="azureuser" # Username for the cluster administrator (--admin-username parameter value used during cluster creation)
    SSH_PRIVATE_KEY_FILE="<vm_ssh_id_rsa>" # Path to the SSH private key file
    MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID --output tsv --query managedResourceGroupConfiguration.name)
    
  2. 取得可用的叢集節點名稱。

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'
    
  3. 範例輸出:

    "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs"
    "mynexusk8scluster-0b32128d-control-plane-qq5jm"
    
  4. 將叢集節點名稱設定為 VM_NAME 變數。

    VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    
  5. 執行下列命令以 SSH 連線到叢集節點。

    az ssh arc --subscription $SUBSCRIPTION_ID \
        --resource-group $MANAGED_RESOURCE_GROUP \
        --name $VM_NAME \
        --local-user $ADMIN_USERNAME \
        --private-key-file $SSH_PRIVATE_KEY_FILE
    

使用 Kube API 存取節點

這個方法需要使用 kubectl debug 命令。 此方法僅限於容器,而且可能會遺漏更廣泛的系統問題,不同於 SSH(使用 'az ssh arc' 或 direct IP),其提供完整的節點訪問控制。

透過適用於 Kubernetes 的 Azure Arc 存取 Kubernetes API

注意

當您建立 Nexus Kubernetes 叢集時,Nexus 會自動建立專用於儲存叢集資源的受控資源群組,在此群組中建立 Arc 連線的叢集資源。

若要存取叢集,您必須設定叢集連線 kubeconfig。 使用相關的 Microsoft Entra 實體登入 Azure CLI 之後,您可以取得 kubeconfig 從任何地方與叢集通訊的必要條件,即使是在圍住叢集的防火牆之外也一樣。

  1. 設定 CLUSTER_NAMERESOURCE_GROUPSUBSCRIPTION_ID 變數。

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. 使用和 az 儲存查詢受控資源群組 MANAGED_RESOURCE_GROUP

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. 下列命令會啟動 connectedk8s Proxy,可讓您連線到指定 Nexus Kubernetes 叢集的 Kubernetes API 伺服器。

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. 使用 kubectl 將要求傳送至叢集:

    kubectl get pods -A
    

    您現在應該會看到包含所有節點清單的叢集回應。

注意

如果您看到錯誤訊息「無法將存取令牌張貼至用戶端 ProxyFailed 以連線到 MSI」,您可能需要執行 az login 以向 Azure 重新驗證。

透過適用於 Kubernetes 的 Azure Arc 存取叢集節點

透過 Arc for Kubernetes 連線到叢集之後,您可以使用 命令連線到個別 Kubernetes 節點 kubectl debug ,以在節點上執行具特殊許可權的容器。

  1. 列出 Nexus Kubernetes 叢集中的節點:

    $> kubectl get nodes
    NAME                                             STATUS   ROLES           AGE    VERSION
    mynexusk8scluster-0b32128d-agentpool1-md-7h9t4   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-agentpool1-md-c6xbs   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-control-plane-qq5jm   Ready    <none>          124m   v1.24.9
    
  2. 在您的節點上啟動具特殊許可權的容器,並加以連線:

    $> kubectl debug node/mynexusk8scluster-0b32128d-agentpool1-md-7h9t4 -it --image=mcr.microsoft.com/cbl-mariner/base/core:2.0
    Creating debugging pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg with container debugger on node mynexusk8scluster-0b32128d-agentpool1-md-7h9t4.
    If you don't see a command prompt, try pressing enter.
    root [ / ]#
    

    此具特殊許可權的容器會提供節點的存取權。 在命令行上執行 ,以在叢集節點上執行 chroot /host 命令。

  3. 當您完成偵錯 Pod 時,請輸入 exit 命令以結束互動式殼層會話。 結束殼層之後,請務必刪除Pod:

    kubectl delete pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg 
    

使用 IP 位址與節點建立互動式殼層連接

從 Azure jumpbox 連線 至叢集節點

另一個安全地連線到 Azure 操作員 Nexus Kubernetes 叢集節點的選項,是設定從 Azure Jumpbox VM 直接存取叢集的 CNI 網路。 使用此方法,您可以透過 SSH 連線到叢集節點,也可以使用 檔案對叢集kubeconfig執行kubectl命令。

請連絡網路管理員,以設定從 Azure Jumpbox VM 到叢集 CNI 網路的直接連線。

從內部部署 Jumpbox 連線 至叢集節點

從內部部署 Jumpbox 內,建立叢集 CNI(容器網路介面)的直接存取權。 此直接存取可讓您透過 SSH 連線到叢集節點,並可讓您使用 kubeconfig 檔案執行kubectl命令。

請連絡您的網路管理員,以設定此直接連線到叢集的 CNI 網路。

叢集節點的IP位址

您必須先尋找節點的IP位址,才能連線到叢集節點。 您可以使用 Azure 入口網站 或 Azure CLI 找到節點的 IP 位址。

使用 Azure CLI

  1. 設定RESOURCE_GROUP、CLUSTER_NAME和SUBSCRIPTION_ID變數以符合您的環境。

    RESOURCE_GROUP="myResourceGroup"
    CLUSTER_NAME="myNexusK8sCluster"
    SUBSCRIPTION_ID="<Subscription ID>"
    
  2. 執行下列命令以取得節點的IP位址。

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[] | select(any(.networkAttachments[]; .networkAttachmentName == "defaultcni")) | {name: .name, ipv4Address: (.networkAttachments[] | select(.networkAttachmentName == "defaultcni").ipv4Address)}'
    
  3. 以下是命令的範例輸出。

    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4",
      "ipv4Address": "10.5.54.47"
    }
    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs",
      "ipv4Address": "10.5.54.48"
    }
    {
      "name": "mynexusk8scluster-0b32128d-control-plane-qq5jm",
      "ipv4Address": "10.5.54.46"
    }
    

使用 Azure 入口網站

若要尋找適用於 SSH 的 VM IP 位址,請遵循下列步驟:

  1. 移至 Azure 入口網站 並使用您的使用者名稱和密碼登入。
  2. 在搜尋方塊中輸入 『Kubernetes Cluster (Operator Nexus)』,然後從結果清單中選取 『Kubernetes Cluster』 服務。

流覽 Nexus Kubernetes 服務的螢幕快照。

  1. 尋找您需要使用搜尋的特定 「Nexus Kubernetes 叢集」資源。

流覽 Nexus Kubernetes 叢集的螢幕快照。

  1. 一旦找到正確的資源,使其名稱與叢集名稱相符,請選取要移至 [Kubernetes 叢集] 首頁的資源。

Nexus Kubernetes 叢集首頁的螢幕快照。

  1. 一旦找到正確的資源,使其名稱與叢集名稱相符,請移至左側功能表中的 [Kubernetes 叢集節點] 區段。

流覽 Nexus Kubernetes 叢集節點的螢幕快照。

  1. 選取您感興趣的 Kubernetes 節點名稱,以查看其詳細數據。
  2. 檢查 [鏈接網络] 索引標籤,以尋找作為 CNI 網络之節點 「第 3 層網路」的 IP 位址。

流覽 Nexus Kubernetes 叢集節點網路的螢幕快照。

下一步

請嘗試下列文章,以深入瞭解 Azure 操作員 Nexus Kubernetes 叢集。