Ingress
Kubernetes クラスタ外部からの HTTP/HTTPS トラフィックをサービスにルーティングするリソース
Kubernetesネットワーク
Ingress とは
Ingress は、Kubernetes クラスタ外部からの HTTP/HTTPS トラフィックを、ホスト名やパスに基づいて内部の Service にルーティングするリソースである。レイヤー 7 (HTTP) のロードバランシングを提供し、TLS 終端、パスベースルーティング、ホストベースルーティングを実現する。
Service との違い
| リソース | レイヤー | 機能 |
|---|---|---|
| Service (LoadBalancer) | L4 (TCP/UDP) | IP + ポートでルーティング |
| Ingress | L7 (HTTP/HTTPS) | ホスト名 + パスでルーティング |
Service の LoadBalancer タイプはサービスごとに LB を作成するため、サービス数が増えるとコストが膨らむ。Ingress は 1 つの LB で複数サービスにルーティングできる。
基本的な設定
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
spec:
tls:
- hosts: [example.com]
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port: { number: 80 }
- path: /
pathType: Prefix
backend:
service:
name: web-service
port: { number: 80 }
/api/* は api-service に、それ以外は web-service にルーティングされる。
Ingress Controller
Ingress リソースだけでは何も起きない。Ingress Controller が実際のルーティングを処理する。
| Controller | 特徴 |
|---|---|
| AWS ALB Ingress Controller | ALB を自動作成、EKS で推奨 |
| Nginx Ingress Controller | 最も広く使われている |
| Traefik | 自動設定、Let's Encrypt 統合 |
| Istio Gateway | サービスメッシュと統合 |
EKS での ALB Ingress
EKS では AWS Load Balancer Controller を使い、Ingress リソースから ALB を自動作成する。
metadata:
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:...
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
alb.ingress.kubernetes.io/ssl-redirect: "443"
Gateway API (Ingress の後継)
Kubernetes 1.27 で Gateway API が GA になった。Ingress の後継として、より表現力の高いルーティングを提供する。
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-route
spec:
parentRefs:
- name: my-gateway
rules:
- matches:
- path: { type: PathPrefix, value: /api }
backendRefs:
- name: api-service
port: 80
Ingress を扱う関連書籍も多い。