Skip to content

MS_AKSSecureDemo

nishi_74322014 edited this page Sep 1, 2026 · 1 revision

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分でタイムアウトしてしまうため、

    • タイムアウトで、変数が失われてしまう。
    • これを避けるため、パラメタ設定スクリプトを、
    • テキスト・ファイルなどにコピーして残しておく。
    • 再開の際は、テキスト・ファイルのスクリプトを再実行する。

操作者の権限

以下の権限を持つユーザで作業

その他

アカウント

以下で固定になってるので、必要に応じて変更する。

  • 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以外は、プライベート化し、
  • 実行ノードの公開は、

 となる。

入力経路

インバウンド(イングレス

出力経路

アウトバウンド(エグレス

以下の併用

  • オンプレ模倣環境
  • AKS 配置環境

認証・認可

保守用端末を VNET 内に設置する想定。

Azureポータル, Azure CLI (ARM API)

プライベート化しない(既存のアクセス制限機能を想定)

制御プレーンの実行アカウント (SPN)

Managed ID 方式で作成する。

ダッシュボード, Kubernetes CLI (Master API)

  • クラスタ管理者のkube configを使って、
  • 必要なら、追加でIPアドレス制限を想定

AKSユーザ・アプリからのリソース・アクセス

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 から実施とのこと(動画も参考になる)。

  • VNETにVMを新設して、そこをオンプレに見立てるということらしい。

  • 全体構成図には「OA環境サブスクリプション」と
    あるが、別サブスクリプションでなくても良い。

  • 多分、後述の、Bastionの作成手順で代替できる
    (が、Private Link、Private Endpoint等を試したいのでコチラを優先したい)。

  • あと、Azure Private Endpoint 引き込みを行うので、
    正確には、「オンプレ延伸模倣環境」ではないだろうか?

パラメタの設定

以下のパートのスクリプトを実行して、パラメタを設定

# Parameters

※ 再開の際は、再実行(テキスト・ファイルへ)。

VNETサブネットの作成

以下のパートのスクリプトを実行

# Create Onpremise VNET
  • 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)だね。

VMの作成

以下のパートのスクリプトを実行

# 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

※ 再開の際は、再実行(テキスト・ファイルへ)。

VNETサブネットの作成

以下のパートのスクリプトを実行

#Create VNET & Subnets
  • VNET

    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

使っていない?

  • Azure Bastion

    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」をしている。

周辺サービスの作成と引き込み

Azure Private Endpoint 引き込みをサポートするPremiumのskuを使用。
※ インターネットアクセス禁止、Subscription Activity Loggingの出力先を指定

  • Azure Private Endpoint 引き込み
    以下のパートのスクリプトを実行

    # Create PrivateLink to ACR
    ...
    # azrefarcacr... の A レコード作成

※ ココのスクリプトはPreviewなので変更の可能性アリとのこと → 特にDNS弄る所。
※ 動画ではポータルから行っていると見せかけ、確定ボタン押下せず、スクリプトは流している。

※ よくよく見ると、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 を利用する(と言うエクスキューズがある)。
※ 本来、コチラの手順が参考になったハズ。\

Azure Firewallの作成

  • Azure Firewallの作成

    # 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分ぐらい)。

他によく必要になる URL

  • 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

管理マシン(Windows)の作成

オンプレから接続する踏み台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って、やっぱり高額になるのでは?と、少々、心配。

コチラの手順が参考になる。

  • ツールのインストール
    Windows上で環境を構築する。接続先のアドレスは、
    mgmt-win-vm1-ilb の Azure Private Endpointで確認可能。

    • AKSのバージョンを確認
      以下のパートのスクリプトを実行

      # Cloud Shell 上でインストールする aks バージョンを確認しておく
    • Azure CLIをインストールしてログイン

    • 先に取得したバージョン番号に対応する 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\

※ 「持ち込み」となっているモノは、Azure Firewallで設定していないもの。

管理マシン(Linux)の作成

踏み台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上で環境を構築する。

      1. VM にログイン
        Windows 保守端末 からログインする。
      ssh mgmt-linux-vm1
      1. 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
      1. kubectl インストール
        https://v1-16.docs.kubernetes.io/ja/docs/tasks/tools/install-kubectl/
      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
      1. 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
      1. 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

※ 再開の際は、再実行(テキスト・ファイルへ)。

AKS クラスタの作成

  • (必要に応じて)サービスプリンシパル作成
    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 ==============================================

※ コレは、ココの話。

AKS の設定

  • ACR との接続
    以下のパートのスクリプトを実行

    # Configure ACR for connecting from AKS

※ コレは、ココの話。
※ 2~3分かかるらしい。

  • Azure Monitor の有効化
    以下のパートのスクリプトを実行

    # Azure Monitor for AKS 有効化
    ...

※ 数分、時間がかかる。

  • 診断設定の有効化
    以下のパートのスクリプトを実行

    # AKS 診断設定の有効化
    ...

※ 数分、時間がかかる。

kubectl/kubeconfig の準備

※ .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 の作成

以下のパートのスクリプトを実行

# AKS ILB に対する Private Link Service の作成

AKS ILB への Private Endpoint の作成

以下のパートのスクリプトを実行

# Create Private Endpoint to AKS

パラメタの設定

以下のパートのスクリプトを実行して、パラメタを設定

# Parameters

※ 再開の際は、再実行(テキスト・ファイルへ)。

DMZ VNET の作成

以下のパートのスクリプトを実行

# Create VNET and Subnets

AKS ILB への Private Endpoint の作成

以下のパートのスクリプトを実行

# Create AKS Private Endpoint

Application Gateway の作成

以下のパートのスクリプトを実行

# Create AppGateway
...
# Private Endpoint の IP アドレスを取得
...
# AppGw 作成 ※ 時間がかかる

可用性テストの作成

「URL の Ping テスト」を構成する。

※ 現時点では UI から実施とのこと(動画も参考になる)。
※ az コマンドではできない (ARM テンプレートのみ可)

Kured による VM のリブートで自動更新を取り込むAKS のアップグレード

経路の解放

以下のパートのスクリプトを実行

  • VMからgcr(Google コンテナ・レジストリ)

    # Kured インストールに必要な FQDN の解放
    ...
  • 実行ノードからgcr(Google コンテナ・レジストリ)

    # AKS ノードがコンテナを取得するために必要な経路の解放
    ...

※ Kured は、Helmを使用して、gcr経由で配布するらしい。
※ なお、この作業は、保守端末からではなく、
 Azure Cloud Shell (Bash) か、Azure CLIで行う。

Helmでインストール

以下のパートのスクリプトを実行

# mgmt-linux-vm1 または mgmt-win-vm1 上から Kured をインストール

※ この作業は、Windows or Linuxの保守端末上、どちらでもOK。

モニタリングツールの確認

  • Azure Monitor k8s Insights

  • k8s ダッシュボード
    live data は実行ノードと直接通信できるところ
    =mgmt-windows-vm1 上からでしか確認できない。

Pod 操作履歴

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 を外してネットワーク要因を確認する、

という順序で進めており、これは今でも有効な手順である。

  • うーん、動かないですね。
  • 色々、切り分けの戦略を立てよう。

Javaアプリ

  • そもそもDB作ってないので、初期化でDB接続してコケてたりしないか?と。

  • もっと簡単な、HTMLを表示するダケのコンテナ・イメージを作成して、

  • それを、*.yamlの

    image: ***azrefarc7aksacr.azurecr.io/azrefarc.springboot:1***

と差し替えたら、良いのでは?と。

詳しい手順はコチラに書く。

Firewall外し

  • なんとなく、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にプッシュ。

検討事項

最後に

「コレ以外にも、下も検討が必要です」

と言う話があったが、

「(疲れたので、)もうエエわ」

と言う感想(暫く休ませて下さい)。

HTTPS化やWAFの導入

K8sの機能活用

CI/CDのワークフロー化

終わりに

結果

一部、未達があるが、
一通り動かすことが出来た。

感想

このハンズオン?をやってみた感想については、

などを、ご参照下さい。

未達部

  • 以下、機会があればやりたいです。

    • 一部、アウトバウンドがガバガバ設定
    • アプリは結局、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/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"
  • ★保守環境

    • ★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"
    • Azure Bastion

      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

参考

OSSC > 開発基盤部会 Blog


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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally