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