练习 - 安全地将变量存储在机密中
创建资源组和 AKS 群集
注释
本练习为选做练习。 若要完成本练习,需要在开始之前创建 Azure 订阅。 如果没有 Azure 帐户,或者现在不想创建帐户,则可以通读说明,以便了解所提供的信息。
为资源组、群集、DNS 区域和位置创建环境变量。 确保将 LOCATION 变量更新为离你最近的区域,例如
eastus
。export RESOURCE_GROUP=rg-ship-manager export CLUSTER_NAME=ship-manager-cluster export ZONE_NAME=ship-$RANDOM.com export LOCATION={___location}
运行以下命令以查看环境变量的值,并记下它们以供以后使用。
echo "RESOURCE_GROUP:" $RESOURCE_GROUP echo "CLUSTER_NAME:"$CLUSTER_NAME echo "ZONE_NAME:" $ZONE_NAME echo "LOCATION:"$LOCATION
使用
az group create
命令创建资源组。az group create --___location $LOCATION --name $RESOURCE_GROUP
使用
az aks create
命令创建 AKS 群集。az aks create \ -g $RESOURCE_GROUP \ -n $CLUSTER_NAME \ --___location $LOCATION \ --node-count 1 \ --node-vm-size Standard_B2s \ --generate-ssh-keys
使用以下命令启用应用程序路由加载项。
az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
注释
如果看到一条消息,要求你安装 aks-preview 扩展,请输入
Y
以安装它并继续。使用
az network dns zone create
命令创建 DNS 区域。az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
检索 DNS 区域的 ID,并将其用作命令的一部分,以将区域添加到群集进行应用路由。
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
使用
az aks get-credentials
命令获取群集的凭据。az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
创建机密
注释
在 应用程序文档中,可以看到此应用程序有两个部分:前端和后端。 只有后端需要使用机密,因为它具有 MongoDB 连接字符串作为环境变量。
部署 MongoDB 数据库以支持使用
az cosmosdb create
命令的应用程序。export DATABASE_NAME=contoso-ship-manager-$RANDOM && \ az cosmosdb create \ -n $DATABASE_NAME \ -g $RESOURCE_GROUP \ --kind MongoDB
创建数据库后,使用
az cosmosdb keys list
命令获取连接字符串并复制输出值。az cosmosdb keys list \ --type connection-strings \ -g $RESOURCE_GROUP \ -n $DATABASE_NAME \ -o tsv \ --query "connectionStrings[0].connectionString"
创建一个名为
backend-secret.yaml
的新 YAML 文件,并将以下代码粘贴到文件中以创建 Secret 规范。请确保将占位符字符串替换为之前输出的连接字符串。apiVersion: v1 kind: Secret metadata: name: ship-manager-database namespace: default type: Opaque stringData: database_mongodb_uri: "<paste the connection string here>"
保存并关闭该文件。
使用
kubectl apply
命令应用机密。kubectl apply -f backend-secret.yaml
使用
kubectl get secret
命令查询密钥以检查结果。kubectl get secret ship-manager-database
应获得类似于以下示例的输出:
NAME TYPE DATA AGE ship-manager-database Opaque 1 5s
创建应用程序
创建一个名为
backend-application.yaml
的新 YAML 文件,并粘贴以下代码以创建部署规范。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
请注意,在本
env
部分中,我们使用valueFrom
键和secretKeyRef
键。 这些密钥的顺序指示部署使用name
密钥中定义的机密中key
的值。在文件中最后一行
backend-application.yaml
下方添加三条短划线以分隔下一节。# 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 ---
在三条短划线的下方,粘贴以下代码以创建 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
将
host:
中的 DNS 区域更改为与您的 DNS 区域名称匹配。 使用前面创建的ZONE_NAME变量的值。保存并关闭该文件。
使用
kubectl apply
命令将更改应用到群集。kubectl apply -f backend-application.yaml