コンテンツにスキップ

Kubernetes ネットワーク

Kubernetes のネットワークは、最初は「Pod 間通信」「Service」「外部公開」の 3 段階で考えるとわかりやすい。

基本の見方

  • Pod には IP が振られる
  • Pod 同士はクラスタ内で直接通信できる前提
  • ただし Pod の IP は入れ替わりやすい
  • そのため、安定した入口として Service を使う

Service

Service は Pod 群に対する固定の名前と到達先を作る仕組み。

  • ClusterIP: クラスタ内部向け
  • NodePort: ノードのポートで外に出す
  • LoadBalancer: クラウドのロードバランサー連携

Ingress

Ingress は HTTP/HTTPS のルーティングルール。

  • URL パスやホスト名で振り分ける
  • TLS 終端と合わせて使うことが多い
  • 実際に通信をさばくには Ingress Controller が必要

通信の簡易図

[User / Browser]
        |
        v
[Ingress]
        |
        v
[Service]
        |
   +----+----+
   |         |
   v         v
[Pod A]   [Pod B]

メモ:

  • 外部公開の入口は Ingress
  • Pod の入れ替わりを吸収する安定した入口が Service
  • 実際のアプリ実行単位は Pod

出典:

NetworkPolicy

何も制御しないと、クラスタ内通信は広く許可されることが多い。

そのため、必要に応じて NetworkPolicy で、

  • どの Pod から
  • どの Pod へ
  • どのポートで

通信できるかを絞る。

メモ

  • 「Ingress が通信をさばく」のではなく、Ingress Controller が実装側
  • Service は L4 寄り、Ingress は HTTP/HTTPS 寄りの入口として見る
  • ネットワークまわりは CNI の実装差もあるので、細部は環境依存になりやすい