AKS (Azure Kubernetes Service) で egress traffic を特定の IP address からのみに制限する

このエントリ2020/02/20現在の情報に基づくものです。将来の機能追加・変更に伴い、記載内容との乖離が発生する可能性があります。

(注)Virtual Network NATが一般提供されたため、記載を変更。

このエントリの目的

Azure Kubernetes Service (以下、AKS) でingress trafficを受けるPublic IPを制限する方法にはIngress Controllerを使う。その逆、egress trafficは何も設定していなければ、ランダムなIPを使って外部にアクセスする。この場合、外部APIでIPフィルタリングしたい場合に不都合が生じるため、特定のPublic IPからのegress trafficに制限したいという要求がある。その要求を満たす方法を調査した。

AKSでの実現方法

2020/03/13時点でVirtual Network NATが一般提供されたので、以下の3方法が考えられる。

1. Azure Firewallを使う

Azure Kubernetes Service (AKS) でクラスター ノードに対するエグレス トラフィックを制御する
https://docs.microsoft.com/ja-jp/azure/aks/limit-egress-traffic
Control egress traffic for cluster nodes in Azure Kubernetes Service (AKS)
https://docs.microsoft.com/en-us/azure/aks/limit-egress-traffic

これはインターネットアクセスのためにプロキシを配置しているオンプレミス環境から、インターネットにアクセスするイメージと同じなので、イメージしやすいかもしれない。FirewallのSubnetに対してUDRを振り向けることで実現する。以下は(Load Balancerを挟んではいるが)イメージ図。

https://docs.microsoft.com/ja-jp/azure/firewall/media/integrate-lb/firewall-lb-asymmetric.png
https://docs.microsoft.com/en-us/azure/firewall/media/integrate-lb/firewall-lb-asymmetric.png

AKSの内部サブネットでのトラフィックはブロックしないように注意。

ネットワーク セキュリティ グループ (NSGs) とファイアウォールを使用して内部サブネット トラフィックをブロックすることは、サポートされていません。 クラスター内のトラフィックを制御およびブロックするには、ネットワーク ポリシーを使用します。

https://docs.microsoft.com/ja-jp/azure/aks/limit-egress-traffic
https://docs.microsoft.com/en-us/azure/aks/limit-egress-traffic

2. Standard Load Balancer を使う

エグレスのために独自のパブリック IP またはプレフィックスを指定する
https://docs.microsoft.com/ja-jp/azure/aks/load-balancer-standard#provide-your-own-public-ips-or-prefixes-for-egress
Provide your own public IPs or prefixes for egress
https://docs.microsoft.com/en-us/azure/aks/load-balancer-standard#provide-your-own-public-ips-or-prefixes-for-egress

通常ロードバランサーはバックエンドに複数のサービスがあって…というイメージだが、この例ではバックエンドが外部インターネットへのアクセスと考えるとわかりやすいかもしれない。

3. Virtual Network NATを使う

Internetへのアウトバウンド接続をNAT Gatewayで束ねることができる。サブネットごとにNAT Gatewayを作成できる。詳細は以下。

Virtual Network NAT
https://logico-jp.io/2020/02/20/virtual-network-nat/

その他

Standard Load BalancerとFirewallを組み合わせる場合には、以下のドキュメントに記載がある。

Azure Firewall と Azure Standard Load Balancer を統合する
https://docs.microsoft.com/ja-jp/azure/firewall/integrate-lb
Integrate Azure Firewall with Azure Standard Load Balancer
https://docs.microsoft.com/en-us/azure/firewall/integrate-lb

以下のドキュメントではサービス単位でstatic public IPを割り当てる仕組みを説明している。

Azure Kubernetes Service (AKS) でエグレス トラフィックに静的パブリック IP アドレスを使用する
https://docs.microsoft.com/ja-jp/azure/aks/egress
Use a static public IP address for egress traffic in Azure Kubernetes Service (AKS)
https://docs.microsoft.com/en-us/azure/aks/egress

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中