練習 - 將變數安全地儲存在祕密中
建立資源群組和 AKS 叢集
注意
此練習為選擇性項目。 如果想要完成此練習,您必須先建立 Azure 訂用帳戶,再開始進行。 如果您沒有 Azure 帳戶,或者目前不想建立帳戶,您可以閱讀相關指示,以了解所呈現的資訊。
針對您的資源群組、叢集、DNS 區域和位置建立環境變數。 請確定您使用最靠近您的地區更新位置變數,例如:
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 區域的識別碼,並將其用作命令的一部分,將區域新增至叢集以進行應用程式路由。
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 檔案,並貼上下列程式碼以建立祕密規格。請務必將預留位置字串取代為先前輸出中的連接字串。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