「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
以下の権限を持つユーザで作業
以下で固定になってるので、必要に応じて変更する。
--admin-username azrefadmin
--admin-password "p&ssw0rdp&ssw0rd"
"login.live.com" が空いてないので追加。
組織アカウントでないからかもしれない。
組織アカウントに絞るなら開けないほうが良いかも。
AKS_TechnicalReference_v0.14(ppt).zipに同梱のPPTから引用
コチラの推奨設定と少々異なる(プライベートAKSクラスタにする)。
※ サマリすると
となる。
インバウンド(イングレス
アウトバウンド(エグレス
以下の併用
保守用端末を VNET 内に設置する想定。
プライベート化しない(既存のアクセス制限機能を想定)
Managed ID 方式で作成する。
Secret機能を使用
必要に応じて
バージョンアップを手動で実施。
VNET 内に本番用コンテナ・レジストリを配置するのみ
(ACR(コンテナ・レジストリ)をプライベート化する。)
https://github.com/tsubasaxZZZ/aks-hardway/blob/master/deploy-private-cluster.md
※ 必要に応じて、サブスクリプションの選択を行う。
※ 「SUBSCRIPTION_NAMEは各自で書き換え」とのこと。
※ 再開の際は、再実行(テキスト・ファイルへ)。
※ 「NAME_PREFIXは各自で書き換え」とのこと。
※ 再開の際は、再実行(テキスト・ファイルへ)。
※ 「時間かかるので注意(20 分ぐらい)」とのこと。
以下のパートのスクリプトを実行して、パラメタを設定
# Parameters
※ 再開の際は、再実行(テキスト・ファイルへ)。
以下のパートのスクリプトを実行
# Create Resouce Group
az group create --name $RG_OPS --location $LOCATION
az group create --name $RG_AKS --location $LOCATION
az group create --name $RG_DMZ --location $LOCATION
az group create --name $RG_ONP --location $LOCATION
以下のパートのスクリプトを実行
# Create Diagnostics Storage
※ インターネット・アクセス禁止オプションあり。
以下のパートのスクリプトを実行
# Create Log Analytics & AppInsights
※ Log Analytics は 90日ログ保持オプションあり。
以下のパートのスクリプトを実行
# Enable Subscription Activity Logging
※ だが、現時点では UI から実施とのこと(動画も参考になる)。
以下のパートのスクリプトを実行して、パラメタを設定
# Parameters
※ 再開の際は、再実行(テキスト・ファイルへ)。
以下のパートのスクリプトを実行
# Create Onpremise VNET
ONP_VNET_NAME="${NAME_PREFIX}-onprem-vnet" ONP_VNET_ADDRESS_PREFIXES=10.0.0.0/16※ 全体構成図と突合して、サブネット構成を理解しておくと良い。
ONP_VNET_SUBNET_DEF_NAME=Default ONP_VNET_SUBNET_DEF_ADDRESS_PREFIX=10.0.0.0/24
ONP_VNET_SUBNET_IES_NAME=InternalEndpointSubnet ONP_VNET_SUBNET_IES_ADDRESS_PREFIX=10.0.250.0/24※ IESじゃなくて、PES(PrivateEndpointSubnet?)だね。
以下のパートのスクリプトを実行
# Create uservm1 (Public IP + Open RDP Port)
※ VM生成のAzure CLIスクリプトとして参考になる。
パブリックIP作成、NIC作成を別で行っている(が特に意味はない模様)。
※ オンプレの模倣ということで、Windows 10 を選択している?
※ Visual Studio のアクティブ・サブスクライバでない場合は、
Windows 10 ではなく Windows Server 2019 を利用(ライセンスの関係らしい)
既定のスクリプトは、Windows 10になっているので、必要に応じて変更。
※ 最後に「az vm open-port」でRDPポートを開けるオマケが付いているので注意。
以下のパートのスクリプトを実行して、パラメタを設定
# Variables
※ 再開の際は、再実行(テキスト・ファイルへ)。
以下のパートのスクリプトを実行
#Create VNET & Subnets
AKS_VNET_NAME="${NAME_PREFIX}-aks-vnet" AKS_VNET_ADDRESS_PREFIXES=10.0.0.0/8※ 全体構成図と突合して、サブネット構成を理解しておくと良い。
AKS_VNET_SUBNET_MMS_NAME=ManagementSubnet AKS_VNET_SUBNET_MMS_ADDRESS_PREFIX=10.16.0.0/16
AKS_VNET_SUBNET_NPS_NAME=NodepoolSubnet AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX=10.1.0.0/16
AKS_VNET_SUBNET_IES_NAME=InternalEndpointSubnet AKS_VNET_SUBNET_IES_ADDRESS_PREFIX=10.11.0.0/16※ シェルではなく*.yamlから利用
AKS_VNET_SUBNET_PES_NAME=PrivateEndpointSubnet AKS_VNET_SUBNET_PES_ADDRESS_PREFIX=10.15.0.0/16
AKS_VNET_SUBNET_PLS_NAME=PrivateLinkServiceNatSubnet AKS_VNET_SUBNET_PLS_ADDRESS_PREFIX=10.12.0.0/16
AKS_VNET_SUBNET_FWS_NAME=AzureFirewallSubnet AKS_VNET_SUBNET_FWS_ADDRESS_PREFIX=10.31.0.0/16※ 使っていない?
AKS_VNET_SUBNET_BTS_NAME=AzureBastionSubnet AKS_VNET_SUBNET_BTS_ADDRESS_PREFIX=10.30.0.0/16※ 使っていない?
※ ノードプールのIP消費が多いので、
/16でサブネッティングしているとの事。
※ しれっと、VNETの「az monitor diagnostic-settings create」をしている。
# Create ACR※ Azure Private Endpoint 引き込みをサポートするPremiumのskuを使用。
# Create PrivateLink to ACR ... # azrefarcacr... の A レコード作成※ ココのスクリプトはPreviewなので変更の可能性アリとのこと → 特にDNS弄る所。
...※ よくよく見ると、DBを作ってない(コロナ"COVID-19"の影響だということ)。
# Service Endpoint for SQL DB※ マネージド・インスタンスは、Azure Private Endpoint が使えない
# Create Azure Firewall
# Create UDR and assign UDR※ 既定のUDRとして、「AKS_UDR_NAME」を作成、
# Create Firewall Rules
# Required for private AKS cluster az network firewall application-rule create...※ 前述の既定のUDR(AKS_UDR_NAME)をノードプールのサブネットに適用する。
# ntp.ubuntu.com -> * az network firewall network-rule create...
# Optional for AKS cluster az network firewall application-rule create...
# Azure Monitor for containers az network firewall application-rule create...
# Azure Policy for AKS clusters (preview, subject to be changed) az network firewall application-rule create...
※ ルールの作成には、かなり時間がかかるらしい(10分ぐらい)。
オンプレから接続する踏み台VM相当。
# Parameters※ 再開の際は、再実行(テキスト・ファイルへ)。
# ILB 配下に VM を作成 # NIC を先に作成(IP アドレスを確定させる)※ 後で、Azure Private Linkを作成するので、ILB → NICと作成するのがポイント。
# Azure Firewall ルールで Windows Update などを許可 # Azure Firewall ルールで) Azure Portal (を許可※ 同様に、ルールの作成には、かなり時間がかかるらしい(10分ぐらい?)。
# VM 作成 (Windows 2019) # Create mgmt-win-vm1※ オンプレ(模倣)環境ではない、Azure環境ということで、コチラは、2019か。
# Private Link Service 作成 # Create Private Endpoint to MgmtVM ILB※ コチラの手順が参考になる。
# Cloud Shell 上でインストールする aks バージョンを確認しておく
>az aks install-cli --client-version=1.16.7・このファイルをコピーする。
>copy %HOMEPATH%\.azure-kubectl\kubectl.exe %HOMEPATH%\kubectl.exe・または、フィアルへのパスを通す。
...
※ 「持ち込み」となっているモノは、Azure Firewallで設定していないもの。
踏み台VMから接続し、アプリのビルドや、Dockerコンテナ作業を行う。
# Parameters※ 再開の際は、再実行(テキスト・ファイルへ)。
# NIC を先に作成(IP アドレスを確定させる)※ こちらは、Azure Private Linkを構成しないので、ILBは不要。
# Azure Firewall ルールで通信を許可※ コチラは、JavaのビルドやDocker操作があるので、ソレ用に穴をあける。
# Create mgmt-linux-vm1 (Ubuntu)
ssh mgmt-linux-vm1
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install -y docker-ce sudo docker version
sudo apt-get update sudo apt-get install snapd sudo snap install helm --classic
オンプレ模倣環境の作成をスキップできる。
BASTION_NAME="${NAME_PREFIX}-bastion" BASTION_PUBLIC_IP_NAME="${BASTION_NAME}-ip"※ 再開の際は、再実行(テキスト・ファイルへ)。
az network public-ip create --name $BASTION_PUBLIC_IP_NAME --resource-group $RG_AKS --sku Standard az network bastion create --name $BASTION_NAME --public-ip-address $BASTION_PUBLIC_IP_NAME --resource-group $RG_AKS --vnet-name $AKS_VNET_NAME --location $LOCATION
※ 結構、時間がかかる。
以下のパートのスクリプトを実行して、パラメタを設定
# Parameters
※ 再開の際は、再実行(テキスト・ファイルへ)。
# Create AKS Cluster ============================================== ... # Prepare for creating cluster ... # Create AKS Cluster ※ 時間がかかる az aks create ...既定値なら、既定のオプションでOK... ... # VNET に対する Contributor 権限を与える(VNET が管理リソースグループの外にあるため) # Managed ID 方式の場合 ... # End of Create AKS Cluster ==============================================※ コレは、ココの話。
# Configure ACR for connecting from AKS※ コレは、ココの話。
# Azure Monitor for AKS 有効化 ...※ 数分、時間がかかる。
# AKS 診断設定の有効化 ...※ 数分、時間がかかる。
/.kube/config ファイルの取得とコピー(非 admin, admin の 2 種類)
※ .kubeに、configとadmin-configファイルが作成される。
既定では、configが利用される(必要に応じて切り替える)。
AKS_TechnicalReference_v0.14(ppt).zipに同梱の
構築サンプルアプリ.zipを mgmt-windows-vm1 に持ち込んで作業する。
YAML ファイルを作成し、kubectl apply を実行し、
コンテナ・イメージのデプロイ展開を確認する。
最後に、コンテナ・イメージを切り替える。
(ダッシュボードの表示も行う)
※ コンテナ・イメージの
レジストリ名(先頭)とタグ名(末尾)
の部分は必要に応じて変更する。
※ DBアクセスは動かなくても確認はできる。
DBアクセスをテストするなら、コチラで言及されているSQL DBを作成。
手順としては、(...後でどこかに書くか)
以下のパートのスクリプトを実行
# AKS ILB に対する Private Link Service の作成
以下のパートのスクリプトを実行
# Create Private Endpoint to AKS
以下のパートのスクリプトを実行して、パラメタを設定
# Parameters
※ 再開の際は、再実行(テキスト・ファイルへ)。
以下のパートのスクリプトを実行
# Create VNET and Subnets
以下のパートのスクリプトを実行
# Create AKS Private Endpoint
以下のパートのスクリプトを実行
# Create AppGateway ... # Private Endpoint の IP アドレスを取得 ... # AppGw 作成 ※ 時間がかかる
「URL の Ping テスト」を構成する。
※ 現時点では UI から実施とのこと(動画も参考になる)。
※ az コマンドではできない (ARM テンプレートのみ可)
Kured による VM のリブートで自動更新を取り込むAKS のアップグレード
以下のパートのスクリプトを実行
# Kured インストールに必要な FQDN の解放 ...
# AKS ノードがコンテナを取得するために必要な経路の解放 ...
※ Kured は、Helmを使用して、gcr経由で配布するらしい。
以下のパートのスクリプトを実行
# mgmt-linux-vm1 または mgmt-win-vm1 上から Kured をインストール
※ Windows or Linuxの保守端末上、どちらでもOK。
kubectl rollout history で確認できる。
>kubectl rollout history deployment.v1.apps/web --namespace azrefarc-springboot deployment.apps/web REVISION CHANGE-CAUSE 1 <none> 3 <none> 4 <none>
>kubectl rollout history deployment.v1.apps/web --namespace azrefarc-springboot --revision=4 deployment.apps/web with revision #4 Pod Template:
XXXXXXXXXは置換して利用。
SUBSCRIPTION_NAME=XXXXXXXXX az account set -s "$SUBSCRIPTION_NAME" SUBSCRIPTION_ID=$(az account show -s "$SUBSCRIPTION_NAME" --query id -o tsv)
SET SUBSCRIPTION_NAME=XXXXXXXXX az account set -s %SUBSCRIPTION_NAME% FOR /F "usebackq" %i IN (`az account show -s "%SUBSCRIPTION_NAME%" --query id -o tsv`) DO SET SUBSCRIPTION_ID=%i
NAME_PREFIX=daisukenishino LOCATION=japaneast
SET NAME_PREFIX=daisukenishino SET LOCATION=japaneast
RG_OPS="${NAME_PREFIX}-ops-rg" RG_AKS="${NAME_PREFIX}-aks-rg" RG_DMZ="${NAME_PREFIX}-dmz-rg" RG_ONP="${NAME_PREFIX}-onprem-rg"
DIAG_STORAGE_NAME="${NAME_PREFIX}aksdiag" DIAG_LA_WS_NAME="${NAME_PREFIX}-aks-laws" DIAG_AI_APP_NAME="${NAME_PREFIX}-aks-ai"
DIAG_STORAGE_ID=$(az storage account show --name $DIAG_STORAGE_NAME --query id -o tsv) DIAG_LA_WS_GUID=$(az monitor log-analytics workspace show --workspace-name $DIAG_LA_WS_NAME --resource-group $RG_OPS --query customerId -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) DIAG_LA_WS_KEY=$(az monitor log-analytics workspace get-shared-keys --workspace-name $DIAG_LA_WS_NAME --resource-group $RG_OPS --query primarySharedKey -o tsv)
ONP_VNET_NAME="${NAME_PREFIX}-onprem-vnet" ONP_VNET_ADDRESS_PREFIXES=10.0.0.0/16 ONP_VNET_SUBNET_DEF_NAME=Default ONP_VNET_SUBNET_DEF_ADDRESS_PREFIX=10.0.0.0/24 ONP_VNET_SUBNET_IES_NAME=InternalEndpointSubnet ONP_VNET_SUBNET_IES_ADDRESS_PREFIX=10.0.250.0/24
AKS_VNET_NAME="${NAME_PREFIX}-aks-vnet" AKS_VNET_ADDRESS_PREFIXES=10.0.0.0/8 AKS_VNET_SUBNET_PES_NAME=PrivateEndpointSubnet AKS_VNET_SUBNET_PES_ADDRESS_PREFIX=10.15.0.0/16 AKS_VNET_SUBNET_PLS_NAME=PrivateLinkServiceNatSubnet AKS_VNET_SUBNET_PLS_ADDRESS_PREFIX=10.12.0.0/16 AKS_VNET_SUBNET_IES_NAME=InternalEndpointSubnet AKS_VNET_SUBNET_IES_ADDRESS_PREFIX=10.11.0.0/16 AKS_VNET_SUBNET_NPS_NAME=NodepoolSubnet AKS_VNET_SUBNET_NPS_ADDRESS_PREFIX=10.1.0.0/16 AKS_VNET_SUBNET_FWS_NAME=AzureFirewallSubnet AKS_VNET_SUBNET_FWS_ADDRESS_PREFIX=10.31.0.0/16 AKS_VNET_SUBNET_BTS_NAME=AzureBastionSubnet AKS_VNET_SUBNET_BTS_ADDRESS_PREFIX=10.30.0.0/16 AKS_VNET_SUBNET_MMS_NAME=ManagementSubnet AKS_VNET_SUBNET_MMS_ADDRESS_PREFIX=10.16.0.0/16 ACR_NAME="${NAME_PREFIX}aksacr" FW_NAME="${NAME_PREFIX}-aks-fw" FW_PUBLIC_IP_NAME="${FW_NAME}-ip" FW_IP_CONFIG="${FW_NAME}-config" AKS_UDR_NAME="${NAME_PREFIX}-udr"
MGMT_WIN_VM_NAME=mgmt-win-vm1 MGMT_WIN_VM_NIC_NAME="${MGMT_WIN_VM_NAME}-nic" MGMT_WIN_VM_ILB_NAME="${MGMT_WIN_VM_NAME}-ilb"
MGMT_LINUX_VM_NAME=mgmt-linux-vm1 MGMT_LINUX_VM_NIC_NAME="${MGMT_LINUX_VM_NAME}-nic"
BASTION_NAME="${NAME_PREFIX}-bastion" BASTION_PUBLIC_IP_NAME="${BASTION_NAME}-ip"
AKS_SP_NAME="${NAME_PREFIX}-aks-sp" AKS_CLUSTER_NAME="${NAME_PREFIX}-aks" AKS_SERVICE_CIDR=10.10.0.0/16 AKS_DNS_SERVICE_IP=10.10.0.10
Tags: :クラウド, :コンテナ, :Azure, :AKS, :セキュリティ, :通信技術, :セキュリティ, :認証基盤