Ejercicio: Almacenamiento seguro de variables en secretos

Completado

Creación de un grupo de recursos y un clúster de AKS

Nota:

Este ejercicio es opcional. Si le interesa completar este ejercicio, deberá crear una suscripción de Azure antes de empezar. Si no tiene una cuenta de Azure o no quiere crear una en este momento, puede leer las instrucciones para comprender la información que se está presentando.

  1. Cree variables de entorno para el grupo de recursos, el clúster, la zona DNS y la ubicación. Asegúrese de actualizar la variable LOCATION con la región más cercana, por ejemplo, eastus.

    export RESOURCE_GROUP=rg-ship-manager
    export CLUSTER_NAME=ship-manager-cluster
    export ZONE_NAME=ship-$RANDOM.com
    export LOCATION={location}
    
  2. Ejecute el siguiente comando para ver los valores de las variables de entorno y tome nota de ellos para su uso posterior.

    echo "RESOURCE_GROUP:" $RESOURCE_GROUP
    echo "CLUSTER_NAME:"$CLUSTER_NAME
    echo "ZONE_NAME:" $ZONE_NAME
    echo "LOCATION:"$LOCATION
    
  3. Cree un grupo de recursos con el comando az group create.

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. Cree un clúster de AKS con el 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 el complemento de enrutamiento de aplicaciones con el comando siguiente.

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

    Nota:

    Si ve un mensaje que le solicita que instale la extensión aks-preview, escriba Y para instalarla y continuar.

  6. Cree una zona DNS mediante el comando az network dns zone create.

    az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
    
  7. Recupere el identificador de la zona DNS y úselo como parte del comando para agregar la zona al clúster para el enrutamiento de aplicaciones.

    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. Obtenga las credenciales del clúster mediante el comando az aks get-credentials.

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

Cree un secreto

Nota:

En la documentación de la aplicación, puede ver que esta aplicación tiene dos partes: el front-end y el back-end. Solo el back-end tiene que usar un secreto, ya que tiene la cadena de conexión de MongoDB como una variable de entorno.

  1. Implemente una base de datos de MongoDB para admitir la aplicación mediante el comando az cosmosdb create.

    export DATABASE_NAME=contoso-ship-manager-$RANDOM && \
    az cosmosdb create \
     -n $DATABASE_NAME \
     -g $RESOURCE_GROUP \
     --kind MongoDB
    
  2. Una vez creada la base de datos, obtenga la cadena de conexión mediante el comando az cosmosdb keys list y copie el valor de salida.

    az cosmosdb keys list \
      --type connection-strings \
      -g $RESOURCE_GROUP \
      -n $DATABASE_NAME \
      -o tsv \
      --query "connectionStrings[0].connectionString"
    
  3. Cree un nuevo archivo YAML denominado backend-secret.yaml y pegue el código siguiente para crear la especificación secreta. Asegúrese de reemplazar la cadena de marcador de posición por la cadena de conexión de la salida 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 y cierre el archivo.

  5. Aplique el secreto mediante el comando kubectl apply:

    kubectl apply -f backend-secret.yaml
    
  6. Para comprobar el resultado, consulte el secreto mediante el comando kubectl get secret.

    kubectl get secret ship-manager-database
    

    Debe obtener una salida similar al siguiente ejemplo:

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

Crear la aplicación

  1. Cree un nuevo archivo YAML denominado backend-application.yaml y pegue el código siguiente para crear la especificación de implementación.

    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
    

    Tenga en cuenta que, en la sección env, usamos el valueFrom y las claves de secretKeyRef. El orden de estas claves le indica a la implementación que use el valor de key presente en el secreto definido en la clave name.

  2. Agregue tres guiones debajo de la última línea del archivo backend-application.yaml para separar la sección siguiente.

    # 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. Debajo de los tres guiones, pegue el código siguiente para crear la especificación 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. Cambie la zona DNS en host: para que coincida con el nombre de la zona DNS. Use el valor de la variable ZONE_NAME que creó anteriormente.

  5. Guarde y cierre el archivo.

  6. Aplique los cambios al clúster mediante el comando kubectl apply.

    kubectl apply -f backend-application.yaml