編集者注 – この記事は全10回のシリーズの一部です:
- 本番環境対応のKubernetesで複雑さを軽減
- 高度なトラフィック管理でKubernetesのレジリエンスを向上させる方法
- Kubernetesの可視性を向上させる方法
- トラフィック管理ツールを使用してKubernetesを保護する6つの方法
- Ingress Controller選定ガイド 第1部:要件の特定
- Ingress Controller選定ガイド 第2部:リスクと将来への備え
- Ingress Controller選定ガイド 第3部:オープンソース、デフォルト、商用の比較
- Ingress Controller選定ガイド、第4回:NGINX Ingress Controllerの選択肢(本記事)
- サービスメッシュの選び方
- 動的なKubernetesクラウド環境におけるNGINX Ingress Controllerのパフォーマンステスト
一連のブログ記事をまとめた無料のeBookもダウンロードできます。『Taking Kubernetes from Test to Production』
Cloud Native Computing Foundation(CNCF)の「2020年調査」によると、NGINXはKubernetes向けIngressコントローラーで最も広く使用されているデータプレーンです。しかし、「NGINX Ingress Controller」が複数存在することをご存じでしょうか。
このブログの旧版は、2018年に「待って、私が使っているKubernetes向けNGINX Ingress Controllerはどれ?」というタイトルで公開されました。執筆のきっかけは、NGINXを使用する2つの一般的なIngress Controllerについて、コミュニティメンバーと交わした会話でした。

混乱が生じた(そして今も続いている)理由は明らかです。どちらのIngressコントローラーも、次の特徴を備えています。
- 「NGINX Ingress Controller」と呼ばれている
- オープンソース
- 非常によく似たリポジトリ名でGitHub上にホスト
- ほぼ同時期に開始されたプロジェクトの成果
そしてもちろん、最大の共通点は、同じ機能を実装していることです。
NGINXとKubernetesコミュニティIngress Controllerの比較
わかりやすくするため、2つのバージョンを次のように区別します。
- コミュニティ版 – kubernetes/ingress-nginx(GitHubリポジトリ)で公開されているコミュニティ版Ingressコントローラーは、NGINX Open Sourceをベースとしており、ドキュメントはKubernetes.ioで提供されています。Kubernetesコミュニティによってメンテナンスされています。
- NGINXバージョン – nginxinc/kubernetes-ingress GitHubリポジトリで公開されているNGINX Ingress Controllerは、F5 NGINXが開発および保守しており、ドキュメントはdocs.nginx.comで提供されています。次の2つのエディションがあります。
- NGINX Open Sourceベース(無料のオープンソースオプション)
- NGINX Plusベース(商用オプション)
Kongなど、NGINXをベースとするIngressコントローラーはほかにも多数ありますが、幸い名前で簡単に区別できます。使用しているNGINX Ingress Controllerが不明な場合は、実行中のIngressコントローラーのコンテナイメージを確認し、Dockerイメージ名を上記のリポジトリと比較してください。
NGINX Ingress Controllerの目標と優先事項
NGINX Ingress ControllerとCommunity Ingress controller(およびNGINX Open Sourceをベースとするその他のIngress controller)の主な違いは、開発モデルとデプロイモデルにあります。これらのモデルは、それぞれ異なる目標と優先事項に基づいています。
- 開発理念 – すべてのNGINXプロジェクトと製品において、長期的な安定性と一貫性を備えた高速かつ軽量なツールを提供することを最優先しています。リリース間での動作変更、特に後方互換性を損なう変更を避けるため、可能な限りの取り組みを行っています。アップグレード時に予期せぬ問題が発生することはありません。また、選択肢を提供することも重視しているため、すべてのソリューションをベアメタル、コンテナ、VM、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなど、あらゆるプラットフォームに導入できます。
- 統合コードベース – NGINX Ingress Controllerは、100%純粋なNGINX Open SourceまたはNGINX Plusインスタンスを負荷分散に使用し、NGINXネイティブの機能のみでベストプラクティスに基づく構成を適用します。相互運用性テストを実施していないサードパーティ製モジュールやLuaコードには依存しません。多数のサードパーティ製リポジトリを組み合わせてIngress Controllerを構築するのではなく、ロードバランサー(NGINXおよびNGINX Plus)とIngress Controllerソフトウェア(Goアプリケーション)を自社で開発・保守しています。Ingress Controllerのすべてのコンポーネントを一元的に管理しています。
- 高度なトラフィック管理 – 標準のKubernetes Ingressリソースの制約の1つは、高度な機能を追加するには、アノテーション、ConfigMap、カスタムテンプレートなどの補助機能を使用してカスタマイズする必要があることです。NGINX Ingress Resourcesは、ネイティブかつ型安全で、インデントを用いた設定形式を提供します。これにより、TCP/UDP、サーキットブレーカー、A/Bテスト、ブルーグリーンデプロイ、ヘッダー操作、相互TLS認証(mTLS)、Webアプリケーションファイアウォール(WAF)など、Ingressの負荷分散機能を容易に実装できます。
- 継続的な本番環境対応 – すべてのリリースは、サポート可能な本番環境向けの基準に従って構築、保守されています。NGINX Open SourceベースとNGINX Plusベースのどちらのエディションを使用していても、この「エンタープライズグレード」重視のメリットを同様に得られます。NGINX Open Sourceユーザーは、GitHubでエンジニアリングチームから質問への回答を得ることができ、NGINX Plusサブスクライバーは業界最高水準のサポートを受けられます。どちらを選んでも、DevOpsチームにNGINX開発者が加わったような安心感が得られます。
NGINX Open SourceとNGINX Plusの比較 — 商用版にアップグレードする理由
ここで、NGINX PlusベースのNGINX Ingress Controllerがもたらす主なメリットについても確認しましょう。「Kubernetes Ingress Controllerの選び方、第3部:オープンソース、デフォルト、商用の比較」で説明したように、オープンソースのIngress Controllerと商用のIngress Controllerには大きな違いがあります。大規模なKubernetes環境への導入や複雑なアプリケーションの本番運用を計画している場合、商用のIngress Controllerを利用することで、いくつかの重要な領域において時間とコストを削減できます。
セキュリティとコンプライアンス
多くの組織がKubernetesアプリを本番環境にデリバリーできない主な理由の1つは、セキュリティを確保し、コンプライアンスを維持することの難しさです。NGINX PlusベースのNGINX Ingress Controllerは、アプリとお客さまを保護するうえで不可欠な5つのユースケースを実現します。

- エッジを保護 – 適切に設計されたKubernetes環境では、Ingress ControllerがKubernetes内で稼働するサービスへのデータプレーントラフィックの唯一のエントリポイントとなるため、Webアプリケーションファイアウォール(WAF)の配置に最適です。NGINX App ProtectはNGINX Ingress Controller<.htmla>と統合され、OWASP Top 10をはじめとする多くの脆弱性からKubernetesアプリを保護し、PCI DSSへの準拠を確保するとともに、ModSecurityを上回るパフォーマンスを発揮します。
- 認証と認可を一元化 – OAuth 2.0フレームワークを基盤とするOpenID Connect(OIDC)とJSON Web Token(JWT)認証を使用して、イングレスのポイントに認証およびシングルサインオン(SSO)レイヤーを実装できます。
- エンドツーエンド暗号化を実装 – サービス間のトラフィックを保護する必要がある場合は、サービスメッシュの導入を検討することになるでしょう。常に無料で利用できるNGINX Service MeshはNGINX Ingress Controllerとシームレスに統合され、他のメッシュよりも低いレイテンシで、受信と送信の両方のmTLSトラフィックを効率的に制御できます。
- タイムリーかつプロアクティブなパッチ通知を受け取る – CVEが報告されると、サブスクライバーにはプロアクティブに通知され、パッチが迅速に提供されます。GitHubで更新を常に確認したり、パッチのリリースを数週間(場合によっては数か月)待ったりすることなく、すぐにパッチを適用して悪用のリスクを軽減できます。
- FIPSに準拠 – FIPSモードを有効にすることで、NGINX Plusと通信するクライアントが、信頼できる実装による強力な暗号を使用するようにできます。
ドイツの大手自動車メーカーAudiがRed Hat OpenShiftアプリを保護した方法については、「Audi、NGINXで将来を見据えた技術ビジョンとアプリのイノベーションを実現」をご覧ください。
アプリケーションのパフォーマンスとレジリエンス
稼働時間とアプリの速度は、多くの場合、開発者やプラットフォーム運用チームにとって重要業績評価指標(KPI)となります。NGINX PlusベースのNGINX Ingress Controllerは、Kubernetesのメリットを実現するうえで役立つ5つのユースケースを可能にします。

- リアルタイム監視を利用 – NGINX Plusダッシュボードには、負荷とパフォーマンスに関する数百もの主要なメトリクスが表示されるため、アプリケーションの動作が遅い(または停止している)原因を迅速にトラブルシューティングできます。
- 障害をより迅速に検出して解決 – TCPおよびUDPアップストリームサーバーの稼働状態をプロアクティブに監視するアクティブヘルスチェックを使用して、サーキットブレーカーを実装します。
- 再起動なしで再構成 – 高速でサービスを中断しない再構成により、一貫したパフォーマンスとリソース使用量を維持しながらアプリケーションを提供でき、オープンソースの代替製品よりも低いレイテンシーを実現できます。
- 新機能とデプロイを徹底的にテスト – キーバリューストアを活用して、リロードせずに割合を変更できるため、A/Bテストやブルーグリーンデプロイを容易に実施できます。
- サポートのニーズに迅速に対応 – コミュニティからの回答を待てない組織や、機密データが漏えいするリスクを負えない組織にとって、機密性が確保された商用サポートは不可欠です。NGINXサポートは、ニーズに合わせて複数のレベルから選択でき、インストール、デプロイ、デバッグ、エラー修正に関する支援を提供します。何かがどうも「おかしい」と感じる場合にもサポートを受けられます。
ビジネス向けテキストメッセージング企業のZipwhipが、SaaSアプリで99.99%の稼働率を達成した方法については、「NGINXでAmazon EKSのセキュリティとトラフィックの可視性を強化」をご覧ください。
次のステップ:NGINX Ingress Controllerを試す
オープンソースのIngressコントローラーがアプリに適していると判断された場合は、F5のGitHubリポジトリからすぐに始められます。
大規模な本番環境への導入には、NGINX Plusベースの商用Ingressコントローラーをぜひお試しください。NGINX App Protectを含む30日間の無料トライアルをご利用いただけます。
著者について

関連するブログ記事
チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。
AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。
JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。
F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。
NGINX PlusによるAWS Auto Scalingグループの負荷分散
新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります