マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

AKSをセキュアに利用する構築デモ」で使ったシェルのコピペ用ページ

カスタマイズ

以下の点をカスタマイズした。

WSLAzure CLI

タイムアウトや、エクステンションの既定値?
の関係で、やっぱ、ローカルで利用したいなぁと。

詳細

変数

初期化パラメタ

アカウント(追加)

XXXXXXXXXは置換して利用。

OS_USER_ID=XXXXXXXXX
OS_PASSWORD=XXXXXXXXX

VM作成部

前段

パスワード変更

既存ディスク使用

<管理ディスク名>は置換して利用。

<管理ディスク名>の準備方法は、この辺を参照。

後段

F/W ルール

AKSクラスタ

Windows保守端末

...。

他にもあったら足して行く。

なお、以下が参考になる。

ガバガバ版

動かない時に、Firewallの問題との切り分けが大変なので、
application-ruleを無くし、network-rule で dst を any の * にしたガバガバ設定。

プライベート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. アプリケーションの配置

※ web_v1.yamlは、ココに定義されているオリジナルの*.yaml。

切り分け関係の作業

切り分け用のオリジナル手順

ココの作業は、コチラで言及したWindows開発環境で実施。

※ 動かなかったら何回か起動・停止を繰り返してみる。

※ ACR_NAMEは、以下で確認する。

$ echo $ACR_NAME

*.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, :セキュリティ, :通信技術, :セキュリティ, :認証基盤


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS