Ejercicio: Almacenamiento seguro de variables en secretos
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.
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}
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
Cree un grupo de recursos con el comando
az group create
.az group create --location $LOCATION --name $RESOURCE_GROUP
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
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.Cree una zona DNS mediante el comando
az network dns zone create
.az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
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
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.
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
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"
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>"
Guarde y cierre el archivo.
Aplique el secreto mediante el comando
kubectl apply
:kubectl apply -f backend-secret.yaml
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
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 elvalueFrom
y las claves desecretKeyRef
. El orden de estas claves le indica a la implementación que use el valor dekey
presente en el secreto definido en la clavename
.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 ---
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
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.Guarde y cierre el archivo.
Aplique los cambios al clúster mediante el comando
kubectl apply
.kubectl apply -f backend-application.yaml