MS_PrivateAKSCluster - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

プライベートAKSクラスタを作成する。

概要

AKS Master API(AKSをセキュアに利用するためのテクニカルリファレンス
をプライベート化する方法。

補足(何を守る話か): ここで対象にしているのは
コントロール プレーン(API サーバー)への到達経路であって、
ワークロード(Pod)の公開・非公開とは別の話である。

【この記事の対象】
  kubectl / CI ──▶ AKS API サーバー(コントロール プレーン)

【別の話】
  利用者 ──▶ Ingress / Service(ワークロードの公開)
  ノード ──▶ インターネット(アウトバウンド。→ AKSのアウトバウンドをAzure Firewallで制限する。)

詳細

エンドポイントを VNET に引き込む。

  • これは、Azure Private Endpoint の方式と ≒ と思われる。
  • 具体的には、az aks create の際に --enable-private-cluster オプションを追加する。
az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster

補足(原文の推測は正しい): プライベート クラスターは、実際に
API サーバーへの Private Endpoint
ノードの VNET に作成する
実装である。
併せて privatelink.<リージョン>.azmk8s.io という
プライベート DNS ゾーンが作られる。

運用上の注意点は次の 2 つ。

  • kubectl を VNET の外から実行できなくなる
    踏み台 VM、Azure Bastion
    セルフホストの CI エージェント、
    または az aks command invoke(クラスタ内でコマンドを代行実行)が必要になる。
  • 名前解決が要。オンプレミスや別 VNET から使う場合、
    プライベート DNS ゾーンへの参照(VNET リンクや条件付きフォワーダー)を
    設定しないと到達できない。

クラスター作成後にプライベート/パブリックを切り替えることはできない
(再作成が必要)ため、設計時に決める必要がある。

IP アドレス制限を追加する。

  • これは、Azure Load Balancer の方式と ≒ と思われる。
  • 具体的には、az aks create の際に --api-server-authorized-ip-ranges オプションを追加する。
az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --api-server-authorized-ip-ranges 73.140.245.0/24
az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --api-server-authorized-ip-ranges 73.140.245.0/24

補足(2 つの方式の関係): この 2 つは排他である。

プライベート クラスター 承認済み IP 範囲
API サーバーの公開 非公開(VNET 内の私設 IP) 公開されるが送信元 IP で制限
到達方法 VNET 内 / VPN / ExpressRoute から インターネットから(許可 IP のみ)
併用 不可(プライベート クラスターでは指定できない)
運用の手間 踏み台や DNS が必要 出口 IP の管理が必要

「閉域が必須」ならプライベート クラスター、
「運用性を保ちつつ絞りたい」なら承認済み IP 範囲、という選択になる。
承認済み IP 範囲を使う場合、CI/CD の出口 IP や
運用端末の IP が変わるたびに更新が要る
点が実務上の負担になる。

なお、現在は第三の選択肢として API Server VNet Integration があり、
API サーバーを VNET のサブネットに直接統合できる
(プライベート クラスターより DNS 周りが簡素になる)。

参考

Microsoft Learn


Tags: 移行, クラウド, コンテナ, Azure, AKS, IaC, セキュリティ, 通信技術

⚠️ **GitHub.com Fallback** ⚠️