Esercizio - Archiviare in modo sicuro le variabili nei segreti
Creare un gruppo di risorse e un cluster del servizio Azure Kubernetes
Nota
Questo esercizio è facoltativo. Per completare questo esercizio, sarà necessario creare una sottoscrizione di Azure prima di iniziare. Se non si dispone di un account Azure o non si vuole crearne uno in questo momento, è possibile leggere le istruzioni per avere un'idea delle informazioni contenute.
Creare variabili di ambiente per il gruppo di risorse, il cluster, la zona DNS e la posizione. Assicurarsi di aggiornare la variabile LOCATION con l'area più vicina, ad esempio
eastus
.export RESOURCE_GROUP=rg-ship-manager export CLUSTER_NAME=ship-manager-cluster export ZONE_NAME=ship-$RANDOM.com export LOCATION={location}
Esegui il comando seguente per visualizzare i valori delle variabili di ambiente e prendere nota di essi per usarli in un secondo momento.
echo "RESOURCE_GROUP:" $RESOURCE_GROUP echo "CLUSTER_NAME:"$CLUSTER_NAME echo "ZONE_NAME:" $ZONE_NAME echo "LOCATION:"$LOCATION
Creare un gruppo di risorse usando il comando
az group create
.az group create --location $LOCATION --name $RESOURCE_GROUP
Creare un cluster del servizio Azure Kubernetes usando il 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
Abilita il componente aggiuntivo di routing dell'applicazione con il comando seguente.
az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
Nota
Se visualizzi un messaggio che chiede di installare l'estensione aks-preview, immetti
Y
per installarla e continuare.Crea una zona DNS usando il comando
az network dns zone create
.az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
Recupera l'ID della zona DNS e usalo come parte del comando per aggiungere la zona al cluster per il routing delle app.
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
Ottieni le credenziali per il cluster usando il comando
az aks get-credentials
.az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
Creare un segreto
Nota
Nella documentazione dell'applicazione, è possibile notare che questa applicazione include due parti: il front-end e il back-end. Solo il back-end deve usare un segreto, perché ha la stringa di connessione MongoDB come variabile di ambiente.
Distribuire un database MongoDB per supportare l'applicazione usando il comando
az cosmosdb create
.export DATABASE_NAME=contoso-ship-manager-$RANDOM && \ az cosmosdb create \ -n $DATABASE_NAME \ -g $RESOURCE_GROUP \ --kind MongoDB
Dopo aver creato il database, ottenere la stringa di connessione usando il comando
az cosmosdb keys list
e copiare il valore di output.az cosmosdb keys list \ --type connection-strings \ -g $RESOURCE_GROUP \ -n $DATABASE_NAME \ -o tsv \ --query "connectionStrings[0].connectionString"
Creare un nuovo file YAML denominato
backend-secret.yaml
e incollare il codice seguente per creare la specifica di segreto. Assicurarsi di sostituire la stringa segnaposto con la stringa di connessione dell'output precedente.apiVersion: v1 kind: Secret metadata: name: ship-manager-database namespace: default type: Opaque stringData: database_mongodb_uri: "<paste the connection string here>"
Salva e chiudi il file.
Applicare il segreto usando il comando
kubectl apply
.kubectl apply -f backend-secret.yaml
Controllare il risultato eseguendo una query sul segreto usando il comando
kubectl get secret
.kubectl get secret ship-manager-database
L'output dovrebbe essere simile all'esempio seguente:
NAME TYPE DATA AGE ship-manager-database Opaque 1 5s
Creare l'applicazione
Creare un nuovo file YAML denominato
backend-application.yaml
e incollare il codice seguente per creare la specifica di distribuzione.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
Nella sezione
env
vengono usate le chiavivalueFrom
esecretKeyRef
. L'ordine di queste chiavi indica alla distribuzione di utilizzare il valore dell’elementokey
presente nel segreto definito nella chiavename
.Aggiungere tre trattini sotto l'ultima riga del file
backend-application.yaml
per separare la sezione successiva.# 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 ---
Sotto i tre trattini incollare il codice seguente per creare la specifica in ingresso.
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
Modifica la zona DNS in
host:
in modo che corrisponda al nome della zona DNS. Usa il valore della variabile ZONE_NAME creata in precedenza.Salva e chiudi il file.
Applicare le modifiche al cluster usando il comando
kubectl apply
.kubectl apply -f backend-application.yaml