Ingress いんぐれす
簡単に言うとこんな感じ!
Ingressはホテルの「フロント受付」みたいなものだよ! 外から来たお客さん(HTTPリクエスト)を「レストランはこちら」「スパはこちら」って正しい部屋(サービス)に案内してくれるKubernetesの入口係なんだ!
Ingressとは
Ingress(イングレス)とは、Kubernetesクラスター(複数のサーバーをまとめて管理する仕組み)の外部から来るHTTP/HTTPSのトラフィックを、クラスター内部の適切なサービスへ振り分けるためのAPIオブジェクトです。英語の “ingress” は「入口・入場」を意味し、まさにクラスターへの「玄関口」の役割を担います。
Kubernetesでアプリを動かすとき、外の世界からアクセスさせるには何らかの「入口」が必要です。単純な方法として NodePort(ノードのポートを直接開放)や LoadBalancer(クラウドのロードバランサーを1サービスごとに用意)がありますが、サービスが増えるたびにコストや管理の手間が増大します。Ingressはそれを解決し、1つの入口で複数のサービスへのルーティングを一元管理できる仕組みです。
たとえば example.com/api へのリクエストはAPIサービスへ、example.com/shop へのリクエストはショッピングサービスへ、といった振り分けをYAMLファイル1枚で定義できます。さらにSSL/TLS証明書の終端処理(HTTPSの暗号・復号をここで行うこと)も担えるため、各サービス側で証明書を個別管理する必要がなくなります。
Ingressの構造と仕組み
Ingressは大きく 「IngressリソースとIngress Controller」の2層構造になっています。
| 要素 | 役割 | 例 |
|---|---|---|
| Ingressリソース | ルーティングルールを定義するYAMLオブジェクト | kind: Ingress で書くマニフェスト |
| Ingress Controller | ルールを読んで実際にトラフィックを制御するプロセス | Nginx / Traefik / AWS ALB / GCE |
Kubernetesにデフォルトで組み込まれているのは「Ingressリソース(ルール定義)」だけで、実際に動くIngress Controllerは別途インストールが必要な点が重要です。
ルーティングの種類
| ルーティング種別 | 説明 | 例 |
|---|---|---|
| ホストベース | ドメイン名で振り分け | api.example.com → APIサービス |
| パスベース | URLパスで振り分け | /shop → ショップサービス |
| 組み合わせ | ホスト+パスを併用 | app.example.com/v2 → v2サービス |
覚え方
「I(ngressは)入口係、C(ontrollerが)制御係」 IngressリソースとIngress Controllerはセットで使うものと覚えよう!
主なIngress Controller一覧
| Controller | 特徴 | 向いているシーン |
|---|---|---|
| Nginx Ingress Controller | 最も広く使われる。OSS | オンプレ・マルチクラウド |
| Traefik | 自動証明書取得(Let’s Encrypt)が得意 | 小規模・開発環境 |
| AWS ALB Ingress Controller | AWSのALBと連携 | AWS EKS環境 |
| GCE Ingress Controller | Google Cloud LBと連携 | GKE環境 |
| Istio Gateway | サービスメッシュと統合 | マイクロサービス複雑構成 |
歴史と背景
- 2014年 — Kubernetesがオープンソース公開。当初はサービス公開手段としてNodePortとLoadBalancerのみ
- 2015年 — Kubernetes 1.1でIngressリソースがベータ機能として初登場。HTTP(S)ルーティングの標準的な方法として提案される
- 2016〜2018年 — Nginx、Traefik、HAProxyなどサードパーティのIngress Controllerが急速に充実。本番環境での採用が広まる
- 2019年 — AWS、GCP、Azureが各自のマネージドKubernetes(EKS/GKE/AKS)でIngress Controllerをフルサポート
- 2020年 — Kubernetes 1.18でIngressリソースが一般提供(GA)に昇格。
networking.k8s.io/v1APIグループへ移行 - 2021年〜現在 — より高機能な後継として Gateway API の開発が進行中。Ingressの限界(高度なトラフィック制御)を補う次世代仕様として注目される
IngressとKubernetesの他の公開方法との比較
外部からKubernetesサービスを公開する方法は複数あり、用途によって使い分けます。
| 方式 | 特徴 | コスト感 | 向いているケース |
|---|---|---|---|
| ClusterIP | クラスター内部のみ通信可 | 低 | 内部サービス間通信 |
| NodePort | ノードのIPとポートを直接公開 | 低 | 開発・テスト用途 |
| LoadBalancer | クラウドのLBを1サービスに1台割当 | 高(サービス数×LB費用) | 単一の重要サービス |
| Ingress | 1つのLBで複数サービスに振り分け | 中(LBは1台で済む) | 本番・複数サービス |
| Gateway API | Ingressの後継・高機能版 | 中〜高 | 複雑なトラフィック制御 |
以下にIngress経由でのトラフィック流れを図解します。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 7230 | HTTP/1.1 メッセージ構文とルーティングの基礎(IngressがルーティングするHTTPの仕様) |
| RFC 8446 | TLS 1.3(IngressのSSL終端で利用される暗号化プロトコル) |
| RFC 7540 | HTTP/2(多くのIngress ControllerがサポートするHTTPプロトコル) |
関連用語
- Kubernetes — コンテナを大規模に管理・運用するオーケストレーションプラットフォーム
- Pod — Kubernetesで動くコンテナの最小単位
- Service(Kubernetes) — Pod群への安定したアクセス窓口を提供するKubernetesオブジェクト
- LoadBalancer — 複数のサーバーへトラフィックを分散させる装置・仕組み
- SSL/TLS — 通信を暗号化するセキュリティプロトコル。IngressのHTTPS終端で使われる
- Gateway API — Ingressの後継として開発中のKubernetes標準トラフィック管理API
- Nginx — 最も広く使われるIngress Controllerの実装のひとつ
- マイクロサービス — アプリを小さなサービスに分割するアーキテクチャ。Ingressが複数サービスを束ねる文脈で重要