Service(Kubernetes) さーびす(くーばねてぃす)
簡単に言うとこんな感じ!
Kubernetesの中で動くアプリ(Pod)は、起動するたびにIPアドレスが変わっちゃうんだ。Serviceはその「変わるIPをひとつの固定窓口でまとめてくれる受付係」みたいなもの!外から「ここに来ればOK」って伝えられる安定した入口を作ってくれるんだよ。
Serviceとは
Kubernetesでは、アプリケーションは Pod(ポッド)と呼ばれる小さな実行単位で動きます。しかしPodはスケールアウト・障害回復などで頻繁に起動・停止し、そのたびに IPアドレスが変わるという性質を持っています。これでは「どこに通信すればいいか」がわからなくなってしまいます。
Serviceはこの問題を解決するKubernetesのリソースです。特定のラベルを持つPod群をまとめ、一つの固定された名前・IPアドレス(ClusterIP) を提供します。通信の送り先はServiceが自動的に振り分けるため、Podが何台に増えても、入れ替わっても、呼び出し側は同じ宛先に送るだけでOKです。
実務上は「システムの各部品(マイクロサービス)同士をつなぐ内線電話の交換機」と理解すると掴みやすいでしょう。ServiceなしにPod同士を直接つなごうとすると、IPが変わるたびに設定を書き直す必要が生じ、運用が破綻します。
Serviceの種類と役割
Serviceには用途に応じて複数の type(タイプ) があります。公開範囲と使いどころが異なるため、システム設計時に選び分けます。
| type | 公開範囲 | 典型的な使いどころ |
|---|---|---|
| ClusterIP(デフォルト) | クラスター内部のみ | マイクロサービス同士の内部通信 |
| NodePort | クラスター外部(ノードのIPとポート経由) | 開発・検証環境での簡易公開 |
| LoadBalancer | クラスター外部(クラウドのLB経由) | 本番環境での外部公開 |
| ExternalName | 外部DNSへの転送 | 外部サービスをクラスター内名前で参照 |
覚え方:「内・外・LB・名前」
- ClusterIP → クラスターの”内側”だけ
- NodePort → ノード(サーバー)のポートから”外に出る”
- LoadBalancer → クラウドのLBで本番公開
- ExternalName → 外部URLに”名前だけ”つける
Serviceが通信を届ける仕組み
[クライアント(Pod or 外部)]
│
▼
Service(固定IP・固定名)
│ kube-proxy がルーティング
├──▶ Pod A (192.168.x.1)
├──▶ Pod B (192.168.x.2)
└──▶ Pod C (192.168.x.3)
Serviceは セレクター(selector) というラベル条件で対象Podを自動検出します。Podが増減しても、ラベルさえ合っていれば自動的にルーティング先に追加・削除されます(これを エンドポイント の動的管理と呼びます)。
歴史と背景
- 2014年 — Kubernetesがオープンソース公開。当初からServiceリソースが設計に組み込まれていた。マイクロサービスアーキテクチャの普及と歩調を合わせて開発された
- 2016年 — Kubernetes 1.2でIngressリソースが追加。HTTPルーティングはIngressに委ね、Serviceはレイヤ4(TCP/UDP)の安定した接続口として役割分担が明確化
- 2018年頃 — クラウド各社(AWS EKS・GKE・AKS)がLoadBalancer typeを自社のLBサービスと自動連携させる機能を整備。本番運用での採用が急拡大
- 2020年以降 — Serviceの上位互換として Gateway API の開発が進む。より柔軟なルーティング制御が可能になり、将来的にIngressとServiceを統合する方向で標準化が進行中
typeごとの通信経路
各typeでパケットがどう流れるかをイメージで整理します。
ServiceとIngressの使い分け
Serviceだけでは「URLのパスに応じて異なるサービスへ振り分ける」といったHTTPレベルの制御はできません。その場合は Ingress(イングレス)を組み合わせます。
| 機能 | Service | Ingress |
|---|---|---|
| レイヤ | L4(TCP/UDP) | L7(HTTP/HTTPS) |
| パスベースルーティング | ✗ | ✓ |
| TLS終端 | ✗ | ✓ |
| 外部公開 | LoadBalancer typeで可 | Ingress Controller経由 |
関連する規格・RFC
| 規格・ドキュメント | 内容 |
|---|---|
| Kubernetes API Reference v1 / Service | spec.type やセレクター仕様の公式定義 |
| Gateway API(SIG Network) | Serviceの次世代となるL7ルーティングAPI仕様 |
| RFC 793(TCP) | ServiceがL4で扱うTCPプロトコルの基礎仕様 |
関連用語
- Pod — Kubernetesの最小実行単位。Serviceのルーティング先となるコンテナの集まり