Service
Kubernetes で Pod 群への安定したネットワークアクセスを提供する抽象化リソース
Service とは
Service は Kubernetes のリソースで、動的に変化する Pod 群に対して安定した IP アドレスと DNS 名を提供する。Pod は作成・削除のたびに IP が変わるが、Service は固定の ClusterIP を持ち、ラベルセレクタで対象の Pod にトラフィックを振り分ける。
Service の種類
Service の種類を以下にまとめる。
| タイプ | アクセス範囲 | 用途 |
|---|---|---|
| ClusterIP | クラスター内部のみ | マイクロサービス間の通信 |
| NodePort | ノードの IP + ポート | 開発・テスト |
| LoadBalancer | 外部ロードバランサー | 本番の外部公開 |
| ExternalName | 外部 DNS 名へのエイリアス | 外部サービスへの参照 |
ClusterIP (デフォルト)
ClusterIP (デフォルト) の例を示す。
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
type: ClusterIP
selector:
app: order-service # このラベルを持つ Pod にトラフィックを振り分け
ports:
- port: 80 # Service のポート
targetPort: 3000 # Pod のポート
クラスター内の他の Pod から http://order-service でアクセスできる。Kubernetes の内部 DNS が order-service.default.svc.cluster.local を解決する。
LoadBalancer (外部公開)
LoadBalancer (外部公開) の例を示す。
apiVersion: v1
kind: Service
metadata:
name: api-gateway
spec:
type: LoadBalancer
selector:
app: api-gateway
ports:
- port: 443
targetPort: 8080
EKS では AWS の NLB (Network Load Balancer) が自動的に作成される。
Service の仕組み
Service の仕組みを図で示す。
[クライアント] → Service (ClusterIP: 10.0.0.1:80)
↓ kube-proxy がトラフィックを振り分け
[Pod A (10.0.1.1:3000)]
[Pod B (10.0.1.2:3000)]
[Pod C (10.0.1.3:3000)]
kube-proxy が iptables または IPVS ルールを設定し、Service の IP へのトラフィックを Pod に振り分ける。Pod が追加・削除されると、エンドポイントが自動的に更新される。
Headless Service
Headless Service の例を示す。
spec:
clusterIP: None # Headless Service
ClusterIP を持たず、DNS が個々の Pod の IP を直接返す。StatefulSet (DB クラスター) で特定の Pod に直接アクセスする場合に使う。
Ingress との関係
Service はレイヤー 4 (TCP/UDP) のロードバランシングを提供する。レイヤー 7 (HTTP) のルーティング (パスベース、ホストベース) が必要な場合は Ingress を使い、Ingress が Service にトラフィックを振り分ける。
[外部] → [Ingress] → /api → [api-service] → [Pod]
→ /web → [web-service] → [Pod]
Service については関連書籍でも詳しく扱われている。
この記事は役に立ちましたか?
関連用語
Pod
Kubernetes の最小デプロイ単位で、1 つ以上のコンテナをまとめて管理するリソース
Deployment
Kubernetes で Pod のレプリカ数、更新戦略、ロールバックを宣言的に管理するリソース
Ingress
Kubernetes クラスタ外部からの HTTP/HTTPS トラフィックをサービスにルーティングするリソース
Pod Disruption Budget
Kubernetes でメンテナンス時に同時に停止できる Pod 数を制限し、サービスの可用性を保証するリソース
Kubernetes
コンテナのデプロイ、スケーリング、管理を自動化するオープンソースのオーケストレーションプラットフォーム
Kubernetes サービスアカウント
Pod に割り当てる ID で、RBAC と連携して Pod の API アクセス権限を制御する
関連する記事
技術書の読む順番戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで理解の深さと速度を飛躍的に高める方法を解説します。
技術書を Kindle で読むコツ - 電子書籍ならではの活用術
技術書を Kindle で効率的に読むための具体的なテクニックを紹介します。ハイライト、検索、フォントサイズの調整など、紙にはない電子書籍の強みを活かす方法。
O'Reilly の表紙はなぜ動物なのか - 技術書の装丁に隠された物語
O'Reilly の動物表紙の由来、技術書のフォント選び、判型の違いが読みやすさに与える影響など、装丁にまつわる雑学を紹介します。