Início Rápido: Implantar um aplicativo usando a extensão Dapr para o AKS (Serviço de Kubernetes do Azure) ou o Kubernetes habilitado para Arc

Neste início rápido, você usará a extensão Dapr em um cluster Kubernetes com suporte a AKS ou Arc. Você implanta um hello world exemplo, que consiste em um aplicativo Python que gera mensagens e um aplicativo Node.js que consome e persiste as mensagens.

Pré-requisitos

Clonar o repositório

  1. Clone o repositório de início rápido do Dapr usando o git clone comando.

    git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
    
  2. Altere para o diretório dapr-aks-extension-quickstart.

    cd dapr-aks-extension-quickstart
    

Criar e configurar um repositório de Redis

Abra o portal Azure para iniciar o fluxo de criação do Azure Managed Redis.

  1. Preencha as informações recomendadas de acordo com o guia de início rápido Criar uma instância do Azure Managed Redis.

  2. Selecione criar para iniciar a implantação da instância do Redis.

Verifique as informações do recurso

  1. Depois que o recurso Redis for implantado, navegue até sua página de visão geral.

  2. Tome nota:

    • O nome do host, encontrado na seção Essentials da página de visão geral do recurso. O formato do nome do host é semelhante a: <your-cache-name>.<region>.redis.azure.net.
    • A porta SSL, encontrada em Configurações>Configurações avançadas. O valor padrão é 10000.
  3. No terminal, habilite a autenticação de chave de acesso no banco de dados padrão.

    az redisenterprise database update \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --access-keys-auth Enabled
    
  4. Recupere a chave primária do banco de dados padrão e salve-a em uma variável de ambiente.

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

Habilitar acesso à rede pública

Para esse cenário, sua instância Azure Gerenciada do Redis usa o acesso à rede pública. Certifique-se de limpar os recursos depois de concluir este início rápido.

  1. No menu de recursos, em Configurações, selecione Rede.

  2. Defina o acesso à rede pública como Habilitado.

Configurar os componentes da Dapr

No arquivo redis.yaml , você configura o componente para usar a autenticação de chave de acesso com o TLS.

- name: redisPassword
    secretKeyRef:
        name: redis-secret
        key: redisPassword
- name: useEntraID
    value: "false"
- name: enableTLS
  value: true
  1. No editor de código preferido, navegue até o diretório de implantação no repositório de exemplo e abra redis.yaml.

  2. Para redisHost, substitua o valor do marcador <REDIS_HOST>:10000 pelo nome do host do Redis gerenciado do Azure que você salvou anteriormente no portal do Azure.

    - name: redisHost
      value: <your-cache-name>.<region>.redis.azure.net:10000
    
  3. Criar o segredo do Kubernetes usado por redisPassword.

    kubectl create secret generic redis-secret \
        --from-literal=redisPassword="$REDIS_PRIMARY_KEY"
    

Aplicar a configuração

Aplique o arquivo redis.yaml usando o kubectl apply comando.

kubectl apply -f ./deploy/redis.yaml

Saída esperada

component.dapr.io/statestore created

Implantar o aplicativo Node.js com o sidecar do Dapr

Configure o aplicativo Node.js

  1. Vá para o deploy diretório e abra workload-identity.yaml.

  2. Substitua <MANAGED_IDENTITY_CLIENT_ID> pela ID de cliente da identidade gerenciada atribuída pelo usuário que você criou.

  3. Aplique o manifesto da conta de serviço antes de implantar os manifestos do aplicativo.

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

Em node.yaml, a especificação do pod usa o rótulo de identidade da carga de trabalho e a conta de serviço compartilhada workload-sa:

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

Aplicar a configuração

  1. Aplique a implantação do aplicativo Node.js ao seu cluster com o comando kubectl apply.

    kubectl apply -f ./deploy/node.yaml
    
  2. As implantações do Kubernetes são assíncronas, portanto, antes de prosseguir para as próximas etapas, verifique se a implantação foi concluída com o seguinte comando:

    kubectl rollout status deploy/nodeapp
    
  3. Acesse seu serviço usando o comando kubectl get svc.

    kubectl get svc nodeapp
    
  4. Anote o valor EXTERNAL-IP na saída e defina-o como variável de ambiente.

    export EXTERNAL_IP=<EXTERNAL-IP>
    

Verificar o serviço de Node.js

  1. Usando curl, chame o serviço com seu EXTERNAL-IP.

    curl $EXTERNAL_IP/ports
    

    Saída de exemplo:

    {"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost:50001"}
    
  2. Envie um pedido através do aplicativo.

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. Confirme o pedido.

    curl $EXTERNAL_IP/order
    

    Saída esperada

    { "orderId": "42" }
    

Implantar o aplicativo Python com o sidecar do Dapr

Configurar o aplicativo do Python

Em python.yaml, a especificação do pod usa o rótulo de identidade da carga de trabalho e a conta de serviço compartilhada workload-sa:

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

Aplicar a configuração

  1. Implemente o aplicativo Python em seu cluster do Kubernetes com o comando kubectl apply.

    kubectl apply -f ./deploy/python.yaml
    
  2. As implantações do Kubernetes são assíncronas, portanto, antes de prosseguir para as próximas etapas, verifique se a implantação foi concluída com o seguinte comando:

    kubectl rollout status deploy/pythonapp
    

Observar mensagens e confirmar a persistência

Agora que os aplicativos Node.js e Python estão implantados, você pode acompanhar a chegada das mensagens.

  1. Obtenha os logs do aplicativo Node.js usando o comando kubectl logs.

    kubectl logs --selector=app=node -c node --tail=-1
    

    Saída esperada

    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. Usando curl, chame o ponto de extremidade de pedidos do aplicativo Node.js para obter o pedido mais recente.

    curl $EXTERNAL_IP/order
    

    Você deverá ver a última saída JSON na resposta.

Limpar os recursos

Se você não planeja mais usar os recursos deste início rápido, poderá remover o grupo de recursos, o cluster, o namespace e todos os recursos relacionados usando o comando az group delete .

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

Próxima etapa