Kubernetes を使用する場合、特に AKS, EKS のようなパブリッククラウドの Kubernetes は、ネットワーク構成が柔軟ではないため、途中経路上の通信制御、特にアウトバウンド制御に問題がある場合があります。
例えば、AKS でプライベートアクセス専用のアプリケーションをデプロイする場合、サービスリソースでアノテーションを使用すれば、NSG と動的に連携して柔軟なアクセス制御が可能ですが、アウトバウンドはそれの対象外です。
一方で、アウトバウンド通信を制御するケースも実際は多くないかもしれませんし、例えば中小企業レベルでは、大抵の場合、全く制御していないことが多いと思います。そもそも最近の中小企業では、AWS ばかり使っていて、そのような企業にはまともなネットワークエンジニアがいないため、直接インターネットに抜けて使っているような場合がほとんどでもあります。
という、話もあるということを前置きして、NetworkPolicy を使用したアウトバウンドの制御方法は以下のとおりです。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-rfc1918-only
namespace: my-system
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
- ipBlock:
cidr: 172.16.0.0/12
- ipBlock:
cidr: 192.168.0.0/16
この設定により、my-system に含まれる Pod はプライベートアドレスである RFC1918 のアドレスにアウトバウンド通信が制限されます。このアドレスは必要に応じで調整すれば良いでしょう。
この上で、インターネット上の何かと通信したい場合はどうするのか?という観点においては、やはりプロキシサーバーを使用させるのが良いかと思います。そのプロキシサーバーも通信可能な FQDN は信頼性の高いものでフィルターをかけるべきでしょう。もちろん基本的なセキュリティ設定はした上でとなりますが。アクセスログも後から分かりますしね。
Amazonで購入するKubernetes NetworkPolicy を使用したアウトバウンド通信の制御