在 Azure 入口網站中建立和設定 Azure Kubernetes Service (AKS) 叢集以使用虛擬節點
虛擬節點能在於 Azure 容器執行個體 (ACI) 與 Azure Kubernetes Service (AKS) 叢集中執行的 Pod 之間啟用網路通訊。 為了提供此通訊功能,需要建立虛擬網路子網路並指派委派權限。 虛擬節點僅適用於使用「進階」網路 (Azure CNI) 建立的 AKS 叢集。 根據預設,AKS 叢集是使用「基本」網路 (kubenet) 所建立。
本文說明如何建立虛擬網路和子網路,然後使用 Azure 入口網站部署使用進階網路的 AKS 叢集。
注意
如需虛擬節點區域可用性和限制的概觀,請參閱在 AKS 中使用虛擬節點。
開始之前
您需要在訂用帳戶上註冊的 ACI 服務提供者。
使用
az provider list
命令檢查 ACI 提供者註冊的狀態。az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
下列範例輸出顯示 Microsoft.ContainerInstance 提供者的狀態為 Registered:
Namespace RegistrationState RegistrationPolicy --------------------------- ------------------- -------------------- Microsoft.ContainerInstance Registered RegistrationRequired
如果提供者的狀態為 NotRegistered,請使用
az provider register
命令註冊提供者。az provider register --namespace Microsoft.ContainerInstance
建立 AKS 叢集
- 瀏覽至 Azure 入口網站首頁。
- 選取 [建立資源] > [容器]。
- 在 [Azure Kubernetes Service (AKS)] 資源上,選取 [建立]。
- 在 [基本資料] 頁面上設定下列選項:
- 專案詳細資料:選取 Azure 訂用帳戶,然後選取或建立 Azure 資源群組,例如 myResourceGroup。
- 叢集詳細資料:輸入 Kubernetes 叢集名稱,例如 myAKSCluster。 選取 AKS 叢集的區域和 Kubernetes 版本。
- 選取 [下一步: 節點集區],並核取 *[啟用虛擬節點]。
- 選取 [檢閱 + 建立]。
- 驗證完成後,選取 [建立]。
根據預設,此程序會建立受控叢集身分識別,用於叢集通訊與其他 Azure 服務整合。 如需詳細資訊,請參閱使用受控識別。 您也可以使用服務主體做為叢集身分識別。
此程序會將叢集設定為進階網路和虛擬節點,以使用自己的 Azure 虛擬網路子網路。 此子網路具有委派的權限,可連接 AKS 叢集之間的 Azure 資源。 如果您還沒有委派的子網路,Azure 入口網站會建立並設定 Azure 虛擬網路和子網路,以搭配虛擬節點使用。
連線至叢集
Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。 若要管理 Kubernetes 叢集,請使用 Kubernetes 命令列用戶端:kubectl。 kubectl
用戶端會預先安裝在 Azure Cloud Shell 中。
使用
az aks get-credentials
命令,設定kubectl
連線到 Kubernetes 叢集。 下列範例會針對 myResourceGroup 資源群組中的叢集名稱 myAKSCluster 取得認證:az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用
kubectl get nodes
確認叢集的連線。kubectl get nodes
下列輸出範例顯示單一 VM 節點已建立,以及名為 virtual-node-aci-linux 的虛擬 Linux 節點:
NAME STATUS ROLES AGE VERSION virtual-node-aci-linux Ready agent 28m v1.11.2 aks-agentpool-14693408-0 Ready agent 32m v1.11.2
部署範例應用程式
在 Azure Cloud Shell 中,建立名為
virtual-node.yaml
的檔案,然後複製下列 YAML:apiVersion: apps/v1 kind: Deployment metadata: name: aci-helloworld spec: replicas: 1 selector: matchLabels: app: aci-helloworld template: metadata: labels: app: aci-helloworld spec: containers: - name: aci-helloworld image: mcr.microsoft.com/azuredocs/aci-helloworld ports: - containerPort: 80 nodeSelector: kubernetes.io/role: agent beta.kubernetes.io/os: linux type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists
YAML 會定義 nodeSelector 和 toleration,將允許 Pod 在虛擬節點上進行排程。 Pod 會從 Azure 虛擬網路的子網路 (為搭配使用虛擬節點而委派) 獲派內部 IP 位址。
使用
kubectl apply
命令執行應用程式。kubectl apply -f virtual-node.yaml
使用具有
-o wide
引數的kubectl get pods
命令,檢視節點上的 Pod 排程。kubectl get pods -o wide
下列範例輸出顯示在
virtual-node-linux
節點上的virtual-node-helloworld
Pod 排程。NAME READY STATUS RESTARTS AGE IP NODE virtual-node-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linux
注意
如果您使用儲存在 Azure Container Registry 中的映像,請設定並使用 Kubernetes 祕密。 虛擬節點的限制是您無法使用整合式 Microsoft Entra 服務主體驗證。 如果您未使用祕密,已在虛擬節點上排程的 Pod 就無法啟動並會回報錯誤 HTTP response status code 400 error code "InaccessibleImage"
。
測試虛擬節點 Pod
若要測試虛擬節點上執行的 Pod,請瀏覽至搭配 Web 用戶端的示範應用程式。 Pod 會得到指派內部 IP 位址,因此您可以輕鬆從 AKS 叢集上的其他 Pod 測試此連線。
使用下列
kubectl run
命令建立測試 Pod,並將終端機工作階段與它連結。kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
使用下列
apt-get
命令,在 Pod 中安裝curl
。apt-get update && apt-get install -y curl
使用下列
curl
命令存取 Pod 的位址,並提供內部 IP 位址。curl -L http://10.241.0.4
下列簡化的範例輸出顯示示範應用程式。
<html> <head> <title>Welcome to Azure Container Instances!</title> </head> [...]
使用
exit
來關閉測試 Pod 的終端機工作階段,同時將刪除 Pod。exit
下一步
在本文中,您已在虛擬節點上進行 Pod 排程,並得到指派私人的內部 IP 位址。 如果需要,您可以改為建立服務部署,並透過負載平衡器或輸入控制器將流量路由到您的 Pod。 如需詳細資訊,請參閱在 AKS 中建立基本的連入控制器。
虛擬節點是 AKS 中調整解決方案的一個元件。 如需有關調整解決方案的詳細資訊,請參閱下列文章: