Exercício - Armazene variáveis em segredos com segurança
Criar um grupo de recursos e um cluster AKS
Observação
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.
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}
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
Crie um grupo de recursos usando o comando
az group create
.az group create --location $LOCATION --name $RESOURCE_GROUP
Crie um cluster 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
Habilite o complemento de roteamento de aplicativos com o seguinte comando.
az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
Observação
Se vir uma mensagem a pedir-lhe para instalar a extensão aks-preview, introduza
Y
para instalá-la e continuar.Crie uma zona DNS usando o comando
az network dns zone create
.az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
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
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 da aplicação , pode-se ver que esta aplicação 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.
Implante um banco de dados 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
Depois que o banco de dados for criado, 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"
Crie um novo ficheiro YAML chamado
backend-secret.yaml
e cole o seguinte código para criar a especificação do Secret. Certifique-se de substituir o placeholder pela string 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>"
Salve e feche o arquivo.
Aplique o segredo usando o comando
kubectl apply
.kubectl apply -f backend-secret.yaml
Verifique o resultado consultando o segredo usando o comando
kubectl get secret
.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 o aplicativo
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
, usamos as teclasvalueFrom
esecretKeyRef
. A ordem destas chaves indica à implementação que deve usar o valor dokey
presente no segredo definido na chavename
.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 ---
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
Altere a zona DNS no
host:
para corresponder ao nome da sua zona DNS. Use o valor da variável ZONE_NAME criada anteriormente.Salve e feche o arquivo.
Aplique as alterações ao cluster usando o comando
kubectl apply
.kubectl apply -f backend-application.yaml