快速入門:使用 Azure Kubernetes Service(AKS)的 Dapr 擴充功能或啟用 Arc 的 Kubernetes 部署應用程式

在這個快速入門中,你會在一個支援 AKS 或 Arc 的 Kubernetes 叢集中使用 Dapr 擴充功能 。 您可以部署一個 hello world 範例,其中包含產生訊息的 Python 應用程式,以及取用和保存訊息的 Node.js 應用程式。

先決條件

複製存放庫

  1. 使用 命令克隆git clone。

    git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
    
  2. 變更至 dapr-aks-extension-quickstart 目錄。

    cd dapr-aks-extension-quickstart
    

建立和設定 Redis 存放區

打開 Azure 入口網站開始 Azure Managed Redis 建立流程。

  1. 請根據建立 Azure Managed Redis 實例快速啟動填寫建議資訊。

  2. 選取 [建立] 以開始 Redis 執行個體部署。

確認資源資訊

  1. 部署 Redis 資源之後,請瀏覽至其概觀頁面。

  2. 請注意:

    • 主機名稱位於資源總覽頁面的 Essentials 區塊。 主機名稱格式看起來類似:<your-cache-name>.<region>.redis.azure.net。
    • SSL 埠,在 設定>的進階設定中找到。 預設值是 10000。
  3. 在你的終端機裡,啟用預設資料庫的存取金鑰認證。

    az redisenterprise database update \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --access-keys-auth Enabled
    
  4. 取得預設資料庫的主鍵並將其儲存到環境變數。

    export REDIS_PRIMARY_KEY=$(az redisenterprise database list-keys \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --query primaryKey \
        -o tsv)
    

啟用公用網路存取

在這種情況下,你的 Azure Managed Redis 實例使用公共網路存取。 完成這個快速入門後,務必 清理資源 。

  1. 在資源功能表中,選取設定之下的網路。

  2. 將 公共網路存取 設為 啟用。

設定 Dapr 元件

在 redis.yaml 檔案中,你可以設定元件使用帶有 TLS 的存取金鑰認證。

- name: redisPassword
    secretKeyRef:
        name: redis-secret
        key: redisPassword
- name: useEntraID
    value: "false"
- name: enableTLS
  value: true
  1. 在你偏好的程式碼編輯器中,前往範例倉庫的 部署 目錄並開啟 redis.yaml。

  2. 對於 redisHost,請將佔位值<REDIS_HOST>:10000替換成你先前從 Azure 入口網站儲存的 Azure Managed Redis 主機名稱。

    - name: redisHost
      value: <your-cache-name>.<region>.redis.azure.net:10000
    
  3. 建立供 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 應用程式

  1. 進入 deploy 目錄並開啟 workload-identity.yaml。

  2. 將 <MANAGED_IDENTITY_CLIENT_ID> 替換為您建立的使用者指派受控識別的用戶端 ID。

  3. 部署應用程式清單前,先套用服務帳號清單。

    kubectl apply -f ./deploy/workload-identity.yaml
    

在 node.yaml 中,pod 規範使用工作負載識別標籤與共享 workload-sa 服務帳號:

labels:
  app: node
  azure.workload.identity/use: "true"

套用設定

  1. 使用 kubectl apply 命令,將 Node.js 應用程式部署套用至您的叢集。

    kubectl apply -f ./deploy/node.yaml
    
  2. Kubernetes 部署是非同步的,因此在繼續進行後續步驟之前,請使用下列命令確認部署已完成:

    kubectl rollout status deploy/nodeapp
    
  3. 使用 kubectl get svc 命令存取服務。

    kubectl get svc nodeapp
    
  4. 在輸出中記下 , EXTERNAL-IP 並設為環境變數。

    export EXTERNAL_IP=<EXTERNAL-IP>
    

確認 Node.js 服務

  1. 使用 curl,透過您的 EXTERNAL-IP 呼叫服務。

    curl $EXTERNAL_IP/ports
    

    範例輸出

    {"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost:50001"}
    
  2. 將訂單提交至應用程式。

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. 確認訂單。

    curl $EXTERNAL_IP/order
    

    預期的輸出

    { "orderId": "42" }
    

使用 Dapr sidecar 部署 Python 應用程式

設定 Python 應用程式

在 python.yaml 中,pod 規範使用工作負載識別標籤和共享 workload-sa 服務帳號:

labels:
    app: python
    azure.workload.identity/use: "true"

套用設定

  1. 使用 kubectl apply 命令,將 Python 應用程式部署至 Kubernetes 叢集。

    kubectl apply -f ./deploy/python.yaml
    
  2. Kubernetes 部署是非同步的,因此在繼續進行後續步驟之前,請使用下列命令確認部署已完成:

    kubectl rollout status deploy/pythonapp
    

觀察訊息並確認持續性

現在 Node.js 和 Python 應用程式都已部署完成,您可以觀察訊息流動情況。

  1. 使用 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
    
  2. 使用 curl,呼叫Node.js 應用程式的訂單端點,以取得最新的訂單。

    curl $EXTERNAL_IP/order
    

    您應該會在回應中看到最新的 JSON 輸出。

清除資源

如果你不再打算使用這個快速入門的資源,你可以使用 az 群組 delete 指令移除資源群組、叢集、命名空間及所有相關資源。

az group delete --name <your-resource-group>

後續步驟