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
出典:
- Kubernetes Docs, Cluster Architecture https://kubernetes.io/docs/concepts/architecture/
NetworkPolicy¶
何も制御しないと、クラスタ内通信は広く許可されることが多い。
そのため、必要に応じて NetworkPolicy で、
- どの Pod から
- どの Pod へ
- どのポートで
通信できるかを絞る。
メモ¶
- 「Ingress が通信をさばく」のではなく、Ingress Controller が実装側
- Service は L4 寄り、Ingress は HTTP/HTTPS 寄りの入口として見る
- ネットワークまわりは CNI の実装差もあるので、細部は環境依存になりやすい