演習 - シークレットでの変数の安全な格納
リソース グループと AKS クラスターを作成する
Note
この演習は省略してもかまいません。 この演習を実行する場合は、始める前に 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
Note
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
シークレットの作成
Note
アプリケーション ドキュメントでは、このアプリケーションにはフロントエンドとバックエンドの 2 つの部分があることがわかります。 シークレットを使用する必要があるのはバックエンドだけです。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
ファイルの最後の行の下に 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 つのダッシュの下に、次のコードを貼り付けてイングレス スペックを作成します。
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