Exercício – Armazenar variáveis em segurança nos segredos

Concluído

Criar um grupo de recursos e um cluster AKS

Nota

Este exercício é opcional. Se quiser concluir este exercício, terá de criar uma subscrição do Azure antes de começar. Se você não tiver uma conta do Azure ou não quiser criar uma no momento, leia 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 local. Certifique-se de atualizar a variável LOCATION com 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 das variáveis de ambiente e anotar eles 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 az group create comando.

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

    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 aplicativos com o seguinte comando.

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

    Nota

    Se vir uma mensagem a pedir-lhe para instalar a extensão aks-preview , entre Y para instalá-la e continuar.

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

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

    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 para o cluster usando o az aks get-credentials comando.

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

Criar um segredo

Nota

Na documentação do aplicativo, você pode ver que este aplicativo tem duas partes: o front-end e o back-end. Somente o back-end precisa usar um Secret, porque ele tem a cadeia de conexão MongoDB como uma variável de ambiente.

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

    export DATABASE_NAME=contoso-ship-manager-$RANDOM && \
    az cosmosdb create \
     -n $DATABASE_NAME \
     -g $RESOURCE_GROUP \
     --kind MongoDB
    
  2. Depois que o banco de dados for criado, obtenha a cadeia de conexão usando o comando e copie o az cosmosdb keys list 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 chamado backend-secret.yaml e cole no código a seguir para criar a especificação secreta. Certifique-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. Guarde e feche o ficheiro.

  5. Aplique o segredo usando o kubectl apply comando.

    kubectl apply -f backend-secret.yaml
    
  6. Verifique o resultado consultando o segredo usando o kubectl get secret comando.

    kubectl get secret ship-manager-database
    

    Você deve obter uma saída semelhante ao exemplo a seguir:

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

Criar a aplicação

  1. Crie um novo arquivo YAML nomeado 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 env seção, usamos as valueFrom teclas e secretKeyRef . A ordem dessas chaves diz à implantação para usar o key valor do presente no Segredo definido na name chave.

  2. Adicione três traços abaixo da última linha do backend-application.yaml arquivo 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 Ingress.

    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 no host: para corresponder ao nome da sua zona DNS. Use o valor da variável ZONE_NAME criada anteriormente.

  5. Guarde e feche o ficheiro.

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

    kubectl apply -f backend-application.yaml