Início rápido: Implementar uma aplicação usando a extensão Dapr para Azure Kubernetes Service (AKS) ou Kubernetes ativado pelo Arc

Neste início rápido, é utilizada a extensão Dapr num cluster Kubernetes com 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. Clona o repositório Dapr de início rápido usando o git clone comando.

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

    cd dapr-aks-extension-quickstart
    

Criar e configurar uma loja Redis

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

  1. Preencha a informação recomendada de acordo com o início rápido de criação de uma instância Azure Managed Redis.

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

Verificar informações de recursos

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

  2. Toma nota de:

    • O nome do anfitrião, encontra-se na secção Essenciais da página de resumo de recursos. O formato hostname é semelhante a: <your-cache-name>.<region>.redis.azure.net.
    • A porta SSL, encontrada nas Definições>Definições avançadas. O valor predefinido é 10000.
  3. No seu terminal, ative a autenticação por chave de acesso na base de dados predefinida.

    az redisenterprise database update \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --access-keys-auth Enabled
    
  4. Recupere a chave primária da base de dados padrão e guarde-a numa 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

Neste cenário, a sua instância Azure Managed Redis utiliza acesso público à rede. Certifique-se de limpar os recursos depois de terminar este quickstart.

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

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

Configurar os componentes do Dapr

No ficheiro redis.yaml , configuras o componente para usar autenticação por chave de acesso com TLS.

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

  2. Para redisHost, substitui o valor provisório <REDIS_HOST>:10000 pelo nome de host Azure Managed Redis que guardaste anteriormente do portal Azure.

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

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

Aplicar a configuração

Aplica o ficheiro redis.yaml usando o kubectl apply comando.

kubectl apply -f ./deploy/redis.yaml

Resultados esperados

component.dapr.io/statestore created

Implemente a aplicação Node.js com o sidecar Dapr

Configurar o aplicativo Node.js

  1. Vai ao deploy diretório e abre workload-identity.yaml.

  2. Substitua <MANAGED_IDENTITY_CLIENT_ID> pelo ID do cliente da identidade gerida atribuída pelo utilizador que criou.

  3. Aplica o manifesto da conta de serviço antes de implementares os manifestos da app.

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

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

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

Aplicar a configuração

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

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

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

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

    export EXTERNAL_IP=<EXTERNAL-IP>
    

Verificar o serviço Node.js

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

    curl $EXTERNAL_IP/ports
    

    Exemplo de saída

    {"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost:50001"}
    
  2. Envie um pedido para o aplicativo.

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

    curl $EXTERNAL_IP/order
    

    Resultados esperados

    { "orderId": "42" }
    

Implante o aplicativo Python com o sidecar Dapr

Configurar o aplicativo Python

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

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

Aplicar a configuração

  1. Implante o aplicativo Python em seu cluster Kubernetes usando o kubectl apply comando.

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

    kubectl rollout status deploy/pythonapp
    

Observe as mensagens e confirme a persistência

Agora que os aplicativos Node.js e Python estão implantados, você pode ver as mensagens chegarem.

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

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

    Resultados esperados

    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 endpoint de pedidos da aplicação Node.js para obter o pedido mais recente.

    curl $EXTERNAL_IP/order
    

    Você deve ver a saída JSON mais recente na resposta.

Limpar recursos

Se já não planeia usar os recursos deste quickstart, pode remover o grupo de recursos, cluster, namespace e todos os recursos relacionados usando o comando azgroup delete .

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

Próximo passo