MS_AKSOutboundFirewall - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- AKS のアウトバウンドを Azure Firewall で制限する。
- 最近は、アウトバウンドをエグレスと呼ぶらしい。
補足(用語): エグレス (egress) / イングレス (ingress) は
Kubernetes の文脈で定着した呼び方である。
Kubernetes にはIngressというリソース種別があるため、
「インバウンド=Ingress、アウトバウンド=Egress」という語彙が
そのまま使われるようになった。
Azureのアウトバウンド設計 で言う
アウトバウンド制御と、対象は同じである。
補足(原文が空欄のため、要点を補う)
AKS のノードは、クラスタとして成立するために外部通信を必要とする。
したがって「アウトバウンドを全部閉じる」とクラスタが動かない。
必要な通信を把握したうえで許可リストを作るのがこの作業の本質である。主に必要なもの:
宛先 目的 AKS の API サーバー( *.hcp.<リージョン>.azmk8s.io)ノードとコントロール プレーンの通信 MCR( mcr.microsoft.com、*.data.mcr.microsoft.com)システム コンポーネントのイメージ取得 management.azure.comARM への操作 login.microsoftonline.com認証 パッケージ リポジトリ( packages.microsoft.com等)ノードの更新 ACR アプリのイメージ取得(閉域化するなら Private Endpoint) ┌──────────── Hub VNET ────────────┐ │ [ Azure Firewall ] │ └──────────▲───────────┬───────────┘ VNET ピアリング │ インターネット ┌──────────┴───────────▼───────────┐ │ Spoke VNET(AKS ノード サブネット)│ │ UDR: 0.0.0.0/0 → Firewall │ └──────────────────────────────────┘手順の骨子は次のとおり。
- アウトバウンドの種類を
userDefinedRoutingにして AKS を作成する
(既定はloadBalancer。これだと LB 経由で直接外に出る)。- ノードのサブネットに UDR を設定し、
既定ルート0.0.0.0/0を Azure Firewall に向ける。- Firewall にアプリケーション ルール(FQDN)と
ネットワーク ルール(TCP/UDP)を定義する。
AzureKubernetesServiceの FQDN タグを使うと、
AKS に必要な FQDN 群をまとめて許可できる。
0.0.0.0/0を Firewall に向けた時点で、
ノードから API サーバーへの経路も Firewall を通る。
必要なネットワーク ルール(TCP 9000 など)を忘れると
ノードがNotReadyになる。- Azure Firewall の
**評価順序(ネットワーク → アプリケーション)**により、
ネットワーク ルールで広く開けると FQDN 制御が効かなくなる。- Standard Load Balancer の SNAT ポート枯渇は、
Firewall 経由にしても形を変えて残る
(Firewall 側の SNAT ポート上限)。
高トラフィックなら Firewall にパブリック IP を複数割り当てる。- クラスタのアップグレードや新規アドオンの導入で
必要な FQDN が増えることがある。
Firewall のログ(拒否イベント)を監視する運用が要る。
- Azure Kubernetes Service (AKS) でエグレス トラフィックを制限する
https://learn.microsoft.com/ja-jp/azure/aks/limit-egress-traffic
Tags: 移行, クラウド, コンテナ, Azure, AKS, IaC, セキュリティ, 通信技術