演習 - シークレットでの変数の安全な格納

完了

リソース グループと AKS クラスターを作成する

Note

この演習は省略してもかまいません。 この演習を実行する場合は、始める前に Azure サブスクリプションを作成する必要があります。 Azure アカウントをお持ちでない場合、またはこの時点で作成しない場合は、提示されている情報を理解するため手順に目を通してください。

  1. リソース グループ、クラスター、DNS ゾーン、場所の環境変数を作成します。 LOCATION 変数を自分に最も近いリージョンに必ず更新します。たとえば、eastus です。

    export RESOURCE_GROUP=rg-ship-manager
    export CLUSTER_NAME=ship-manager-cluster
    export ZONE_NAME=ship-$RANDOM.com
    export LOCATION={location}
    
  2. 次のコマンドを実行して環境変数の値を表示し、後で使用できるようにメモしておきます。

    echo "RESOURCE_GROUP:" $RESOURCE_GROUP
    echo "CLUSTER_NAME:"$CLUSTER_NAME
    echo "ZONE_NAME:" $ZONE_NAME
    echo "LOCATION:"$LOCATION
    
  3. az group create コマンドを使用して、リソース グループを作成します。

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. 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
    
  5. 次のコマンドを使用して、アプリケーション ルーティング アドオンを有効にします。

    az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
    

    Note

    aks-preview 拡張機能のインストールを求めるメッセージが表示された場合は、「Y」と入力してインストールし、続行します。

  6. az network dns zone create コマンドを使用して DNS ゾーンを作成します。

    az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
    
  7. 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
    
  8. az aks get-credentials コマンドを使用してお使いのクラスターの資格情報を取得します。

    az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

シークレットの作成

Note

アプリケーション ドキュメントでは、このアプリケーションにはフロントエンドとバックエンドの 2 つの部分があることがわかります。 シークレットを使用する必要があるのはバックエンドだけです。MongoDB 接続文字列が環境変数として含まれるためです。

  1. az cosmosdb create コマンドを使用して、アプリケーションをサポートする MongoDB データベースをデプロイします。

    export DATABASE_NAME=contoso-ship-manager-$RANDOM && \
    az cosmosdb create \
     -n $DATABASE_NAME \
     -g $RESOURCE_GROUP \
     --kind MongoDB
    
  2. データベースが作成されたら、az cosmosdb keys list コマンドを使用して接続文字列を取得し、出力値をコピーします。

    az cosmosdb keys list \
      --type connection-strings \
      -g $RESOURCE_GROUP \
      -n $DATABASE_NAME \
      -o tsv \
      --query "connectionStrings[0].connectionString"
    
  3. 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>"
    
  4. ファイルを保存して閉じます。

  5. kubectl apply コマンドを使用してシークレットを適用します。

    kubectl apply -f backend-secret.yaml
    
  6. kubectl get secret コマンドを使用してシークレットのクエリを実行して、結果を確認します。

    kubectl get secret ship-manager-database
    

    次の例のような出力が得られるはずです。

    NAME                    TYPE     DATA   AGE
    ship-manager-database   Opaque   1      5s
    

アプリケーションを作成する

  1. 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 の値を使用することをデプロイに指示しています。

  2. 次のセクションを区切るために、backend-application.yaml ファイルの最後の行の下に 3 つのダッシュを追加します。

    # 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
    ---
    
  3. 3 つのダッシュの下に、次のコードを貼り付けてイングレス スペックを作成します。

    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
    
  4. host: の DNS ゾーンを変更して、実際の DNS ゾーンの名前と一致させます。 前に作成した ZONE_NAME 変数の値を使用します。

  5. ファイルを保存して閉じます。

  6. kubectl apply コマンドを使用してクラスターに変更を適用します。

    kubectl apply -f backend-application.yaml