Ingress は、Kubernetes クラスター内の内部サービスへの外部トラフィックを管理し、レイヤー 7 の負荷分散を提供します。 このトピックでは、Ingress について紹介し、Ingress コントローラーの動作と使用方法について説明します。
目次
Ingress とは
Kubernetes クラスターでは、Ingress はクラスター内のサービスを公開するアクセスポイントとして機能します。 クラスター内のサービス宛てのネットワークトラフィックの大部分を分散します。 Ingress は、Kubernetes クラスター内のサービスへの外部アクセスを有効にするために使用される Kubernetes リソースオブジェクトです。 Ingress のルーティングルールを構成して、ネットワークトラフィックを異なるサービスのバックエンドポッドにルーティングできます。ACK における Ingress の比較については、「Nginx Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。
Nginx Ingress コントローラー
Container Service for Kubernetes (ACK) は、オープンソースバージョンに基づいて最適化された NGINX Ingress コントローラーを提供し、すべてのコミュニティアノテーションとの完全な互換性とサポートを提供します。
NGINX Ingress コントローラーの仕組み
Ingress は、Ingress のルーティングルールを解析するためにクラスターに NGINX Ingress コントローラーをデプロイした場合にのみ正常に機能します。 NGINX Ingress コントローラーは、ルーティングルールに一致するリクエストを受信すると、そのリクエストを対応するバックエンドサービスにルーティングします。 バックエンドサービスは、リクエストをポッドに転送します。 Kubernetes クラスターでは、サービス、Ingress、および NGINX Ingress コントローラーは、次のプロセスで動作します。
サービスは、一連の複製ポッドで実行されるバックエンドアプリケーションの抽象化です。
Ingress には、リバースプロキシルールが含まれています。 HTTP リクエストまたは HTTPS リクエストがルーティングされるサービスポッドを制御します。 たとえば、リクエスト内のホストと URL パスに基づいて、リクエストは異なるサービスポッドにルーティングされます。
NGINX Ingress コントローラーは、Ingress ルールを解析するリバースプロキシプログラムです。 Ingress ルールに変更が加えられた場合、NGINX Ingress コントローラーはそれに応じて Ingress ルールを更新します。 NGINX Ingress コントローラーはリクエストを受信すると、Ingress ルールに基づいてリクエストをサービスポッドにリダイレクトします。
NGINX Ingress コントローラーは、API サーバーから Ingress ルールの変更を取得し、nginx.conf などの構成ファイルを動的に生成します。 これらの構成ファイルは、NGINX などのロードバランサーで必要です。 次に、NGINX Ingress コントローラーはロードバランサーをリロードします。 たとえば、NGINX Ingress コントローラーは nginx -s reload コマンドを実行して NGINX をリロードし、新しい Ingress ルールを生成します。
NGINX Ingress コントローラーは、LoadBalancer タイプのサービス用にサーバーロードバランシング (SLB) インスタンスを作成できます。 SLB インスタンスは、Kubernetes クラスター内のサービスを公開するために使用されます。 その後、Ingress ルールを使用して、リクエストのルーティング先となるサービスを制御します。
NGINX Ingress のリファレンス
ALB Ingress コントローラー
Application Load Balancer (ALB) Ingress コントローラーは、NGINX Ingress コントローラーと互換性があり、ALB インスタンスに基づいてトラフィックルーティング機能を向上させます。 ALB Ingress コントローラーは、複雑なルーティング、自動証明書の検出、および HTTP、HTTPS、QUIC プロトコルをサポートしています。 ALB Ingress コントローラーは、クラウドネイティブアプリケーションの超高弾性とレイヤー 7 での大量トラフィック負荷の分散の要件を満たします。
ALB Ingress コントローラーがインストールされている ALB インスタンスは、コントローラーによって完全に管理されます。 Ingress エラーによるサービス中断を避けるため、ALB コンソールでこれらの ALB インスタンスを変更しないことをお勧めします。
ALB Ingress コントローラーの仕組み
ALB Ingress コントローラーは、API サーバーから Ingress への変更を取得し、Ingress の変更が検出されると AlbConfig オブジェクトを動的に生成します。 その後、ALB Ingress コントローラーは、ALB インスタンスの作成、リスナーの構成、Ingress ルールの作成、バックエンドサーバーグループの構成という操作を順番に実行します。 サービス、Ingress、および AlbConfigs オブジェクトは、次のように相互作用します。
サービスは、複製ポッドのグループにデプロイされるアプリケーションの抽象化です。
Ingress には、リバースプロキシルールが含まれています。 HTTP リクエストまたは HTTPS リクエストがルーティングされるサービスを制御します。 たとえば、Ingress はリクエスト内のホストと URL に基づいてリクエストを異なるサービスにルーティングします。
AlbConfig は、ALB Ingress コントローラーが ALB インスタンスとリスナーを構成するために使用するカスタムリソース定義 (CRD) です。 AlbConfig オブジェクトは 1 つの ALB インスタンスに対応します。
ALB Ingress のリファレンス
MSE Ingress コントローラー
MSE Ingress は、MSE クラウドネイティブゲートウェイに基づいて開発されており、イングレストラフィックを管理するためのより強力な方法を提供します。 MSE Ingress は NGINX Ingress と互換性があり、NGINX Ingress で定義されている 50 以上のアノテーションと互換性があります。 MSE Ingress は、NGINX Ingress の 90% 以上のシナリオに適しています。 MSE Ingress は、複数のサービスバージョンのカナリアリリースを同時にサポートし、柔軟なサービスガバナンス機能と包括的なセキュリティ保護を提供します。 MSE Ingress は、多数のクラウドネイティブ分散アプリケーションが使用されるシナリオでのトラフィックガバナンスの要件を満たすことができます。
MSE Ingress の仕組み
コンポーネント
MSE Ingress コントローラー:
MSE Ingress コントローラーはネットワークデータプレーンではなく、MSE クラウドネイティブゲートウェイとその構成を管理するコントロールプレーンです。 MSE Ingress コントローラーは、サービスリクエストを処理しません。 MSE Ingress コントローラーは、サービストラフィックを処理する MSE クラウドネイティブゲートウェイを管理するためのトラフィックバイパスとして機能します。
ACK クラスターまたは ACK Serverless クラスター に MSE Ingress コントローラーコンポーネントをインストールし、このコンポーネントによって提供される MseIngressConfig CRD を使用してアノテーションに基づいてクラウドネイティブゲートウェイを管理し、ゲートウェイの Ingress リソースリスニングアイテムを構成する必要があります。
MSE Ingress コントローラーコンポーネントのインストール方法の詳細については、「MSE Ingress コントローラーコンポーネントを管理する」をご参照ください。
MSE クラウドネイティブゲートウェイ: MSE クラウドネイティブゲートウェイは、構成した MseIngressConfig CRD に基づいて作成されます。 MSE クラウドネイティブゲートウェイは、コントロールプレーンとデータプレーンで構成されます。
コントロールプレーン: 関連付けられた ACK クラスター内の Ingress、Ingress クラス、サービスなどのリソースを監視します。 リソースが解析されると、解析されたリソース構成はゲートウェイデータプレーンにリアルタイムで送信されます。
データプレーン: トラフィックガバナンスを実装します。 データプレーンは、コントロールプレーンから送信されたガバナンスルールに基づいて外部リクエストを処理し、リクエストを宛先のバックエンドサービスにルーティングします。
実装
MSE Ingress コントローラーは、ACK クラスター内の MseIngressConfig CRD によって定義されたリソースを監視し、リソースに対応するクラウドネイティブゲートウェイのライフサイクルと、ゲートウェイと ACK クラスター間の関連付けをリアルタイムで動的に維持します。
クラウドネイティブゲートウェイのコントロールプレーンは、関連付けられた ACK クラスターの API サーバーを使用して Ingress リソースの変更を取得し、ゲートウェイのルーティングルールを動的に更新します。 クラウドネイティブゲートウェイはリクエストを受信すると、Ingress ルーティングルールとリクエストを照合し、一致したルーティングルールに基づいてリクエストをバックエンドサービスに対応するポッドにルーティングします。
Kubernetes クラスターでは、サービス、Ingress、Ingress クラス、MseIngressConfigs、および MSE Ingress コントローラーは、次のプロセスで動作します。
サービス: 実際のバックエンドサービスの抽象化。 1 つのサービスは、複数の同一のバックエンドサービスを表すことができます。
Ingress: 一連のリバースプロキシルール。 Ingress は、HTTP リクエストまたは HTTPS リクエストがルーティングされるサービスを指定します。 たとえば、Ingress はリクエスト内のホスト名と URL に基づいてリクエストを異なるサービスにルーティングします。
Ingress クラス: Ingress プロセッサの説明。 Ingress クラスは、Kubernetes クラスター内の Ingress プロセッサの実装を宣言するために使用されます。 Ingress クラスに関連付けられている Ingress リソースは、Ingress プロセッサによって解析されます。 解析された Ingress リソース記述で指定されたトラフィック管理ルールを実装するには、MseIngressConfig を Ingress クラスの パラメーター フィールドに関連付ける必要があります。
MseIngressConfig: MSE Ingress コントローラーによって提供される CRD。 MseIngressConfig CRD は、クラウドネイティブゲートウェイに関する基本情報を提供します。
MSE Ingress コントローラー: MSE クラウドネイティブゲートウェイとその構成を管理するコントロールプレーン。 MSE Ingress コントローラーはネットワークデータプレーンではありません。 MSE Ingress コントローラーは、クラスター内の MseIngressConfig CRD によって定義された Ingress リソースを監視し、MSE クラウドネイティブゲートウェイを調整して、解析された Ingress リソース記述で指定されたトラフィック管理ルールを実装するために使用されます。
次の図は、MSE Ingress コントローラーの仕組みを示しています。
