「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。 目次 †概要 †「AKSをセキュアに利用する構築デモ」で使ったシェルのコピペ用ページ カスタマイズ †以下の点をカスタマイズした。
WSLでAzure CLI †タイムアウトや、エクステンションの既定値?
詳細 †変数 †初期化パラメタ †アカウント(追加) †XXXXXXXXXは置換して利用。 OS_USER_ID=XXXXXXXXX OS_PASSWORD=XXXXXXXXX VM作成部 †前段 †
パスワード変更 †
既存ディスク使用 †<管理ディスク名>は置換して利用。
※ <管理ディスク名>の準備方法は、この辺を参照。 後段 †
F/W ルール †AKSクラスタ †
Windows保守端末 †
...。 †他にもあったら足して行く。 なお、以下が参考になる。
ガバガバ版 †動かない時に、Firewallの問題との切り分けが大変なので、
プライベートAKSクラスタ †ゴチャゴチャしているので、コチラの構成に合わせて簡素化した決め打ちのコピペ。 Managed ID方式で作成 †# Create AKS Cluster ============================================== # Prepare for creating cluster AKS_VERSION=$(az aks get-versions --location $LOCATION --query 'orchestrators[?!isPreview] | [-1].orchestratorVersion' --output tsv) AKS_VNET_SUBNET_NPS_ID=$(az network vnet subnet show --resource-group $RG_AKS --vnet-name $AKS_VNET_NAME --name $AKS_VNET_SUBNET_NPS_NAME --query id -o tsv) # Create AKS Cluster ※ 時間がかかる az aks create --resource-group $RG_AKS --name $AKS_CLUSTER_NAME --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --location $LOCATION --kubernetes-version $AKS_VERSION --network-plugin azure --vnet-subnet-id $AKS_VNET_SUBNET_NPS_ID --service-cidr $AKS_SERVICE_CIDR --dns-service-ip $AKS_DNS_SERVICE_IP --docker-bridge-address 172.17.0.1/16 --generate-ssh-keys --outbound-type userDefinedRouting --enable-private-cluster --enable-managed-identity # VNET に対する Contributor 権限を与える(VNET が管理リソースグループの外にあるため) AKS_VNET_ID=$(az network vnet show --name $AKS_VNET_NAME --resource-group $RG_AKS --query id -o tsv) AKS_MANAGED_ID=$(az aks show --name $AKS_CLUSTER_NAME --resource-group $RG_AKS --query identity.principalId -o tsv) az role assignment create --assignee $AKS_MANAGED_ID --role "Contributor" --scope $AKS_VNET_ID # End of Create AKS Cluster ============================================== この場合のAcrPull? ロール付与方式 †# Configure ACR for connecting from AKS # この作業により、Service Principal に対して ACR の AcrPull ロールが付与される az aks update --name $AKS_CLUSTER_NAME --resource-group $RG_AKS --attach-acr $ACR_NAME その後のログ関連の設定 †# Azure Monitor for AKS 有効化 DIAG_LA_WS_RESOURCE_ID=$(az monitor log-analytics workspace show --resource-group $RG_OPS --workspace-name $DIAG_LA_WS_NAME --query id -o tsv) # 以下のエラーが出た場合は、Azure CLI のバージョンを変更してトライしてみる。 # The request content was invalid and could not be deserialized: 'Could not find member 'template' on object of type 'DeploymentDefinition'. Path 'template', line 1, position 12.'. az aks enable-addons --addons monitoring --name $AKS_CLUSTER_NAME --resource-group $RG_AKS --workspace-resource-id $DIAG_LA_WS_RESOURCE_ID # AKS 診断設定の有効化 DIAG_STORAGE_ID=$(az storage account show --name $DIAG_STORAGE_NAME --query id -o tsv) DIAG_LA_WS_ID=$(az monitor log-analytics workspace show --workspace-name $DIAG_LA_WS_NAME --resource-group $RG_OPS --query id -o tsv) AKS_CLUSTER_ID=$(az aks show --name $AKS_CLUSTER_NAME --resource-group $RG_AKS --query id -o tsv) az monitor diagnostic-settings create --name $AKS_CLUSTER_NAME --resource $AKS_CLUSTER_ID \ --logs '[{"category": "kube-apiserver","enabled": true},{"category": "kube-audit","enabled": true},{"category": "kube-controller-manager","enabled": true},{"category": "kube-scheduler","enabled": true},{"category": "cluster-autoscaler","enabled": true}]' \ --metrics '[{"category": "AllMetrics","enabled": true}]' \ --storage-account $DIAG_STORAGE_ID --workspace $DIAG_LA_WS_ID ポイントの説明 †
保守端末上の作業 †置換するところが多いので。 6-a. mgmt-win-vm1 上で作業 †XXXXXXXXXは置換して利用。 rem cmd を開いてホームに移動 az login rem ブラウザが開くのでログイン rem Select Subscription SET SUBSCRIPTION_NAME=XXXXXXXXX az account set -s %SUBSCRIPTION_NAME% rem kubeconfig ファイルを取得 SET NAME_PREFIX=daisukenishino SET RG_AKS=%NAME_PREFIX%-aks-rg SET AKS_CLUSTER_NAME=%NAME_PREFIX%-aks del .kube\config rem clusterAdmin 用のトークン取得 az aks get-credentials --resource-group %RG_AKS% --name %AKS_CLUSTER_NAME% --admin ren .kube\config admin-config rem clusterUser 用のトークン取得 az aks get-credentials --resource-group %RG_AKS% --name %AKS_CLUSTER_NAME% 6-b. mgmt-linux-vm1 上で作業 †XXXXXXXXXは置換して利用。 sudo az login # Select Subscription SUBSCRIPTION_NAME=XXXXXXXXX sudo az account set -s "$SUBSCRIPTION_NAME" SUBSCRIPTION_ID=$(az account show -s "$SUBSCRIPTION_NAME" --query id -o tsv) NAME_PREFIX=daisukenishino LOCATION=japaneast RG_AKS="${NAME_PREFIX}-aks-rg" AKS_CLUSTER_NAME="${NAME_PREFIX}-aks" sudo rm .kube/config sudo az aks get-credentials --resource-group $RG_AKS --name $AKS_CLUSTER_NAME --admin sudo mv .kube/config .kube/admin-config sudo az aks get-credentials --resource-group $RG_AKS --name $AKS_CLUSTER_NAME 6-e. mgmt-windows-vm1 上で実施 †OS_USER_IDは置換して利用。
6-f. アプリケーションの配置 †
切り分け関係の作業 †切り分け用のオリジナル手順 †ココの作業は、コチラで言及したWindows開発環境で実施。
*.yamlがダメっぽいので、カスタムした。 †
--- apiVersion: apps/v1 kind: Deployment metadata: name: webapp spec: replicas: 3 selector: matchLabels: app: webapp strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 minReadySeconds: 5 template: metadata: labels: app: webapp spec: containers: - name: webapp image: ***daisukenishinoaksacr.azurecr.io/XXXX:v1*** ports: - containerPort: ***3000*** resources: requests: cpu: 250m limits: cpu: 500m --- apiVersion: v1 kind: Service metadata: name: webapp annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "InternalEndpointSubnet" spec: selector: app: webapp ports: - protocol: TCP port: 80 targetPort: ***3000*** type: LoadBalancer loadBalancerIP: 10.11.0.10
apiVersion: apps/v1 kind: Deployment metadata: name: azure-vote-back spec: replicas: 3 selector: matchLabels: app: azure-vote-back template: metadata: labels: app: azure-vote-back spec: nodeSelector: "beta.kubernetes.io/os": linux containers: - name: azure-vote-back image: redis ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: azure-vote-back spec: ports: - port: 6379 selector: app: azure-vote-back --- apiVersion: apps/v1 kind: Deployment metadata: name: webapp spec: replicas: 3 selector: matchLabels: app: webapp strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 minReadySeconds: 5 template: metadata: labels: app: webapp spec: containers: - name: webapp image: daisukenishinoaksacr.azurecr.io/azure-vote-front:v1 ports: - containerPort: 80 resources: requests: cpu: 250m limits: cpu: 500m env: - name: REDIS value: "azure-vote-back" --- apiVersion: v1 kind: Service metadata: name: webapp annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "InternalEndpointSubnet" spec: selector: app: webapp ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer loadBalancerIP: 10.11.0.10 参考 †Tags: :クラウド, :コンテナ, :Azure, :AKS, :IaC, :セキュリティ, :通信技術, :セキュリティ, :認証基盤 |