Events
17 Mar, 9 pm - 21 Mar, 10 am
Join the meetup series to build scalable AI solutions based on real-world use cases with fellow developers and experts.
Register nowThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
In this quickstart, you use the Dapr cluster extension in an AKS or Arc-enabled Kubernetes cluster. You deploy a hello world
example, which consists of a Python application that generates messages and a Node.js application that consumes and persists the messages.
Clone the Dapr quickstarts repository using the git clone
command.
git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
Change to the dapr-aks-extension-quickstart
directory.
Open the Azure portal to start the Azure Cache for Redis creation flow.
xxxxxx.redis.cache.windows.net
.6380
.In the Authentication blade, type the name of the Managed Identity you created as a prerequisite in the field under Enable Microsoft Entra Authentication checkbox.
Verify your managed identity is added as a Redis User assigned Data Owner Access Policy permissions.
For this scenario, your Redis cache uses public network access. Be sure to clean up resources when you're finished with this quickstart.
In redis.yaml
, the component is configured to use Entra ID Authentication using workload identity enabled for AKS cluster. No access keys are required.
- name: useEntraID
value: "true"
- name: enableTLS
value: true
In your preferred code editor, navigate to the deploy
directory in the sample and open redis.yaml
.
For redisHost
, replace the placeholder <REDIS_HOST>:<REDIS_PORT>
value with the Redis cache hostname and SSL port you saved earlier from Azure portal.
- name: redisHost
value: <your-cache-name>.redis.cache.windows.net:6380
Apply the redis.yaml
file using the kubectl apply
command.
kubectl apply -f ./deploy/redis.yaml
Verify your state store was successfully configured using the kubectl get components.redis
command.
kubectl get components.redis -o yaml
Expected output
component.dapr.io/statestore created
In node.yaml
, the pod spec has the label added to use workload identity,:
labels:
app: node
azure.workload.identity/use: "true"
Navigate to the deploy
directory and open node.yaml
.
Replace the placeholder <SERVICE_ACCOUNT_NAME>
value for serviceAccountName
with the service account name you created.
Apply the Node.js app deployment to your cluster using the kubectl apply
command.
kubectl apply -f ./deploy/node.yaml
Kubernetes deployments are asynchronous, so before moving on to the next steps, verify the deployment is complete with the following command:
kubectl rollout status deploy/nodeapp
Access your service using the kubectl get svc
command.
kubectl get svc nodeapp
Make note of the EXTERNAL-IP
in the output.
Using curl
, call the service with your EXTERNAL-IP
.
curl $EXTERNAL_IP/ports
Example output
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
Submit an order to the application.
curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
Confirm the order.
curl $EXTERNAL_IP/order
Expected output
{ "orderId": "42" }
In python.yaml
, the pod spec has the label added to use workload identity,:
labels:
app: node
azure.workload.identity/use: "true"
Navigate to the deploy
directory and open python.yaml
.
Replace the placeholder <SERVICE_ACCOUNT_NAME>
value for serviceAccountName
with the service account name you created.
Deploy the Python app to your Kubernetes cluster using the kubectl apply
command.
kubectl apply -f ./deploy/python.yaml
Kubernetes deployments are asynchronous, so before moving on to the next steps, verify the deployment is complete with the following command:
kubectl rollout status deploy/pythonapp
Now that both the Node.js and Python applications are deployed, you can watch messages come through.
Get the logs of the Node.js app using the kubectl logs
command.
kubectl logs --selector=app=node -c node --tail=-1
Expected output
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
Using curl
, call the Node.js app's order endpoint to get the latest order.
curl $EXTERNAL_IP/order
You should see the latest JSON output in the response.
If you no longer plan to use the resources from this quickstart, you can delete all associated resources by removing the resource group.
Remove the resource group, cluster, namespace, and all related resources using the az group delete command.
az group delete --name MyResourceGroup
Azure Kubernetes Service feedback
Azure Kubernetes Service is an open source project. Select a link to provide feedback:
Events
17 Mar, 9 pm - 21 Mar, 10 am
Join the meetup series to build scalable AI solutions based on real-world use cases with fellow developers and experts.
Register nowTraining
Module
Guided Project - Deploy applications to Azure Kubernetes Service - Training
Welcome to this interactive skills validation experience. Completing this module helps prepare you for the Deploy and manage containers with Azure Kubernetes Service assessment.
Certification
Microsoft Certified: Azure Developer Associate - Certifications
Build end-to-end solutions in Microsoft Azure to create Azure Functions, implement and manage web apps, develop solutions utilizing Azure storage, and more.