NGINX Full Version

Kubernetes環境のデプロイを簡素化する方法

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を使用した場合に得られる主なメリットをご紹介します。

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との連携により、下記のようなメリットも付加されます。

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を意識したシステム運用をしていただくことが可能になります。