コンテナ オーケストレーションの世界では、よく目にする 2 つの名前があります。 RedHat OpenShift Container Platform (OCP) と Kubernetes。 ご存知のとおり、OpenShift は、他の多くのコンテナ オーケストレーション プラットフォームと同様に、基盤として Kubernetes を使用します。 外部トラフィックを Kubernetes または OpenShift 環境にルーティングすることは、次の 2 つの点で常に少し困難でした。
このブログでは、NGINX Plus を使用して、2 番目の問題をシンプルかつ効率的に解決し、アプリケーション開発チームが Kubernetes 内の Ingress 構成と外部のロードバランサ構成の両方を管理できるようにする方法に焦点を当てます。 始める際に役立つリファレンス アーキテクチャとして、GitHub にnginx-lb-operatorプロジェクトを作成しました。NGINX Load Balancer Operator ( NGINX-LB-Operator ) は、Red Hat Operator Frameworkと SDK を使用して作成された、 NGINX コントローラー用の Ansible ベースの Operator です。 NGINX-LB-Operator は、 NGINX コントローラーの宣言型 API を駆動して、Kubernetes クラスター内で新しいサービスが追加されたり、ポッドが変更されたり、デプロイメントが拡張されたりしたときに、外部 NGINX Plus ロードバランサーの構成を更新します。
NGINX-LB-Operator は、NGINX Plus または NGINX Controller サポート契約の対象外であることにご注意ください。 GitHubでバグを報告したり、トラブルシューティングのサポートを依頼したりできます。
NGINX-LB-Operator は多数の Kubernetes および NGINX テクノロジーに依存しているため、全員が同じ認識を持つように簡単にレビューします。 すでにこれらに精通している場合は、 「NGINX ロードバランサーオペレーター」に進んでください。
Kubernetes は、疎結合された中央 API を中心に構築されたオーケストレーション プラットフォームです。API は、リソース定義のコレクションと、それらのリソースを監視および管理するためのコントローラー (通常はプラットフォーム内でポッドとして実行されます) を提供します。 Kubernetes API は拡張可能であり、Operators (コントローラーの一種) を使用して Kubernetes の機能を拡張できます。
NGINX には 2 つの主要な Ingress コントローラー オプションがありますが、GitHub 内の名前が非常に似ているため、区別するのが少し混乱することがあります。 このトピックについては以前のブログで詳しく説明しましたが、ここで簡単に復習します。
nginxinc/kubernetes-ingress – F5 の NGINX チームによって管理されている Ingress コントローラー。 2 つのバージョンがあります。1 つは NGINX Open Source 用 (速度を重視して構築)、もう 1 つは NGINX Plus 用 (速度を重視して構築されていますが、商用サポートとエンタープライズ グレードの追加機能を備えています) です。 これらを「NGINX(または当社の)Ingress コントローラー」と呼びます。
標準の Kubernetes Ingress リソースを使用して、両方の Ingress コントローラーを管理できます。 また、Ingress 仕様で提供される限定された機能を拡張するために、アノテーションとConfigMap もサポートしていますが、この方法でリソースを拡張することは理想的ではありません。
Ingress コントローラーのリリース 1.6.0以降には、Kubernetes API を拡張し、Kubernetes ネイティブの方法で追加機能を提供する、 VirtualServer および VirtualServerRouteと呼ばれるカスタムNGINX Ingress リソースという、より優れたソリューションが含まれています。 NGINX Ingress リソースは、より多くの NGINX 機能を公開し、Ingress で高度な負荷分散機能を使用したり、ブルーグリーン リリースやカナリア リリース、サーキット ブレーカー パターンを実装したりできるようになります。
これら 3 つの Ingress コントローラー オプションの主な違いの概要については、 GitHub リポジトリを参照してください。
NGINX コントローラーは、複数の環境で NGINX Plus インスタンスを管理し、パフォーマンスとエラー状態に関する重要な洞察を活用するための、クラウドに依存しないコントロール プレーンです。 そのモジュールは、アプリケーション配信(負荷分散) とAPI 管理のための集中構成管理を提供します。 NGINX コントローラーは、物理、仮想、クラウドなど、さまざまな環境にわたる NGINX Plus インスタンスの構成を管理できます。 これは、最終的に一貫性のある宣言型 API を中心に構築されており、アプリとそのコンポーネントのアプリ中心のビューを提供します。 CI/CD パイプラインと簡単にインターフェースし、コードからインフラストラクチャを抽象化して、開発者が仕事に集中できるように設計されています。
Kubernetes に関しては、NGINX コントローラーは、リバース プロキシまたは API ゲートウェイとして前面に展開された NGINX Plus インスタンスを管理できます。 ただし、NGINX コントローラーが NGINX Plus Ingress コントローラー自体を管理するのは意味がありません。Ingress コントローラーはコア Kubernetes リソース (Ingress) の制御ループ機能を実行するため、Kubernetes プラットフォームのツール (標準の Ingress リソースまたは NGINX Ingress リソースのいずれか) を使用して管理する必要があります。
NGINX Plus Ingress Controller for Kubernetes は、Kubernetes 内のサービスを外部に公開するのに最適な方法ですが、Kubernetes ノードまたはクラスターへのトラフィックを管理するために外部の負荷分散レイヤーが必要になることがよくあります。 パブリック クラウドで実行している場合、外部ロード バランサーとしては、NGINX Plus、 F5 BIG-IP LTM Virtual Edition、またはクラウド ネイティブ ソリューションを使用できます。 オンプレミスまたはプライベート クラウドに展開する場合は、NGINX Plus またはBIG-IP LTM (物理または仮想) アプライアンスを使用できます。 他にもロードバランサーが利用できると聞きましたが、信じられません 😉 。
外部ロードバランサーの管理に関しては、NGINX コントローラーを直接使用して外部 NGINX Plus インスタンスを管理できます。 宣言型 API は CI/CD パイプラインとのインターフェースを目的として設計されており、これを使用して各アプリケーション コンポーネントをデプロイできます。 しかし、Ingress レイヤーがスケーラブルで、動的に割り当てられた Kubernetes NodePorts を使用する場合、またはOpenShift Routes が変更される可能性がある場合はどうなるでしょうか?
このような場合には、外部ロードバランサの構成を Kubernetes の状態とマージし、Kubernetes Operator を介して NGINX コントローラ API を駆動することが必要になる可能性があります。 この図は、外部ロードバランサーを管理するためのオペレーター ( NGINX-LB-Operator ) のみを含むサンプルのデプロイメントを示しており、NGINX Plus Ingress Controller と NGINX Controller の違いを強調しています。
どこ:
このトポロジでは、カスタム リソースに外部ロード バランサーの望ましい状態が含まれており、アップストリーム (ワークロード グループ) が NGINX Plus Ingress Controller に設定されます。 NGINX-LB-Operator はIngress Pod に関する情報を収集し、その情報を目的の状態とマージしてから NGINX コントローラー API に送信します。
Kubernetes 用の Operator を作成するのは、最初は困難な作業のように思えるかもしれませんが、Red Hat と Kubernetes オープンソース コミュニティがOperator Framework を維持しているため、この作業は比較的簡単になります。 Operator SDK を使用すると、誰でも Go、Ansible、Helm を使用して Kubernetes Operator を作成できます。 F5 では、 NGINX コントローラの認定コレクションを含む多くの製品向けの Ansible コレクションをすでに公開しているため、外部の NGINX Plus インスタンスを管理し、NGINX コントローラとインターフェースする Operator を構築するのは非常に簡単です。
Operator SDK を使用して、名前空間またはクラスター スコープを使用してデプロイし、いくつかのカスタム リソースを監視できる NGINX ロード バランサー Operator (NGINX-LB-Operator)を作成しました。 カスタム リソースは、NGINX コントローラー オブジェクト (証明書、ゲートウェイ、アプリケーション、コンポーネント) に直接マップされるため、NGINX コントローラーのアプリケーション中心のモデルを Kubernetes で直接表現します。 Kubernetes で設定されたカスタム リソースはNGINX-LB-Operatorによって取得され、NGINX コントローラーに同等のリソースが作成されます。
NGINX-LB-Operator を使用すると、NGINX コントローラの宣言型 API を使用して外部 NGINX Plus インスタンスの構成を管理できます。NGINX コントローラが外部インスタンスを管理するため、監視とアラートの追加の利点と、NGINX コントローラが提供する詳細なアプリケーション分析情報が得られます。
この図は次のことを示しています。
詳細なデプロイメント手順とサンプルアプリケーションはGitHubで提供されています。 ロールプレイが嫌いな方、または TL;DR バージョンを観るためにここに来た方は、今すぐそちらへ行ってください。
それではロールプレイをしてみましょう。 私がスーザンになって、あなたがデイブになってください。
デイブとして、あなたはお気に入りの架空の複合企業で事業を運営します。 あなたは子供たちと仲良く、状況を把握しているなど、すべてのアプリケーションとマイクロサービスを OpenShift にデプロイし、Ingress には Kubernetes 用の NGINX Plus Ingress Controller を使用します。 すべてのアプリケーションは OpenShift プロジェクト (名前空間) としてデプロイされ、NGINX Plus Ingress コントローラーは独自の Ingress 名前空間で実行されます。
デフォルトの Ingress 仕様で利用できる機能に満足したことがなく、ConfigMap と Annotations が少し扱いにくいと常に思っていました。 NGINX が NGINX Plus Ingress Controller が独自の CRD のサポートを開始すると発表したとき、皆さんが大喜びしたのはそのためです。 現在、アプリケーション開発者は、 VirtualServer および VirtualServerRoutes リソースを使用して、NGINX Plus Ingress Controller へのアプリケーションのデプロイメントを管理し、OpenShift 内の内部ルーティングとエラー処理を構成しています。
NGINX Plus Ingress Controller でも利用可能なTransportServerカスタム リソースのおかげで、非 HTTP サービスを公開することもあります。 開発者は独自のプロジェクト名前空間でカスタム リソースを定義し、それを NGINX Plus Ingress Controller が取得してすぐに適用することができます。 これは素晴らしいことですが、OpenShift クラスターのエッジにある外部ネットワーク ロード バランサーも同様に簡単に管理できればよいと思います。 Ingress レイヤーをスケーリングする必要がある場合、常に腰痛が悪化します。
土曜日の夜、ディスコに行くべきなのに、昨日 Ingress レイヤーを再びスケーリングしなければならず、腰が痛いです。 ピン! 煙の雲の中に、あなたの妖精のおばあさんスーザンが現れます。
「こんにちは、デイブ」と彼女は言う。
"あなたは誰ですか? 「私のペルシャ絨毯に何をしたのか見てみろ」とあなたは答えます。
あなたの態度を無視して、スーザンは GitHub で現在入手可能な NGINX-LB-Operator について説明を続けます。 彼女は、OpenShift のエッジにある NGINX Plus クラスターと、アプリケーション中心の観点からそれを管理する NGINX コントローラーを使用することで、NGINX Plus ロードバランサーの構成方法を定義するカスタム リソースを作成できると説明しています。
NGINX-LB-Operator はこれらのリソースを監視し、それらを使用してアプリケーション中心の構成を NGINX コントローラーに送信します。 次に、NGINX コントローラーは必要な NGINX Plus 構成を生成し、それを外部の NGINX Plus ロードバランサーにプッシュします。
エンドユーザーはアプリケーションにすぐにアクセスできるようになり、外部の NGINX Plus ロードバランサーの変更を必要とする変更を制御できるようになります。
NGINX コントローラーは、外部の NGINX Plus ロードバランサーからメトリックを収集し、すでに利用しているのと同じアプリケーション中心の視点からメトリックを提示します。 次回 NGINX Plus Ingress レイヤーをスケーリングすると、NGINX-LB-Operator によって NGINX コントローラーと外部 NGINX Plus ロードバランサーが自動的に更新されます。 腰痛はもうありません!
Kubernetes は、コンテナ化されたアプリケーションを管理するために構築されたプラットフォームです。 NGINX コントローラーは、アプリケーションの負荷分散を検討および管理するためのアプリケーション中心のモデルを提供します。 NGINX-LB-Operator はこれら 2 つを組み合わせ、基盤となるインフラストラクチャを気にすることなく、フルスタックをエンドツーエンドで管理できるようにします。 NGINX-LB-Operatorに関するより詳しい技術情報と完全なサンプルのウォークスルーについては、 GitHubをご覧ください。
当社のソリューションの詳細については、以下をご覧ください。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"