Kubernetesが非常に優れたプラットフォームであることは既にご存じの方も多いかと思います。そして最大限に活用するためには、様々なツールと連携をして活用することも必要となります。Ingress Controllers がその一つです。Kubernetes を使用している方は、Ingress Controllerについて良くご存じかもしれません。ここでは、Ingress 及び Ingress Controllerについて改めて、簡単にまとめてみます。
設計上、Podはクラスター内の他Podからのみアクセスでき、外部ネットワークからはアクセスできません。Ingress は、外部接続のルールを定義する HTTP負荷分散用の Kubernetes に組み込みまれている構成要素です。外部アクセスを提供する必要がある場合は、Serviceリソースを利用。さらにURI パス、バックエンドサービス名、その他の情報を含むルールを定義する Ingress リソースを作成します。次に、Ingress Controllerを使用して、ロードバランサーを自動的に構成し、Ingressリソースを基に設定を有効にします。
NGINX(Part of F5)の提供するNGINX Ingress Controller は、Kubernetes アプリケーションにエンタープライズ グレードのリバースプロキシを提供します。このブログでは、NGINX Ingress Controller と Ranch App及びMarketplace との統合について説明します。まず最初に、NGINX Ingress Controller について説明しましょう。
NGINXを使用するKubernetes Ingress Controllerは2種類あります。どちらもオープンソースで、GitHub でホストされています。そのうち1 つは Kubernetes オープンソース・コミュニティ(kubernetes/ingress-nginx on GitHub)によってメンテナンスされているもの、もう1つはNGINX(Part of F5)が提供しているものとなります。(nginxinc/kubernetes-ingress on GitHub)
NGINX Ingress Controllerとどう違うのか?
Kubernetesコミュニティ版の NGINX Ingress Controllerとの違いについて、NGINX 製品管理担当副社長である Sidney Rabsatt は下記のように述べています。
・開発理念:Ingress Controllerの設計において、NGINXが最も重要だと考えていることは、長期的な安定性と一貫性を提供することです。リリース間の動作の変更、特に下位互換性を損なうような変更を避けるために、可能な限りの努力を払っています。アップグレード時に予期せぬサプライズが発生しない安定性がNGINX Ingress Controllerでは保証されます。
・継続的な実稼働への対応:NGINX は、NGINX Ingress Controllerの全てのリリースで商用サポートを提供とメンテナンスしています。NGINXのオープンソース版、NGINX Plusのどちらを使用しているかにかかわらず、「エンタープライズグレード」の品質でご使用いただけます。
・統合されたコードベース:NGINX Ingress Controllerは、負荷分散に 100% 純粋な NGINX または NGINX Plusインスタンスを使用し、ネイティブなNGINX 機能のみを使用してベスト プラクティス構成を適用することが可能です。これは、サードパーティのモジュールまたは Lua コードに依存していません。Kubernetesコミュニティ版の Ingress Controllerは、NGINX Plusに固有の一部の機能について、低速になりがちな Lua コードに依存しています。
・セキュリティ:NGINX Ingress Controllerは、GitHub上でロードバランサー (NGINX および NGINX Plus) とIngress Controllerのソフトウェア (Go アプリケーション) を自社で開発および保守しています。
・サポート:NGINX Ingress Controllerは、有償版NGINX Plusおよび NGINX オープンソース版のどちらにも対応していますが、有償版NGINX PlusでNGINX Ingress Controllerを使用した場合に得られる主なメリットをご紹介します。
- 追加機能 – リアルタイムメトリックス、高度な負荷分散拡張機能、セッションパーシステンス、アクティブヘルスチェック、JWT認証
- 動的再構成 – より高速で中断のない再構成により、一貫したパフォーマンスとリソース使用率でアプリケーションを提供できます。
- 商用サポート – 経験豊富なNGINX技術者のサポートを受けることでDevOps チームに NGINX 開発者がいるような安定した運用が可能になります。 NGINX、NGINX Plusはどちらも、ベアメタル、コンテナ、VM、パブリック/プライベート/ハイブリッドクラウド等、あらゆるプラットフォームにデプロイできます。
SUSE RancherとNGINXの連携
SUSE Rancher(以下Rancher)は皆様ご存じの通り、コンテナ管理の利便性や効率を上げることが可能なプラットフォームです。オンプレミスやクラウドサービス上に、Kubernetesクラスターを構築し管理を可能にします。また、「カタログ」化されたアプリケーションがすぐに使えるのも特長です。
SUSEに統合されたRancher Labs との提携により、NGINX Ingress Controllerは、Rancher上のカタログサービスに登録されており、簡単にRancher上で選択、展開できるようになっています。
そしてNGINXオープンソース版をまずは活用することができる Rancher Chart の形式でソリューションを提供しています。こちらを活用して拡張機能を備えた商用サポートされているバージョンの NGINX Plus への簡単なアップグレード パスを提供します。
両方のバージョンの設定について見ていきましょう。
いくつかの前提条件を満たした上で、Rancher Chart UI を介していくつかの構成オプションを設定し、NGINX オープンソースまたは NGINX Plusを Rancherの管理クラスターにデプロイします。
NGINX PlusのIngress Controllerを使うことで、次に説明する多くの高度な機能をRancher上で利用できるようになります。これには、Kubernetes クラスター内に配置されるWebアプリケーションファイアウォール (WAF) 機能を備えたNGINX App Protect もIngress Controllerに含まれています。
では、なぜKubernetesにそもそもNGINX Ingress Controllerが必要なのでしょうか?
NGINX Ingress Controllerを連携させることで、SSL/TLS終端、WebSocket、URLリライト、HTTP/2、Prometheus、さらにHelmChartでインストール等の機能が提供されます。NGINX PlusのNGINX Ingress Controllerとの連携により、下記のようなメリットも付加されます。
- Ingress設定と運用の複雑さを軽減
- 高度な負荷分散機能の実現
- 可観測性
- セキュリティ
- セルフサービスとマルチテナンシー
- 本番環境への適用
Kubernetes環境に最適なWAF、NGINX App Protect との統合
前述したように、NGINX Ingress Controllerは、WAFモジュールであるNGINX App Protectを搭載しています。これは、悪意のある攻撃からコンテナアプリケーションを保護するとともに、Ingress Controllerで唯一のNGINXによりサポートされたWAF です。
WAFをIngress Controller に統合する重要な理由
WAFをIngress Controller に統合することで、管理者とアプリ開発者の双方に次の3つの利点がもたらされます。
- コンテナアプリケーションの保護
- データプレーンの統合
- コントロールプレーンの統合 – 管理するセキュリティツールが少なくなるため、潜在的な障害点が減少します。
開発者は、他のチームに権限付与や設定依頼することなく、WAF機能をワークフローに組み込むこともできます。これにより、効率が高まりセキュリティ要件の準拠を実現できます。
まとめ
このようにRancherとNGINX Ingress Controllerを組み合わせることで、現在NGINXで利用しているリバースプロキシ設定を簡単に活用することや、NGINX App Protectによるコンテナアプリケーションの保護、各組織やチームによるマルチテナント、CI/CDを意識したシステム運用をしていただくことが可能になります。