Exercício – armazenar variáveis com segurança em segredos

Concluído

Criar um grupo de recursos e um cluster do AKS

Observação

Este exercício é opcional. Para concluir este exercício, será necessário criar uma assinatura do Azure antes de começar. Se você não tiver uma conta do Azure ou não quiser criar uma no momento, poderá ler as instruções para entender as informações que estão sendo apresentadas.

  1. Crie variáveis de ambiente para seu grupo de recursos, cluster, zona DNS e localização. Não deixe de atualizar a variável LOCATION para a região mais próxima de você. Por exemplo, eastus.

    export RESOURCE_GROUP=rg-ship-manager
    export CLUSTER_NAME=ship-manager-cluster
    export ZONE_NAME=ship-$RANDOM.com
    export LOCATION={location}
    
  2. Execute o comando a seguir para exibir os valores de suas variáveis de ambiente e anote-os para uso posterior.

    echo "RESOURCE_GROUP:" $RESOURCE_GROUP
    echo "CLUSTER_NAME:"$CLUSTER_NAME
    echo "ZONE_NAME:" $ZONE_NAME
    echo "LOCATION:"$LOCATION
    
  3. Crie um grupo de recursos usando o comando az group create.

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. Crie um cluster do AKS usando o comando az aks create.

    az aks create \
     -g $RESOURCE_GROUP \
     -n $CLUSTER_NAME \
     --location $LOCATION \
     --node-count 1 \
     --node-vm-size Standard_B2s \
     --generate-ssh-keys
    
  5. Habilite o complemento de roteamento de aplicativo com o comando a seguir.

    az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
    

    Observação

    Se você vir uma mensagem solicitando que você instale a extensão aks-preview, insira Y para instalá-la e continuar.

  6. Crie uma zona DNS usando o comando az network dns zone create.

    az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
    
  7. Recupere a ID da zona DNS e use-a como parte do comando para adicionar a zona ao cluster para roteamento de aplicativo.

    ZONEID=$(az network dns zone show -g $RESOURCE_GROUP -n $ZONE_NAME --query "id" --output tsv)
    az aks approuting zone add -g $RESOURCE_GROUP -n $CLUSTER_NAME --ids=${ZONEID} --attach-zones
    
  8. Obtenha as credenciais do cluster usando o comando az aks get-credentials.

    az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

Criar um Segredo

Observação

Na documentação do aplicativo, é possível ver que esse aplicativo tem duas partes: a front-end e a back-end. Apenas a back-end precisa usar um Segredo, pois tem a cadeia de conexão do MongoDB como uma variável de ambiente.

  1. Implante um banco de dados do MongoDB para dar suporte ao aplicativo usando o comando az cosmosdb create.

    export DATABASE_NAME=contoso-ship-manager-$RANDOM && \
    az cosmosdb create \
     -n $DATABASE_NAME \
     -g $RESOURCE_GROUP \
     --kind MongoDB
    
  2. Depois de criar o banco de dados, obtenha a cadeia de conexão usando o comando az cosmosdb keys list e copie o valor de saída.

    az cosmosdb keys list \
      --type connection-strings \
      -g $RESOURCE_GROUP \
      -n $DATABASE_NAME \
      -o tsv \
      --query "connectionStrings[0].connectionString"
    
  3. Crie um novo arquivo YAML nomeado backend-secret.yaml e cole no código a seguir para criar a especificação de Segredo. Lembre-se de substituir a cadeia de caracteres de espaço reservado pela cadeia de conexão da saída anterior.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ship-manager-database
      namespace: default
    type: Opaque
    stringData:
      database_mongodb_uri: "<paste the connection string here>"
    
  4. Salve e feche o arquivo.

  5. Aplique o segredo com o comando kubectl apply.

    kubectl apply -f backend-secret.yaml
    
  6. Verifique o resultado ao consultar o segredo com o comando kubectl get secret.

    kubectl get secret ship-manager-database
    

    Obtenha uma saída semelhante ao seguinte exemplo:

    NAME                    TYPE     DATA   AGE
    ship-manager-database   Opaque   1      5s
    

Criar o aplicativo

  1. Crie um novo arquivo YAML chamado backend-application.yaml e cole no código a seguir para criar a especificação de Implantação.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ship-manager-backend
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ship-manager-backend
      template:
        metadata:
          labels:
            app: ship-manager-backend
        spec:
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:backend
              name: ship-manager-backend
              ports:
                - containerPort: 3000
                  name: http
              env:
                - name: DATABASE_MONGODB_URI
                  valueFrom:
                    secretKeyRef:
                      key: database_mongodb_uri
                      name: ship-manager-database
                - name: DATABASE_MONGODB_DBNAME
                  value: ship_manager
    

    Observe que, na seção env, são usadas as chaves valueFrom e secretKeyRef. A ordem das chaves indica à implantação para usar o valor da key presente no Segredo definido na chave name.

  2. Adicione três traços abaixo da última linha no arquivo backend-application.yaml para separar a próxima seção.

    # Previous lines from the deployment
    value: ship_manager
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ship-manager-backend
      namespace: default
    spec:
      selector:
        app: ship-manager-backend
      ports:
        - name: http
          port: 80
          targetPort: 3000
    ---
    
  3. Abaixo dos três traços, cole o código a seguir para criar a especificação de Entrada.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ship-manager-backend
      namespace: default
      annotations:
        spec.ingressClassName: webapprouting.kubernetes.azure.com
    spec:
      rules:
        - host: ship-manager-backend.<paste the ZONE_NAME here>
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: ship-manager-backend
                    port:
                      name: http
    
  4. Altere a zona DNS na host: para corresponder ao nome da zona DNS. Use o valor da variável ZONE_NAME criada anteriormente.

  5. Salve e feche o arquivo.

  6. Aplique as alterações ao cluster usando o comando kubectl apply.

    kubectl apply -f backend-application.yaml