MS_AKSSecureDemo - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

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 Firewallむンタヌネット・アクセス
  • Azure Private EndpointAzureの他のサヌビスぞのアクセス
  • オンプレ暡倣環境
  • 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

※ むンタヌネット・アクセス犁止オプションあり。

Log Analytics & Application Insights の䜜成

以䞋のパヌトのスクリプトを実行

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

呚蟺サヌビスの䜜成ず匕き蟌み

  • 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匄る所。
※ 動画ではポヌタルから行っおいるず芋せかけ、確定ボタン抌䞋せず、スクリプトは流しおいる。

※ よくよく芋るず、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っお、やっぱり高額になるのではず、少々、心配。

  • 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 バヌゞョンを確認しおおく
    • 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\
  • Helm(v3 系列)をむンストヌル

    • 䞋蚘 URL からダりンロヌド持ち蟌み
      https://get.helm.sh/helm-v3.1.2-windows-amd64.zip
    • %HOMEPATH% 䞋ぞコピヌ
      helm.exe を mgmtvm1 の c:\users にコピヌ
  • VS Code

    • 䞋蚘 URL からダりンロヌド持ち蟌み
      https://code.visualstudio.com/download
    • オフラむンむンストヌラでむンストヌル
  • Microsoft Edge(Chromium 版)

    • 䞋蚘 URL からダりンロヌド持ち蟌み
      https://www.microsoft.com/en-us/edge/business/download
    • オフラむンむンストヌラでむンストヌル

※ 「持ち蟌み」ずなっおいるモノは、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

※ コレは、ココの話。
※ 分かかるらしい。

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

    # Azure Monitor for AKS 有効化
    ...

※ 数分、時間がかかる。

  • 蚺断蚭定の有効化
    以䞋のパヌトのスクリプトを実行

    # AKS 蚺断蚭定の有効化
    ...

※ 数分、時間がかかる。

kubectl/kubeconfig の準備

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

以䞋のパヌトのスクリプトを実行

# 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 ルヌルで ... などを蚱可
        ...

保守端末

  • ぀はゎリゎリのWindows開発環境Docker Desktop for Windowsにしおしたう。
  • Azure Firewallを䜜っおも、ココだけFirewallをガバガバに蚭定可胜。
  • ロヌカルで、Dockerビルドしお、動䜜確認したモノを、迅速にACRにプッシュ。

怜蚎事項

最埌に

「コレ以倖にも、䞋も怜蚎が必芁です」

ず蚀う話があったが、

「疲れたので、もう゚゚わ」

ず蚀う感想暫く䌑たせお䞋さい。

HTTPS化やWAFの導入

Azure Active Directory認蚌統合

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"
  • ★ログの準備

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

    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, セキュリティ, 通信技術, 認蚌基盀

⚠ **GitHub.com Fallback** ⚠