-
Notifications
You must be signed in to change notification settings - Fork 0
MS_AKSSecureDemo
- 戻る(AKSをセキュアに利用するためのテクニカルリファレンス)
- AKSをセキュアに利用する構築デモ
- AKSをセキュアに利用する構築デモ(コピペ用)
「AKSをセキュアに利用するためのテクニカルリファレンス」の 内容を、実際に Azure 上へ構築してみた記録である。
移行メモ(ページ内アンカーの扱い): 元ページは 「テキスト・ファイル」というラベルの ページ内アンカーで下記「お土産のシェル > 再開用のシェル」節を 繰り返し参照していた。 GitHub Wiki では見出しテキストからアンカーが生成されるため、 参照は節名の明示(「再開用のシェル」)に置き換えている。
補足(本ページの位置づけと現在): 本ページは 2020 年前後の AKS(Kubernetes 1.16〜1.18 相当)での実施記録であり、
azコマンドのオプションや AKS のプレビュー機能名は現在と異なる。 特に次の点は大きく変わっている。
当時 現在 プライベート クラスタはプレビュー( aks-preview拡張が必要)GA( --enable-private-clusterのみで可)Master API / 制御プレーンという呼称 コントロール プレーンに統一 クラスタ作成に SPN マネージド ID が既定 Kured で自動再起動 ノード自動アップグレード( --auto-upgrade-channel node-image)でも代替可手順そのものより、「何をプライベート化し、 どこから入れるようにするか」という構成の考え方を読み取るのが 本ページの使い方になる。
-
Azure Cloud Shell (Bash) からの作業を想定
-
20分でタイムアウトしてしまうため、
- タイムアウトで、変数が失われてしまう。
- これを避けるため、パラメタ設定スクリプトを、
- テキスト・ファイルなどにコピーして残しておく。
- 再開の際は、テキスト・ファイルのスクリプトを再実行する。
以下の権限を持つユーザで作業
- Ownerロール権限
- Azure Active Directoryに対してSPNを作成する権限
以下で固定になってるので、必要に応じて変更する。
-
admin-username
--admin-username azrefadmin
-
admin-password
--admin-password "p&ssw0rdp&ssw0rd"
AKS_TechnicalReference_v0.14(ppt).zipに同梱のPPTから引用

コチラの推奨設定と少々異なる(プライベートAKSクラスタにする)。
- Azure CNI プラグインを利用した分離型 VNET 構成
- ARM API はプライベート化しない。
- Master API はプライベート化する。
(プライベートAKSクラスタ) - 実行ノードも既存のVNETに配置する。
※ サマリすると
- ARM API以外は、プライベート化し、
- 実行ノードの公開は、
- Azure Private Endpoint経由(イントラ公開)
- DMZ経由(インターネット公開)
となる。
インバウンド(イングレス
-
アプリ
- イントラ公開
Azure Private Endpoint → ILB(Internal Load Balancer) - インターネット公開
Azure Application Gateway (DMZ) → Azure Private Endpoint → ILB(Internal Load Balancer)
- イントラ公開
-
保守アクセス
- イントラ公開
Azure Private Endpoint 方式 - インターネット公開
Azure Bastion 方式
- イントラ公開
アウトバウンド(エグレス
以下の併用
- Azure Firewall:インターネット・アクセス
- Azure Private Endpoint:Azureの他のサービスへのアクセス
- オンプレ模倣環境
- AKS 配置環境
保守用端末を VNET 内に設置する想定。
プライベート化しない(既存のアクセス制限機能を想定)
Managed ID 方式で作成する。
- クラスタ管理者のkube configを使って、
- 必要なら、追加でIPアドレス制限を想定
Secret機能を使用
- ノード VM は日次パッチ適用(既定で自動)
- Kured をインストールして自動再起動させる。
必要に応じて
バージョンアップを手動で実施。
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
-
AKS環境用
az group create --name $RG_AKS --location $LOCATION
-
DMZ環境用
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 から実施とのこと(動画も参考になる)。
- 参考
- Azure Monitor での Azure アクティビティ ログの収集と分析 | Microsoft Docs
https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/activity-log-collect
- Azure Monitor での Azure アクティビティ ログの収集と分析 | Microsoft Docs
-
VNETにVMを新設して、そこをオンプレに見立てるということらしい。
-
全体構成図には「OA環境サブスクリプション」と
あるが、別サブスクリプションでなくても良い。 -
多分、後述の、Bastionの作成手順で代替できる
(が、Private Link、Private Endpoint等を試したいのでコチラを優先したい)。 -
あと、Azure Private Endpoint 引き込みを行うので、
正確には、「オンプレ延伸模倣環境」ではないだろうか?
以下のパートのスクリプトを実行して、パラメタを設定
# Parameters※ 再開の際は、再実行(テキスト・ファイルへ)。
以下のパートのスクリプトを実行
# Create Onpremise VNET-
ONP_VNET_NAME="${NAME_PREFIX}-onprem-vnet" ONP_VNET_ADDRESS_PREFIXES=10.0.0.0/16
※ 全体構成図と突合して、サブネット構成を理解しておくと良い。
-
-
デフォルトのサブネット(VM用)
ONP_VNET_SUBNET_DEF_NAME=Default ONP_VNET_SUBNET_DEF_ADDRESS_PREFIX=10.0.0.0/24
-
Azure Private Endpoint用
外部のAzureサービスに接続するため。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から利用*
-
Azure Private Endpoint用
外部のAzureサービスに接続するため。AKS_VNET_SUBNET_PES_NAME=PrivateEndpointSubnet AKS_VNET_SUBNET_PES_ADDRESS_PREFIX=10.15.0.0/16
-
Azure Private Linkサービス用
オンプレ模倣環境から接続するため。AKS_VNET_SUBNET_PLS_NAME=PrivateLinkServiceNatSubnet AKS_VNET_SUBNET_PLS_ADDRESS_PREFIX=10.12.0.0/16
-
Azure Firewall用(インターネット・アクセス)
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」をしている。
-
ACR の作成と Azure Private Endpoint 引き込み
-
ACR の作成
以下のパートのスクリプトを実行# Create ACR
-
※ Azure Private Endpoint 引き込みをサポートするPremiumのskuを使用。
※ インターネットアクセス禁止、Subscription Activity Loggingの出力先を指定
-
Azure Private Endpoint 引き込み
以下のパートのスクリプトを実行# Create PrivateLink to ACR ... # azrefarcacr... の A レコード作成
※ ココのスクリプトはPreviewなので変更の可能性アリとのこと → 特にDNS弄る所。
※ 動画ではポータルから行っていると見せかけ、確定ボタン押下せず、スクリプトは流している。
-
Azure SQL Database 作成と Azure Private Endpoint 引き込み
-
...
-
※ よくよく見ると、DBを作ってない(コロナ"COVID-19"の影響だということ)。
最終的には、以下の接続文字列でアクセス可能なSQL Serverが必要になる。
jdbc:sqlserver://azrefarc.database.windows.net:1433;databaseName=pubs
-
Azure Private Endpoint 引き込み
以下のパートのスクリプトを実行# Service Endpoint for SQL DB
※ マネージド・インスタンスは、Azure Private Endpoint が使えない
らしいので Azure Service Endpoint を利用する(と言うエクスキューズがある)。
※ 本来、コチラの手順が参考になったハズ。\
-
# Create Azure Firewall -
UDRの設定
以下のパートのスクリプトを実行# Create UDR and assign UDR
※ 既定のUDRとして、「AKS_UDR_NAME」を作成、
インターネット(0.0.0.0/0)への通信をAzure Firewallにルーティング
-
ルールの作成
以下のパートのスクリプトを実行# Create Firewall Rules-
プライベートAKSクラスタの要件
以下のパートのスクリプトを実行# Required for private AKS cluster az network firewall application-rule create...
-
※ 前述の既定のUDR(AKS_UDR_NAME)をノードプールのサブネットに適用する。
※ その他、MCRへのアクセスとか、云々、コレはMSに聞いたほうがいい感じやね。
-
Azure での Linux VM の時刻同期
以下のパートのスクリプトを実行# ntp.ubuntu.com -> * az network firewall network-rule create... -
プライベートAKSクラスタのオプション
以下のパートのスクリプトを実行# Optional for AKS cluster az network firewall application-rule create... -
ContainersのAzure Monitor
以下のパートのスクリプトを実行# Azure Monitor for containers az network firewall application-rule create... -
AKSクラスタのAzure Policy
以下のパートのスクリプトを実行# Azure Policy for AKS clusters (preview, subject to be changed) az network firewall application-rule create...
※ ルールの作成には、かなり時間がかかるらしい(10分ぐらい)。
-
AKS ツール
- download.opensuse.org
- packages.microsoft.com
- dc.services.visualstudio.com
- *.opinsights.azure.com
- *.monitoring.azure.com
- gov-prod-policy-data.trafficmanager.net
- apt.dockerproject.org
- nvidia.github.io
-
OS update
- download.opensuse.org
- *.ubuntu.com
- packages.microsoft.com
- snapcraft.io,api.snapcraft.io
オンプレから接続する踏み台VM相当。
-
パラメタの設定
以下のパートのスクリプトを実行して、パラメタを設定# Parameters
※ 再開の際は、再実行(テキスト・ファイルへ)。
-
UDRの設定
以下のパートのスクリプトを実行# UDR でルートを塞ぐ
※ 前述の既定のUDR(AKS_UDR_NAME)を指定。
-
ILB, NIC の作成
以下のパートのスクリプトを実行# ILB 配下に VM を作成 # NIC を先に作成(IP アドレスを確定させる)
※ 後で、Azure Private Linkを作成するので、ILB → NICと作成するのがポイント。
-
Azure Firewallの設定
以下のパートのスクリプトを実行# Azure Firewall ルールで Windows Update などを許可 # Azure Firewall ルールで) Azureポータル(を許可
※ 同様に、ルールの作成には、かなり時間がかかるらしい(10分ぐらい?)。
-
VM の作成
以下のパートのスクリプトを実行# VM 作成 (Windows 2019) # Create mgmt-win-vm1
※ オンプレ(模倣)環境ではない、Azure環境ということで、コチラは、2019か。
しかし、踏み台VMにサーバーOSって、やっぱり高額になるのでは?と、少々、心配。
-
Azure Private Link, Azure Private Endpoint の作成
以下のパートのスクリプトを実行# Private Link Service 作成 # Create Private Endpoint to MgmtVM ILB
※ コチラの手順が参考になる。
-
ツールのインストール
Windows上で環境を構築する。接続先のアドレスは、
mgmt-win-vm1-ilb の Azure Private Endpointで確認可能。-
AKSのバージョンを確認
以下のパートのスクリプトを実行# Cloud Shell 上でインストールする aks バージョンを確認しておく -
先に取得したバージョン番号に対応する kubectl を
-
az aks install-cliコマンドでバージョンを指定して実行すると、
.azure-kubectl フォルダ下にダウンロードされるので、>az aks install-cli --client-version=1.16.7
-
-
・このファイルをコピーする。
```sh
>copy %HOMEPATH%\.azure-kubectl\kubectl.exe %HOMEPATH%\kubectl.exe
```
・または、フィアルへのパスを通す。
```sh
...
```
- または、\
・下記 URL からダウンロードし\
https://storage.googleapis.com/kubernetes-release/release/v1.16.8/bin/windows/amd64/kubectl.exe\
・%HOMEPATH% 下へコピー\
https://v1-16.docs.kubernetes.io/ja/docs/tasks/tools/install-kubectl/\
https://v1-16.docs.kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows\
-
Helm(v3 系列)をインストール
- 下記 URL からダウンロード(持ち込み)
https://get.helm.sh/helm-v3.1.2-windows-amd64.zip - %HOMEPATH% 下へコピー
helm.exe を mgmtvm1 の c:\users にコピー
- 下記 URL からダウンロード(持ち込み)
-
VS Code
- 下記 URL からダウンロード(持ち込み)
https://code.visualstudio.com/download - オフラインインストーラでインストール
- 下記 URL からダウンロード(持ち込み)
-
Microsoft Edge(Chromium 版)
- 下記 URL からダウンロード(持ち込み)
https://www.microsoft.com/en-us/edge/business/download - オフラインインストーラでインストール
- 下記 URL からダウンロード(持ち込み)
※ 「持ち込み」となっているモノは、Azure Firewallで設定していないもの。
踏み台VMから接続し、アプリのビルドや、Dockerコンテナ作業を行う。
-
パラメタの設定
以下のパートのスクリプトを実行して、パラメタを設定# Parameters
※ 再開の際は、再実行(テキスト・ファイルへ)。
-
UDRの設定
以下のパートのスクリプトを実行# UDR でルートを塞ぐ
※ 前述の既定のUDR(AKS_UDR_NAME)を指定。
-
NICの作成
以下のパートのスクリプトを実行# NIC を先に作成(IP アドレスを確定させる)
※ こちらは、Azure Private Linkを構成しないので、ILBは不要。
-
Azure Firewallの設定
以下のパートのスクリプトを実行# Azure Firewall ルールで通信を許可
※ コチラは、JavaのビルドやDocker操作があるので、ソレ用に穴をあける。
※ 同様に、ルールの作成には、かなり時間がかかるらしい(10分ぐらい?)。
-
VM の作成
以下のパートのスクリプトを実行# Create mgmt-linux-vm1 (Ubuntu) -
ツールのインストール
Linux上で環境を構築する。-
- VM にログイン
Windows 保守端末 からログインする。
ssh mgmt-linux-vm1
- VM にログイン
-
- Azure CLIのインストール
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-apt?view=azure-cli-latest
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - Azure CLIのインストール
-
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
-
- Docker インストール
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
-
- Helm インストール
sudo apt-get update sudo apt-get install snapd sudo snap install helm --classic
-
Azure CLIの補足
- ログイン、
Windowsだと、 Loopback Interface Redirectionだが、
SSH端末だと、OAuth 2.0 Device Authorization Grantになる。 - 必要に応じて、サブスクリプションの選択を行う。
- ログイン、
-
オンプレ模倣環境の作成をスキップできる。
-
パラメタの設定
以下のパートのスクリプトを実行して、パラメタを設定BASTION_NAME="${NAME_PREFIX}-bastion" BASTION_PUBLIC_IP_NAME="${BASTION_NAME}-ip"
※ 再開の際は、再実行(テキスト・ファイルへ)。
-
Azure Bastionの作成
以下のパートのスクリプトを実行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
※ 結構、時間がかかる。
- 利用方法は、VMの接続メニューに、RDP、SSHに加え、
Bastionが追加されているのでコレを選択して利用する。
以下のパートのスクリプトを実行して、パラメタを設定
# Parameters※ 再開の際は、再実行(テキスト・ファイルへ)。
-
(必要に応じて)サービスプリンシパル作成
Managed IDを選択するので実施しない(既定値)。 -
(必要に応じて)非プライベートクラスタ用経路作成
プライベート・クラスタを選択するので実施しない(既定値)。 -
AKS クラスタの作成
以下のパートのスクリプトを実行# Create AKS Cluster ============================================== ... # Prepare for creating cluster ... # Create AKS Cluster ※ 時間がかかる az aks create ...既定値なら、既定のオプションでOK... ... # VNET に対する Contributor 権限を与える(VNET が管理リソースグループの外にあるため) # Managed ID 方式の場合 ... # End of Create AKS Cluster ==============================================
※ コレは、ココの話。
-
ACR との接続
以下のパートのスクリプトを実行# Configure ACR for connecting from AKS
※ コレは、ココの話。
※ 2~3分かかるらしい。
-
Azure Monitor の有効化
以下のパートのスクリプトを実行# Azure Monitor for AKS 有効化 ...
※ 数分、時間がかかる。
-
診断設定の有効化
以下のパートのスクリプトを実行# AKS 診断設定の有効化 ...
※ 数分、時間がかかる。
-
uservm1 > mgmt-win-vm1, mgmt-linux-vm1 へのログイン
-
~/.kube/config ファイルの取得とコピー(非 admin, admin の 2 種類)
※ .kubeに、configとadmin-configファイルが作成される。
既定では、configが利用される(必要に応じて切り替える)。
AKS_TechnicalReference_v0.14(ppt).zipに同梱の
構築サンプルアプリ.zipを mgmt-windows-vm1 に持ち込んで作業する。
-
ビルドできるようにAzure Firewallに穴をあける。
-
ファイルを mgmt-linux-vm1 に scp で転送し、
mgmt-linux-vm1 でコンテナをビルドし、作成したコンテナ・イメージを
コンテナ・レジストリにプッシュ(2 つのバージョンをプッシュ)
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 テンプレートのみ可)
- 参考
- Microsoft Docs
- Web サイトの可用性と応答性の監視
https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/monitor-web-app-availability - Resource Manager テンプレートでのメトリック アラートの作成
可用性テスト用のテンプレートとメトリック アラート
https://docs.microsoft.com/ja-jp/azure/azure-monitor/platform/alerts-metric-create-templates#template-for-an-availability-test-along-with-a-metric-alert
- Web サイトの可用性と応答性の監視
- Microsoft Docs
Kured による VM のリブートで自動更新を取り込むAKS のアップグレード
以下のパートのスクリプトを実行
-
VMからgcr(Google コンテナ・レジストリ)
# Kured インストールに必要な FQDN の解放 ... -
実行ノードからgcr(Google コンテナ・レジストリ)
# AKS ノードがコンテナを取得するために必要な経路の解放 ...
※ Kured は、Helmを使用して、gcr経由で配布するらしい。
※ なお、この作業は、保守端末からではなく、
Azure Cloud Shell (Bash) か、Azure CLIで行う。
以下のパートのスクリプトを実行
# mgmt-linux-vm1 または mgmt-win-vm1 上から Kured をインストール※ この作業は、Windows or Linuxの保守端末上、どちらでもOK。
-
Azure Monitor k8s Insights
-
k8s ダッシュボード
live data は実行ノードと直接通信できるところ
=mgmt-windows-vm1 上からでしか確認できない。
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:補足(この「切り分け」が本ページの読みどころ): 以下は 構築後にアプリが動かず、原因を切り分けていった記録である。 プライベート化された環境では 「通信が通らないのか、アプリが落ちているのか」が 切り分けにくいという、この構成特有の難しさが表れている。 実際の作業では、
- まず 最小のコンテナ(HTML を返すだけ)に差し替えてアプリ要因を排除し、
- 次に Azure Firewall を外してネットワーク要因を確認する、
という順序で進めており、これは今でも有効な手順である。
- うーん、動かないですね。
- 色々、切り分けの戦略を立てよう。
-
そもそもDB作ってないので、初期化でDB接続してコケてたりしないか?と。
-
もっと簡単な、HTMLを表示するダケのコンテナ・イメージを作成して、
-
それを、*.yamlの
image: ***azrefarc7aksacr.azurecr.io/azrefarc.springboot:1***
と差し替えたら、良いのでは?と。
- 手頃なモノを探していたら、以下を発見。
- docker+Node.js(Express)の最小構成プロジェクトを作成する - Qiita
https://qiita.com/ryo-ohnishi/items/b54e649b14b51694ef77
- docker+Node.js(Express)の最小構成プロジェクトを作成する - Qiita
詳しい手順はコチラに書く。
-
なんとなく、Azure Firewallが悪さしている気もした。
-
実際、
- 上記「環境 > その他 > F/WへのFQDN追加」の様なケースもあったし、
- Javaアプリを、voting-appに変更したときも、
「registry-1.docker.io」を別途、追加したりした。
-
と言う事で、以下のように実行
...と言うのも、プライベートAKSクラスタ作成で、
「An existing route table has not been associated with NodepoolSubnet.
Please update the route table association」などと言いよるので。-
実行方法
# Create UDR and assign UDR-
Firewallの作成は、通常通り実行する。
# Create Azure Firewall -
ルーティングの変更も、通常通り実行する。
良く解って無いが、以下が、AKS_VNET全体に適用される模様。# Create UDR and assign UDR ... # UDR でルートを塞ぐ ...
-
ルールの作成に関しては、ガバガバ版に変更して実行する。
# Create Firewall Rules ... # Azure Firewall ルールで ... などを許可 ...
-
-
- 1つはゴリゴリのWindows開発環境(Docker Desktop for Windows)にしてしまう。
- Azure Firewallを作っても、ココだけFirewallをガバガバに設定可能。
- ローカルで、Dockerビルドして、動作確認したモノを、迅速にACRにプッシュ。
最後に
「コレ以外にも、下も検討が必要です」
と言う話があったが、
「(疲れたので、)もうエエわ」
と言う感想(暫く休ませて下さい)。
- AKS Master APIにAzAD認証を統合する。
- ...その他、アプリの認証の検討も必要...
K8sの機能活用
CI/CDのワークフロー化
- CI/CD パイプラインと言われるが、
- 実は、コンテナのチェーンだと思う。
一部、未達があるが、
一通り動かすことが出来た。
このハンズオン?をやってみた感想については、
- コチラ(検討事項)
- コンテナのチェーン
- 開発基盤部会 Blog
などを、ご参照下さい。
-
以下、機会があればやりたいです。
- 一部、アウトバウンドがガバガバ設定
- アプリは結局、Javaではなくvoting-appを使った。
- 外部RDBを使用するケースを試せていない。
-
後は、シェル流をしながら「なるほど、冪等性」と思ったので、
「クラウド・インフラ自動化」の辺りにもチャレンジしたいと思っています。
動画で「テキスト・ファイルに保持しておいて。」と言ってたアレ。
- XXXXXXXXXは置換して利用。
- ★は、コピー後、消す行のマーカー
-
★サブスクリプション
-
★BASH用
SUBSCRIPTION_NAME=XXXXXXXXX az account set -s "$SUBSCRIPTION_NAME" SUBSCRIPTION_ID=$(az account show -s "$SUBSCRIPTION_NAME" --query id -o tsv)
-
★CMD用
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
-
-
★プレフィックス、ロケーション
-
★BASH用
NAME_PREFIX=daisukenishino LOCATION=japaneast
-
★CMD用
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"
-
★ログの準備1
DIAG_STORAGE_NAME="${NAME_PREFIX}aksdiag" DIAG_LA_WS_NAME="${NAME_PREFIX}-aks-laws" DIAG_AI_APP_NAME="${NAME_PREFIX}-aks-ai"
-
★ログの準備2
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環境
AKS_VNET_NAME="${NAME_PREFIX}-aks-vnet" AKS_VNET_ADDRESS_PREFIXES=10.0.0.0/8AKS_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" -
★保守環境
-
★Windows端末
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"
-
★Linux端末
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クラスタ
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
-
★DMZ環境
DMZ_VNET_NAME="${NAME_PREFIX}-dmz-vnet" DMZ_VNET_ADDRESS_PREFIXES=10.0.0.0/16 DMZ_VNET_SUBNET_AGW_NAME=AppGwSubnet DMZ_VNET_SUBNET_AGW_ADDRESS_PREFIX=10.0.0.0/24 DMZ_VNET_SUBNET_IES_NAME=InternalEndpointSubnet DMZ_VNET_SUBNET_IES_ADDRESS_PREFIX=10.0.250.0/24
- セキュアなプライベートAKS構築が出来たので報告。
https://www.osscons.jp/jo64zcvfj-537/
Tags: クラウド, コンテナ, Azure, AKS, IaC, セキュリティ, 通信技術, 認証基盤
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。