Exercício – armazenar variáveis com segurança em segredos
Criar um grupo de recursos e um cluster do AKS
Observação
Este exercício é opcional. Para concluir este exercício, será necessário criar uma assinatura do Azure antes de começar. Se você não tiver uma conta do Azure ou não quiser criar uma no momento, poderá ler 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 localização. Não deixe de atualizar a variável LOCATION para 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 de suas variáveis de ambiente e anote-os 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 do 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 aplicativo com o comando a seguir.
az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
Observação
Se você vir uma mensagem solicitando que você instale a extensão aks-preview, insira
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 zona DNS e use-a como parte do comando para adicionar a zona ao cluster para roteamento de aplicativo.
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 do aplicativo, é possível ver que esse aplicativo tem duas partes: a front-end e a back-end. Apenas a back-end precisa usar um Segredo, pois tem a cadeia de conexão do MongoDB como uma variável de ambiente.
Implante um banco de dados do 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 de criar o banco de dados, 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 arquivo YAML nomeado
backend-secret.yaml
e cole no código a seguir para criar a especificação de Segredo. Lembre-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>"
Salve e feche o arquivo.
Aplique o segredo com o comando
kubectl apply
.kubectl apply -f backend-secret.yaml
Verifique o resultado ao consultar o segredo com o comando
kubectl get secret
.kubectl get secret ship-manager-database
Obtenha uma saída semelhante ao seguinte exemplo:
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
, são usadas as chavesvalueFrom
esecretKeyRef
. A ordem das chaves indica à implantação para usar o valor dakey
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 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
Altere a zona DNS na
host:
para corresponder ao nome da 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