Kubernetes の Ingress とは?外部トラフィックのルーティング
Ingress は、クラスタに入る外部トラフィックに対する HTTP/S のルーティングルール - hostname と path による - を定義する Kubernetes オブジェクトです。
pod と Service はデフォルトで内部的です。アプリを HTTP または HTTPS で外の世界に公開するには、リクエストを中に取り込み、正しい Service にディスパッチする手段が必要です。Ingress はそのための宣言的なルールセットであり、ingress controller はそれを実際に強制する proxy です。
host と path によるルール
Ingress は、受信リクエストを hostname と URL の path に基づいてバックエンドの Service にマッピングします。例えば api.example.com は api Service にルーティングされ、app.example.com は web Service にルーティングされます - すべて1つの入口の背後で。
ingress controller
Ingress オブジェクトは controller なしでは不活性です。ingress controller(NGINX、Traefik、クラウドの load balancer)は Ingress オブジェクトを監視し、ルールを強制するために実際の proxy を設定します。controller がなければ、ルーティングもありません。
TLS 終端
Ingress は一般に HTTPS を終端します。証明書を保持する TLS Secret を参照すると、controller が TLS を提供し、内部では平文の HTTP を転送します。cert-manager のようなツールが証明書の発行を自動化します。
Ingress と Service type LoadBalancer の違い
- LoadBalancer Service は1つの Service を公開し、多くの場合それぞれにクラウド LB が1つ付きます。
- Ingress は、HTTP ルーティングを伴う単一の LB の背後に多数の Service を集約します。
- Ingress は path と hostname を理解しますが、素の Service は理解しません。
CD における Ingress
CD が新しい Service を deploy するとき、通常はそれを公開するために付随する Ingress(または chart の値)を apply します。preview 環境は、しばしば PR ごとの hostname を Ingress 経由でルーティングされ、取り壊し時に削除されます。
重要なポイント
- Ingress は、内部 Service への HTTP/S ルーティングを host と path で宣言します。
- ルールを実際に強制するには ingress controller が必要です。
- Ingress は多数の Service を1つの入口の背後に集約し、TLS を扱います。