
Ingress-NGINXはKubernetes公式(kubernetes/ingress-nginxリポジトリ)が開発するIngressコントローラで、Webサーバーとして長い実績を持つNginxをデータプレーンに据えています。2016年頃にプロジェクトとして整備が始まり、現在はKubernetes SIG-Networkの管理下でリリースが続いており、クラウド上だけでなくオンプレ・ベアメタル環境でも事実上の標準Ingress実装として広く採用されています。ホスト名やパスベースのHTTP/HTTPSルーティング、TLS終端、Basic認証、レート制限といった機能をIngress YAMLとアノテーションだけで宣言できる手軽さが普及の理由です。
この記事の目次
- Ingress-NGINXを構成する3要素
- Ingressリソースが動くまでの流れ
- アノテーション活用の押さえどころ
- 他Ingress実装との比較
- まとめ
Ingress-NGINXを構成する3要素

Ingress-NGINXは大きく3つの要素で構成されています。1つ目はGoで書かれたコントローラ本体で、Kubernetes APIをwatchしてIngressリソース・Service・EndpointSliceの変更を検知し、Nginxの設定ファイル(nginx.conf)を生成・再読込する役を担います。
2つ目は実際のトラフィックを捌くNginxプロセスで、コントローラと同じPod内で動作します。3つ目はLuaスクリプトで、リクエスト到達時にバックエンドの選択を動的に切り替える仕組みを提供しています。EndpointSliceの変動に追従してnginx.confを毎回再生成すると無駄なreloadが頻発するため、「設定の骨組みはGoで書き、Pod IPの細かな差し替えはLuaで処理する」というハイブリッド構成にしているのが特徴です。Nginxは2004年にイーゴリ・シソエフ氏が公開したロシア発のWebサーバーで、F5 Networksが2019年にNginx社を買収した後もOSS版が広く使われ続けており、Ingress-NGINXはそのOSS版を内部に組み込んでいます。
Ingressリソースが動くまでの流れ

ユーザーがhost: app.example.comとpath: /apiを指定したIngressリソースを作成すると、コントローラがそれを検知し、対応するNginxのserverブロック・locationブロックを生成します。TLS設定があればkubernetes.io/tlsタイプのSecretから証明書を読み込み、TLS終端も同じPodで行います。生成された設定はLua側のデータストアにバックエンドエンドポイント情報を流し込み、Nginx自身は最小限のreloadで済む仕組みです。
外部公開の手段はクラウドかオンプレかで異なります。AWSやGCPではIngress-NGINXのServiceをtype: LoadBalancerで露出し、クラウドのL4ロードバランサー(ALBではなくNLB相当)から流入を受けるのが定番構成です。ベアメタルではMetalLBを使ってクラスタ内仮想IPを払い出すか、ノードのNodePortを直接運用ネットワーク側のL4で受ける構成になります。どちらの場合もユーザーから見える挙動は同じで、ホスト名・パスに応じてバックエンドServiceに振り分けられます。
アノテーション活用の押さえどころ

Ingress-NGINXの個性は豊富なアノテーションに表れます。代表例がnginx.ingress.kubernetes.io/rewrite-targetで、パス書き換え(例: /api(.*)→/$1)を1行で宣言でき、レガシーアプリの前段にIngressを置く際に重宝します。nginx.ingress.kubernetes.io/ssl-redirectをtrueにすればHTTPアクセスを自動的にHTTPSへ301リダイレクトでき、セキュリティ要件を簡潔に満たせます。
DoS対策ではlimit-rps・limit-connectionsといったレート制限系アノテーションで秒間リクエスト数や同時接続数を絞り、auth-type: basicとauth-secretの組み合わせでBasic認証を即席で実装することもできます。ファイルアップロードを伴うシステムではproxy-body-sizeを既定の1MBから引き上げる必要があり、「アップロード時だけ413 Request Entity Too Largeで失敗する」という典型的な落とし穴を防げます。ConfigMapで全体既定値を、Ingressアノテーションで個別の上書き値を指定する二段構成にすると、運用がきれいに整理できます。
他Ingress実装との比較

Ingress実装は他にも複数あります。Traefikは2015年にコンテイナス社のエマイル・ヴォシェ氏が開発したGo製で、Kubernetes・Docker Swarm・ConsulなどをDynamic Configurationで吸収できるのが特徴です。HAProxy Ingress Controllerは高性能ロードバランサーで知られるHAProxyを使う実装で、超高負荷環境で選ばれます。VMwareが主導するContourはEnvoyをデータプレーンに据え、CRDのHTTPProxyで宣言性を高めています。
Ingress-NGINXの強みは「Kubernetes公式が出している」「Nginxの設定知識が運用にそのまま生きる」「事例とドキュメントが圧倒的に多い」点で、最初に選ぶIngressとしては最も無難な選択肢です。一方、超高負荷でレイテンシを極限まで詰めたい場合や、サービスメッシュ(Istioなど)と統合したい場合はEnvoyベースの実装が候補に上がります。ニーズと運用チームの得意領域に合わせて選ぶことが、長期運用での後悔を減らすコツです。
まとめ
Ingress-NGINXはKubernetes公式のIngressコントローラで、実績豊富なNginxをデータプレーンに据えています。アノテーションでパス書き換え・TLS強制・レート制限などを宣言でき、クラウドからオンプレまで広く使われています。Traefik・Contour・Istio Gatewayと棲み分けつつ、最初に選ぶIngressとして最も無難な定番ポジションを保ち続けています。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント