Ingress

Kubernetes クラスタ外部からの HTTP/HTTPS トラフィックをサービスにルーティングするリソース

Kubernetesネットワーク

Ingress とは

Ingress は、Kubernetes クラスタ外部からの HTTP/HTTPS トラフィックを、ホスト名やパスに基づいて内部の Service にルーティングするリソースである。レイヤー 7 (HTTP) のロードバランシングを提供し、TLS 終端、パスベースルーティング、ホストベースルーティングを実現する。

Service との違い

Service との違いを以下にまとめる。

リソースレイヤー機能
Service (LoadBalancer)L4 (TCP/UDP)IP + ポートでルーティング
IngressL7 (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 にルーティングされる。

Controller が複数入っているクラスタでは spec.ingressClassName でどの Controller に処理させるかを明示する。省略した場合は ingressclass.kubernetes.io/is-default-class を付けた IngressClass が使われ、既定の IngressClass が無いクラスタでは既定を前提にする Controller は反応しない (一部の Controller は既定指定なしでも動作する)まま Ingress が放置される。

Ingress Controller

Ingress リソースだけでは何も起きない。Ingress Controller が実際のルーティングを処理する。

Controller特徴
AWS Load Balancer ControllerALB を自動作成、EKS で推奨 (旧称 AWS ALB Ingress Controller)
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 の後継)

Gateway API は Kubernetes 本体とは別に配布される拡張 (CRD 群) で、2023 年 10 月の v1.0 で Gateway・GatewayClass・HTTPRoute が GA になった。Kubernetes を新しくすれば自動的に使えるものではなく、クラスタへ CRD を入れた上で対応する Controller を動かす必要がある。

Kubernetes プロジェクトは Ingress ではなく Gateway の利用を推奨しており、Ingress API は凍結されている。凍結の意味は「削除される」ではなく、GA API としての安定性保証は続き削除の予定も無い一方、今後の機能追加は Gateway API 側にしか入らないということである (2026 年 8 月時点)。既存の Ingress を慌てて捨てる必要はないが、トラフィック分割や共通の待ち受け設定の共有といった Ingress の表現力を超える要件が出た時点で、annotation を増やして凌ぐより Gateway API へ移る方が素直になる。

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 を扱う関連書籍も多い。

この記事は役に立ちましたか?

関連用語

関連する記事