「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>AKSをセキュアに利用する構築デモ]]

* 目次 [#b6b327f1]
#contents

*概要 [#y0aa18d3]
「[[AKSをセキュアに利用する構築デモ]]」で使ったシェルのコピペ用ページ

**カスタマイズ [#zee65a74]
以下の点をカスタマイズした。

-アカウントが固定な所を修正
-Windowsを既存のディスクで作成する。
-選択的な所を推奨設定に絞った。
-あと、トラブルシュートの切り分け~
で使用したシェルやDeployment.yamlなど。

**[[WSL>Windows Subsystem for Linux]]で[[Azure CLI]] [#o18f015e]
タイムアウトや、エクステンションの既定値?~
の関係で、やっぱ、ローカルで利用したいなぁと。

-「[[WSLへのインストール方法>Azure CLI#b0af5ab5]]」を参照。
-なお、[[Azure CLI拡張のインストール>AKSをセキュアに利用する構築デモ#qcfe77c9]]は再実行が必要になる。

*詳細 [#x12df70d]

**変数 [#l448f4d0]

***[[初期化パラメタ>AKSをセキュアに利用する構築デモ#ecb71389]] [#k9273b5e]

***アカウント(追加) [#c634ed97]
&color(red){XXXXXXXXX};は置換して利用。

 OS_USER_ID=XXXXXXXXX
 OS_PASSWORD=XXXXXXXXX

**VM作成部 [#e370726b]

***前段 [#ee57f9aa]
-オンプレVM~
&color(red){[X]};は置換して利用 (1-n)。
 az network public-ip create --name uservmX-ip --resource-group $RG_ONP --sku Standard
 ONP_VNET_SUBNET_DEF_ID=$(az network vnet subnet show --resource-group $RG_ONP --vnet-name $ONP_VNET_NAME --name $ONP_VNET_SUBNET_DEF_NAME --query id -o tsv)
 az network nic create --name uservmXnic --subnet $ONP_VNET_SUBNET_DEF_ID --resource-group $RG_ONP --location $LOCATION --public-ip-address uservmX-ip

-Windows保守端末VM
--[[Azure Private Link]]設定するので何台も作れない。
--ターミナル化して使うのが良いのかも(Linuxターミナルという手もある)。

-Linux保守端末VM~
&color(red){[X]};は置換して利用 (1-n)。
 MGMT_LINUX_VM_NAME=mgmt-linux-vmX
 MGMT_LINUX_VM_NIC_NAME="${MGMT_LINUX_VM_NAME}-nic"

***パスワード変更 [#f86ee9be]
-オンプレVM~
&color(red){[X]};は置換して利用 (1-n)。
 az vm create --name uservmX --image "MicrosoftWindowsDesktop:Windows-10:19h2-ent:18363.720.2003120536" --admin-username $OS_USER_ID --admin-password $OS_PASSWORD --nics uservmXnic --resource-group $RG_ONP --location $LOCATION --size Standard_D2_v3

-Windows保守端末VM
 az vm create --name $MGMT_WIN_VM_NAME --image Win2019Datacenter --admin-username $OS_USER_ID --admin-password $OS_PASSWORD --nics $MGMT_WIN_VM_NIC_NAME --resource-group $RG_AKS --location $LOCATION --size Standard_D2_v3

-Linux保守端末VM
 az vm create --name $MGMT_LINUX_VM_NAME --image UbuntuLTS --admin-username $OS_USER_ID --admin-password $OS_PASSWORD --nics $MGMT_LINUX_VM_NIC_NAME --resource-group $RG_AKS --location $LOCATION --generate-ssh-keys --size Standard_D2_v3

***既存ディスク使用 [#m84ba9f4]
&color(red){<管理ディスク名>};は置換して利用。

-オンプレVM~
&color(red){[X]};は置換して利用 (1-n)。
 az vm create --name uservmX --attach-os-disk <管理ディスク名> --nics uservmXnic --resource-group $RG_ONP --location $LOCATION --size Standard_D4s_v3 --os-type Windows

-Windows保守端末VM
 az vm create --name $MGMT_WIN_VM_NAME --attach-os-disk <管理ディスク名> --nics $MGMT_WIN_VM_NIC_NAME --resource-group $RG_AKS --location $LOCATION --size Standard_D4s_v3 --os-type Windows

※ &color(red){<管理ディスク名>};の準備方法は、[[この辺>Azure上に素早く環境を構築する#z6270e46]]を参照。

***後段 [#y8eb68a3]
-オンプレVM~
&color(red){[X]};は置換して利用。
 az vm open-port --resource-group $RG_ONP --name uservmX --port 3389

-Windows保守端末VM
--[[Azure Private Link]]設定するので何台も作れない。
--ターミナル化して使うのが良いのかも(Linuxターミナルという手もある)。

-Linux保守端末VM~
なし(open-portしないのでなにもない)

**F/W ルール [#t9e6d1e3]

***AKSクラスタ [#nd13ebe9]
-Required_for_AKS_clusters > MCR~
 az network firewall application-rule create  --firewall-name $FW_NAME --resource-group $RG_AKS \
 --collection-name "Required_for_AKS_clusters" --priority 200 --action "Allow" \
 --name "MCR" --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 \
 --target-fqdns "*.cdn.mscr.io" "mcr.microsoft.com" "*.data.mcr.microsoft.com" "registry-1.docker.io"

--「[[n-app>#lfb210f2]]」と言うコンテナをテストしようとしたら、~
「registry-1.docker.io」が必要になったりした。

--なお、
---MCRとあるが、ACRも対象である模様。
---[[MCR>Microsoft Container Registry]]とあるが、[[ACR>Azure Container Registry]]も対象である模様。
---以下のような方法もあるらしい。

--参考
---コンテナー イメージのインポート | Microsoft Docs~
パブリック レジストリからインポートする~
https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-import-images#import-from-a-public-registry

***Windows保守端末 [#q6a74f52]
-Required_for_management_Windows_VMs > Azure AD Authentication
 az network firewall application-rule create  --firewall-name $FW_NAME --resource-group $RG_AKS \
 --collection-name "Required_for_management_Windows_VMs" \
 --name "Azure AD Authentication" --source-addresses "${MGMT_WIN_NIC_IP_ADDRESS}/32" --protocols https=443 \
 --target-fqdns "login.microsoftonline.com" "aadcdn.msftauth.net" "msft.sts.microsoft.com" "login.live.com"

--"login.live.com" が空いてないので追加。

--組織アカウントでないからかもしれない。~
組織アカウントに絞るなら開けないほうが良いかも。

***...。 [#h16bb88c]
他にもあったら足して行く。

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

-Azure Kubernetes Service (AKS) でエグレス トラフィックを制限する | Microsoft Docs~
https://docs.microsoft.com/ja-jp/azure/aks/limit-egress-traffic


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

-AKS環境
--オリジナル版
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Required_for_AKS_clusters"             --action "Allow" --priority 200 --name "MCR"                                               --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "*.cdn.mscr.io" "mcr.microsoft.com" "*.data.mcr.microsoft.com"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Required_for_AKS_clusters"                                             --name "k8s GET PUT operations"                            --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "management.azure.com"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Required_for_AKS_clusters"                                             --name "Azure AD authentication"                           --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "login.microsoftonline.com"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Required_for_AKS_clusters"                                             --name "apt-get operation for Moby, PowerShell, Azure CLI" --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "packages.microsoft.com"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Required_for_AKS_clusters"                                             --name "repository for kubenet, Azure CNI"                 --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "acs-mirror.azureedge.net"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Optional_for_AKS_clusters"             --action "Allow" --priority 300 --name "download security patches for linux nodes"         --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols http=80   --target-fqdns "security.ubuntu.com" "azure.archive.ubuntu.com" "changelogs.ubuntu.com"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Azure_Policy_for_AKS_clusters_preview" --action "Allow" --priority 500 --name "correct metrics and monitoring telemetry"          --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "gov-prod-policy-data.trafficmanager.net" "raw.githubusercontent.com" "*.gk.${LOCATION}.azmk8s.io" "dc.services.visualstudio.com"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Azure_Monitor_for_containers"          --action "Allow" --priority 400 --name "Correct data, authentication, for agent"           --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "dc.services.visualstudio.com" "*.ods.opinsights.azure.com" "*.oms.opinsights.azure.com" "*.microsoftonline.com" "*.monitoring.azure.com"
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Azure_Monitor_for_containers"                                          --name "kubeapi-proxy"                                     --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols https=443 --target-fqdns "aks-kubeapi-proxy-prod.trafficmanager.net"
 az network firewall network-rule     create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Required_for_AKS_clusters"             --action "Allow" --priority 200 --name "NTP time synchronization on Linux nodes"           --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols "UDP"     --destination-addresses "*" --destination-ports 123

--ガバガバ版~
network-ruleのみ。
  az network firewall network-rule     create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "hoge"                                  --action "Allow" --priority 200 --name "hoge"                                              --source-addresses "${AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX}" --protocols "Any"     --destination-addresses "*" --destination-ports "*"

-保守環境(Win)
--オリジナル版
 MGMT_WIN_NIC_IP_ADDRESS=$(az network nic show --name $MGMT_WIN_VM_NIC_NAME --resource-group $RG_AKS --query ipConfigurations[0].privateIpAddress -o tsv)
 az network firewall application-rule create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "Required_for_management_Windows_VMs"   --action "Allow" --priority 1000 --name "WindowsUpdate"                                    --source-addresses "${MGMT_WIN_NIC_IP_ADDRESS}/32"         --protocols http=80 https=443 --fqdn-tags "WindowsUpdate" "WindowsDiagnostics" "MicrosoftActiveProtectionService"

--ガバガバ版~
network-ruleのみ。
 MGMT_WIN_NIC_IP_ADDRESS=$(az network nic show --name $MGMT_WIN_VM_NIC_NAME --resource-group $RG_AKS --query ipConfigurations[0].privateIpAddress -o tsv)
 az network firewall network-rule     create --firewall-name $FW_NAME --resource-group $RG_AKS --collection-name "hogehoge"                              --action "Allow" --priority 1000 --name "hogehoge"                                         --source-addresses "${MGMT_WIN_NIC_IP_ADDRESS}/32"         --protocols "Any"     --destination-addresses "*" --destination-ports "*"

**プライベートAKSクラスタ [#dc763501]
ゴチャゴチャしているので、[[コチラ>AKSをセキュアに利用する構築デモ#k241e08b]]の構成に合わせて簡素化した決め打ちのコピペ。

***[[Managed ID>Azure Managed ID]]方式で作成 [#k45473a7]
 # 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 ロール付与方式 [#x3d4c330]
 # 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

***その後のログ関連の設定 [#ed6a447f]
 # 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

***ポイントの説明 [#j012fc59]
-なぜ、ココのスクリプトがゴチャゴチャしているか?と言うと、
>「AKS クラスタを[[Azure Firewall]]配下の[[VNET>Azureの仮想ネットワーク]]に配置しようとした場合で、~
コレを非プライベート・クラスタとして作成しようとすると、以下な手順が必要になるため。」

>です。

-ゴチャゴチャしている所で、以下の様な事をしています。

--非プライベート AKS クラスタの場合、Master APIに外回りでアクセスする。
---従って、Azure Firewall のルールに追加が必要になるが、
---Master API へのアクセス経路が必要Master API のアドレスが未確定のため、
---いったん "*" 宛として TCP 22, 443, 9000, UDP 1194 を空ける。

--最後に、Master API アドレスが確定したら、
---上記で開放した経路を絞る。
---また、保守端末からもMaster API へアクセスできるようにする。
---追加で、Master API 側の IP アドレス制限機能を有効化する。

**保守端末上の作業 [#d5807581]
置換するところが多いので。

***6-a. mgmt-win-vm1 上で作業 [#j09d4792]
&color(red){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 上で作業 [#mc837122]
&color(red){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 上で実施 [#ve1977aa]
[[OS_USER_ID>#c634ed97]]は置換して利用。

-以下は、CMDで
 rem C:\Users\OS_USER_ID\AzRefArc.SpringBoot 下にファイルを展開
 rem .mvn, src. Dockerfile, mvnw などがこのフォルダの直下に来るように
  
 rem mgmt-windows-vm1 のコマンドラインから以下を実行
 scp -r C:\Users\OS_USER_ID\AzRefArc.SpringBoot OS_USER_ID@mgmt-linux-vm1:/home/OS_USER_ID/

-以下は、SSHで

--Dockerビルド
 # mgmt-linux-vm1 にログインし、Docker コンテナを 2 つビルドする
 # ライブラリをオンデマンドダウンロードするためビルドにはそれなりに時間がかかる (5分ぐらい)
 # Docker build は最後のピリオドを忘れないように
 cd ~/AzRefArc.SpringBoot
 sudo docker build -t azrefarc.springboot:1 .
 # トップページの文字を入れ替えた v2 アプリを作っておく
 cp -b index_v2.html src/main/resources/templates/index.html
 sudo docker build -t azrefarc.springboot:2 .
 cd ~
  
 # レポジトリにプッシュ
 NAME_PREFIX=daisukenishino
 ACR_NAME="${NAME_PREFIX}aksacr"
 sudo docker tag azrefarc.springboot:1 ${ACR_NAME}.azurecr.io/azrefarc.springboot:1
 sudo docker tag azrefarc.springboot:2 ${ACR_NAME}.azurecr.io/azrefarc.springboot:2

--ワンクッション
 # sudo docker login ${ACR_NAME}.azurecr.io だと username/password ログイン
 # Azure AD 認証でログインするために、sudo az login したのちに az acr login コマンドを利用
 # トークン書き込みのために sudo で実行
 sudo az login
 sudo az acr login --name ${ACR_NAME}.azurecr.io

--コンテナ・イメージをプッシュ
 sudo docker push ${ACR_NAME}.azurecr.io/azrefarc.springboot:1
 sudo docker push ${ACR_NAME}.azurecr.io/azrefarc.springboot:2

***6-f. アプリケーションの配置 [#dd2b52c9]
-*.yamlフィアイルの中~
&color(red){[X](タグ)};は必要に応じて修正。
 image: daisukenishinoaksacr.azurecr.io/azrefarc.springboot:X

-k8s ダッシュボード起動
 SET NAME_PREFIX=daisukenishino
 SET RG_AKS=%NAME_PREFIX%-aks-rg
 SET AKS_CLUSTER_NAME=%NAME_PREFIX%-aks
 az aks browse -n %AKS_CLUSTER_NAME% -g %RG_AKS%

-デプロイの
--apply
 kubectl apply -f web_v1.yaml
--delete
 kubectl delete services web --namespace azrefarc-springboot

>※ web_v1.yamlは、[[ココ>https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md#6-f-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%85%8D%E7%BD%AE]]に定義されているオリジナルの*.yaml。

**切り分け関係の作業 [#c37d813a]

***切り分け用のオリジナル手順 [#lfb210f2]
ココの作業は、[[コチラ>AKSをセキュアに利用する構築デモ#o5cf99dd]]で言及したWindows開発環境で実施。

-起動
 git clone https://github.com/ryo-ohnishi/node_express.git
 cd node_express
 docker-compose up -d

-実行確認
>http://localhost:3000/

-停止
 >docker-compose down

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

-イメージを確認し
 >docker images
 REPOSITORY                                         TAG                 IMAGE ID            CREATED             SIZE
 n-app                                              latest              8aecd52a6fd3        45 minutes ago      674MB

-タグを設定し
 >docker tag n-app daisukenishinoaksacr.azurecr.io/n-app:v1

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

-プッシュする
--azでログイン
 az login
--azでacrにログイン
 az acr login --name daisukenishinoaksacr.azurecr.io
--dockerでプッシュ~
(az → dockerに、Tokenが渡っているらしい)
 docker push daisukenishinoaksacr.azurecr.io/n-app:v1

-[[*.yamlを書き換えて再チャレンジしたが...>#k2e546f4]]

*** *.yamlがダメっぽいので、カスタムした。 [#k2e546f4]
-色々調査を進めていると、オリジナルの*.yamlがダメっぽい。

--具体的に言うと、Podがエラーになる(以下のようなエラー)。
 CrashLoopBackOff, SyncLoadBalancerFailed

--...で、別のモノ([[voting-app>Azure Kubernetes Service (AKS)#c7683828]])を試すと
---Podは上がるが、Serviceが上がらない。
---ただ、コレは、VNETに接続しているからアドレス体系の問題のような気もする。

-という事で、~
コンテナイ・メージを、下記のハイブリッドな*.yamlに組込むことに。~
(コレは、簡易アプリのDeploymentに、本デモ用のServiceを加えたもの)
--&color(red){***};の部分を書き換える。
--&color(red){XXX};の部分は以下から選択。
---azure-vote-front(containerPortは80)
---n-app(containerPortは3000)

>
 ---
 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

-...結局、以下で(voting-appで)動作した
--AKSチュートリアルで実績のある、voting-appでのみ上手く起動した。
--n-appは、Javaアプリ同様、Docker Composeでは動作したが、AKSで動作せず。
--なお、voting-appは、azure-vote-backも動かさないとazure-vote-front側が落ちる。

>
 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

*参考 [#x5c6efe2]

----
Tags: [[:クラウド]], [[:コンテナ]], [[:Azure]], [[:AKS]], [[:IaC]], [[:セキュリティ]], [[:通信技術]], [[:セキュリティ]], [[:認証基盤]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS