Exercício – Armazenar variáveis em segurança nos segredos
Criar um grupo de recursos e um cluster AKS
Nota
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
az group create
comando.az group create --location $LOCATION --name $RESOURCE_GROUP
Crie um cluster AKS usando o
az aks create
comando.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
Nota
Se vir uma mensagem a pedir-lhe para instalar a extensão aks-preview , entre
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 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 para o cluster usando o
az aks get-credentials
comando.az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
Criar um segredo
Nota
Na documentação do aplicativo, você pode ver que este aplicativo 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
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 comando e copie o
az cosmosdb keys list
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 chamado
backend-secret.yaml
e cole no código a seguir para criar a especificação secreta. Certifique-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>"
Guarde e feche o ficheiro.
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 exemplo a seguir:
NAME TYPE DATA AGE ship-manager-database Opaque 1 5s
Criar a aplicação
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
env
seção, usamos asvalueFrom
teclas esecretKeyRef
. A ordem dessas chaves diz à implantação para usar okey
valor do presente no Segredo definido naname
chave.Adicione três traços abaixo da última linha do
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 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.Guarde e feche o ficheiro.
Aplique as alterações ao cluster usando o
kubectl apply
comando.kubectl apply -f backend-application.yaml