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. Atualize 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 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
az network dns zone create
comando.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
az aks get-credentials
comando.az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
Criar um segredo
Observação
Na documentação do aplicativo, você pode ver que esse aplicativo tem duas partes: o front-end e o back-end. Somente o back-end precisa usar um Segredo, pois ele 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
az cosmosdb create
comando.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
az cosmosdb keys list
comando 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 usando o
kubectl apply
comando.kubectl apply -f backend-secret.yaml
Verifique o resultado consultando o segredo usando o
kubectl get secret
comando.kubectl get secret ship-manager-database
Você deve obter 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 nomeado
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 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
backend-application.yaml
arquivo 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 sua zona DNS. Use o valor da variável ZONE_NAME que você criou anteriormente.Salve e feche o arquivo.
Aplique as alterações ao cluster usando o
kubectl apply
comando.kubectl apply -f backend-application.yaml