在這個快速入門中,你會在一個支援 AKS 或 Arc 的 Kubernetes 叢集中使用 Dapr 擴充功能 。 您可以部署一個 hello world 範例,其中包含產生訊息的 Python 應用程式,以及取用和保存訊息的 Node.js 應用程式。
先決條件
- Azure 訂用帳戶。 如果您沒有,可以 建立免費帳戶。
- 已安裝 Azure CLI
- AKS群組包括:
- 工作負載身分識別已啟用
- 在相同訂用帳戶中建立的受控身分識別
- Kubernetes 服務帳戶
- 同盟身分識別認證
- 安裝在 AKS 叢集上的 Dapr 擴充功能
- kubectl 已在本地安裝
複製存放庫
-
git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git 變更至
dapr-aks-extension-quickstart目錄。cd dapr-aks-extension-quickstart
建立和設定 Redis 存放區
打開 Azure 入口網站開始 Azure Managed Redis 建立流程。
請根據建立 Azure Managed Redis 實例快速啟動填寫建議資訊。
選取 [建立] 以開始 Redis 執行個體部署。
確認資源資訊
部署 Redis 資源之後,請瀏覽至其概觀頁面。
請注意:
- 主機名稱位於資源總覽頁面的 Essentials 區塊。 主機名稱格式看起來類似:
<your-cache-name>.<region>.redis.azure.net。 - SSL 埠,在 設定>的進階設定中找到。 預設值是
10000。
- 主機名稱位於資源總覽頁面的 Essentials 區塊。 主機名稱格式看起來類似:
在你的終端機裡,啟用預設資料庫的存取金鑰認證。
az redisenterprise database update \ --cluster-name <REDIS_NAME> \ --resource-group <RESOURCE_GROUP> \ --access-keys-auth Enabled取得預設資料庫的主鍵並將其儲存到環境變數。
export REDIS_PRIMARY_KEY=$(az redisenterprise database list-keys \ --cluster-name <REDIS_NAME> \ --resource-group <RESOURCE_GROUP> \ --query primaryKey \ -o tsv)
啟用公用網路存取
在這種情況下,你的 Azure Managed Redis 實例使用公共網路存取。 完成這個快速入門後,務必 清理資源 。
在資源功能表中,選取設定之下的網路。
將 公共網路存取 設為 啟用。
設定 Dapr 元件
在 redis.yaml 檔案中,你可以設定元件使用帶有 TLS 的存取金鑰認證。
- name: redisPassword
secretKeyRef:
name: redis-secret
key: redisPassword
- name: useEntraID
value: "false"
- name: enableTLS
value: true
在你偏好的程式碼編輯器中,前往範例倉庫的 部署 目錄並開啟 redis.yaml。
對於
redisHost,請將佔位值<REDIS_HOST>:10000替換成你先前從 Azure 入口網站儲存的 Azure Managed Redis 主機名稱。- name: redisHost value: <your-cache-name>.<region>.redis.azure.net:10000建立供
redisPassword使用的 Kubernetes Secret。kubectl create secret generic redis-secret \ --from-literal=redisPassword="$REDIS_PRIMARY_KEY"
套用設定
用這個指令套用 kubectl apply 檔案。
kubectl apply -f ./deploy/redis.yaml
預期的輸出
component.dapr.io/statestore created
使用 Dapr sidecar 部署 Node.js 應用程式
設定 Node.js 應用程式
進入
deploy目錄並開啟 workload-identity.yaml。將
<MANAGED_IDENTITY_CLIENT_ID>替換為您建立的使用者指派受控識別的用戶端 ID。部署應用程式清單前,先套用服務帳號清單。
kubectl apply -f ./deploy/workload-identity.yaml
在 node.yaml 中,pod 規範使用工作負載識別標籤與共享 workload-sa 服務帳號:
labels:
app: node
azure.workload.identity/use: "true"
套用設定
使用
kubectl apply命令,將 Node.js 應用程式部署套用至您的叢集。kubectl apply -f ./deploy/node.yamlKubernetes 部署是非同步的,因此在繼續進行後續步驟之前,請使用下列命令確認部署已完成:
kubectl rollout status deploy/nodeapp使用
kubectl get svc命令存取服務。kubectl get svc nodeapp在輸出中記下 ,
EXTERNAL-IP並設為環境變數。export EXTERNAL_IP=<EXTERNAL-IP>
確認 Node.js 服務
使用
curl,透過您的EXTERNAL-IP呼叫服務。curl $EXTERNAL_IP/ports範例輸出
{"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost:50001"}將訂單提交至應用程式。
curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder確認訂單。
curl $EXTERNAL_IP/order預期的輸出
{ "orderId": "42" }
使用 Dapr sidecar 部署 Python 應用程式
設定 Python 應用程式
在 python.yaml 中,pod 規範使用工作負載識別標籤和共享 workload-sa 服務帳號:
labels:
app: python
azure.workload.identity/use: "true"
套用設定
使用
kubectl apply命令,將 Python 應用程式部署至 Kubernetes 叢集。kubectl apply -f ./deploy/python.yamlKubernetes 部署是非同步的,因此在繼續進行後續步驟之前,請使用下列命令確認部署已完成:
kubectl rollout status deploy/pythonapp
觀察訊息並確認持續性
現在 Node.js 和 Python 應用程式都已部署完成,您可以觀察訊息流動情況。
使用
kubectl logs命令取得 Node.js 應用程式的記錄。kubectl logs --selector=app=node -c node --tail=-1預期的輸出
Got a new order! Order ID: 1 Successfully persisted state Got a new order! Order ID: 2 Successfully persisted state Got a new order! Order ID: 3 Successfully persisted state使用
curl,呼叫Node.js 應用程式的訂單端點,以取得最新的訂單。curl $EXTERNAL_IP/order您應該會在回應中看到最新的 JSON 輸出。
清除資源
如果你不再打算使用這個快速入門的資源,你可以使用 az 群組 delete 指令移除資源群組、叢集、命名空間及所有相關資源。
az group delete --name <your-resource-group>