手当たり次第に書くんだ

飽きっぽいのは本能

Kubernetes NetworkPolicy によるアウトバウンド通信制御

Kubernetes の NetworkPolicy を使って、Pod からのアウトバウンド通信を制御する考え方を整理します。クラウド環境でもオンプレ環境でも、Pod からどこへ通信できるのかを明示したい場面があります。

この記事の位置づけ

この記事は、Pod 単位の通信制御を NetworkPolicy で考える記事です。NetworkPolicy は Kubernetes の宣言だけでは完結せず、実際にどこまで効くかは CNI 実装とクラスタ設計に依存します。

NetworkPolicy でできること

NetworkPolicy は Pod に対する ingress / egress の通信制御を定義します。ただし、実際に効くかどうかは利用している CNI に依存します。Calico など NetworkPolicy を実装する CNI が必要です。

RFC1918 宛てだけ許可する例

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

注意点

  • DNS への通信を許可しないと名前解決できなくなる。
  • proxy 経由で外へ出す場合は、proxy 宛ての通信を明示的に許可する。
  • CNI が NetworkPolicy を実装していない場合、この定義は期待どおりに効かない。
  • FQDN ベースの制御は Kubernetes 標準の NetworkPolicy だけでは扱いにくい。

確認

kubectl -n my-system get networkpolicy
kubectl -n my-system describe networkpolicy allow-rfc1918-only
kubectl -n my-system run curl-test --rm -it --image=curlimages/curl -- sh

まとめ

NetworkPolicy は Pod の通信範囲を狭めるための基本機能ですが、インターネット向け通信を実運用で制御する場合は、DNS、proxy、CNI の実装、監査ログを合わせて考える必要があります。単に外向き通信を止めるだけではなく、どこを経由させ、どこでログを残すかが重要です。

Kubernetes NetworkPolicy によるアウトバウンド通信制御

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る