练习 - 将变量安全地存储在机密中
创建资源组和 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 连接字符串作为环境变量。
使用
az cosmosdb create
命令部署 MongoDB 数据库以支持应用程序。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 文件,并在其中粘贴以下代码以创建机密规范。请确保将占位符字符串替换为上述输出中的连接字符串。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 ---
在三条短划线的下方,粘贴以下代码以创建入口规范。
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