Kubernetes 入門コース 解説

ServiceとIngress — 変わるPodへ届く通信設計

Podは再作成・増減でIPが変わります。Serviceはその変化を吸収するクラスター内の窓口、IngressはHTTP(S)の外部入口を定義するルールです。

TL;DR

  1. ServiceはラベルセレクタでPod群を選び、安定した接続先を作る。
  2. ClusterIP・Headless・NodePort・LoadBalancerは到達させ方が違う。
  3. Ingressは単体で通信を処理せず、Ingress Controllerが実装を担う。

01ServiceはPodの入れ替わりを隠す

Serviceが複数Podへ振り分け、Pod入れ替わりを吸収する図

Serviceが複数Podへ振り分け、Pod入れ替わりを吸収する図
ServiceはPodの入れ替わりを隠すを図解

Serviceはラベルで対象Podを選び、クラスター内で安定した名前と仮想IPを提供します。クライアントが特定のPod IPを知る必要はありません。

押さえること:ServiceはラベルセレクタでPod群を選び、安定した接続先を作る。

02Serviceの種類は到達経路で選ぶ

4種類のServiceを内側から外側へ並べた通信経路

4種類のServiceを内側から外側へ並べた通信経路
Serviceの種類は到達経路で選ぶを図解

ClusterIPは内部公開、Headlessは個々のPodを直接見つけたい用途、NodePortはNodeのポートを開く方式、LoadBalancerはクラウド連携で外部ロードバランサを作る方式です。用途と公開範囲で選びます。

押さえること:ClusterIP・Headless・NodePort・LoadBalancerは到達させ方が違う。

03IngressはHTTPの入口ルール

利用者→Ingress Controller→Ingress規則→Service→Podの流れ

利用者→Ingress Controller→Ingress規則→Service→Podの流れ
IngressはHTTPの入口ルールを図解

Ingressにはホスト名やパスごとにどのServiceへ送るかを定義します。実際に外部通信を受けるのはIngress Controllerであり、Ingressリソースだけでは公開されません。

押さえること:Ingressは単体で通信を処理せず、Ingress Controllerが実装を担う。

結論

  1. ServiceはラベルセレクタでPod群を選び、安定した接続先を作る。
  2. ClusterIP・Headless・NodePort・LoadBalancerは到達させ方が違う。
  3. Ingressは単体で通信を処理せず、Ingress Controllerが実装を担う。