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

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

このエントリの目的

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

AKSでの実現方法

現時点では以下の2方法が考えられる。他社サービスの場合はNAT Gatewayを使う方法もあるが、2020/01/14時点ではAzureのGA済みサービス、もしくはパブリックプレビューのサービスとしては存在しない。

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

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

注意

2020/01/14現在、AKSでIngressのIPとEgressのIPに同じIPを利用することはできない。そのため、Ingress IPとEgress IPは分ける必要がある。

その他

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を割り当てる仕組みを説明している。これをKubernetes環境全体に適用したい場合、1もしくは2の方法を使うことになる。

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 と連携中