Container Service for Kubernetes (ACK) は、クラスターサービスへのレイヤー 7 トラフィックルーティングのために、Nginx、ALB、APIG、および MSE Ingress コントローラーをサポートしています。
用語
Ingress は、転送ルールを通じて外部トラフィックを内部の Service Pod にルーティングする Kubernetes リソースです。詳細については、「Nginx Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。
Nginx Ingress コントローラー
ACK は、コミュニティで管理されている Nginx Ingress コントローラーを最適化しながら、すべてのコミュニティアノテーションとの完全な互換性とサポートを維持しています。
仕組み
クラスター内に Nginx Ingress コントローラーをデプロイして、Ingress 転送ルールを解析します。コントローラーはリクエストを受信し、ルールと照合して、バックエンドの Service Pod に転送します。Service、Nginx Ingress、および Nginx Ingress コントローラーの関係は次のとおりです。
Service は、1 つ以上の同一のバックエンドサービスを抽象化します。
Nginx Ingress は、ホストと URL パスに基づいて HTTP/HTTPS リクエストを Service Pod にルーティングするリバースプロキシルールを定義します。
Nginx Ingress コントローラーは、Nginx Ingress ルールを解析します。Ingress が変更されると、コントローラーは転送ルールを更新し、受信リクエストを適切な Service Pod にルーティングします。
Nginx Ingress コントローラーは、API サーバーから Ingress の変更を取得し、ロードバランサー設定ファイル (nginx.conf など) を生成し、ロードバランサーをリロード (例: nginx -s reload) して新しいルーティングルールを適用します。
Nginx Ingress コントローラーは、LoadBalancer タイプの Service を通じて Server Load Balancer (SLB) インスタンスを作成し、Nginx Ingress ルールに基づいて外部からクラスターサービスにアクセスできるようにします。
Nginx Ingress の参考資料
ALB Ingress コントローラー
ALB Ingress コントローラーは、Ingress トラフィック管理に Alibaba Cloud Application Load Balancer (ALB) を使用します。Nginx Ingress と互換性があり、複雑なルーティング、証明書の自動検出、および大規模なレイヤー 7 トラフィック処理のための HTTP/HTTPS/QUIC プロトコルをサポートします。
仕組み
Ingress リソースが変更されると、コントローラーは Kubernetes API サーバーを通じてそれを検出し、以下の操作を実行します。
ALB インスタンスを作成します。
インスタンスにリスナーを設定します。
Ingress ルールを作成します。
バックエンドサーバーグループを設定します。
3 つのコアリソースは次のとおりです。
Service — Ingress がトラフィックをルーティングする安定したネットワークエンドポイントを定義し、複製された Pod 全体でアプリケーションを抽象化します。
Ingress — ホスト名と URL パスによって HTTP/HTTPS リクエストを Service にルーティングするリバースプロキシルールを定義します。
AlbConfig — 基盤となる ALB インスタンスを設定します。コントローラーは、管理する ALB インスタンスごとに 1 つの AlbConfig を生成します。
AlbConfig に関連付けられた ALB インスタンスは、コントローラーによって完全に管理されます。ALB コンソールで変更しないでください。変更すると、Ingress サービスが中断される可能性があります。
ALB Ingress の参考資料
APIG Ingress コントローラー
APIG Ingress は、トラフィック管理にクラウドネイティブ API ゲートウェイを使用します。これは MSE クラウドネイティブゲートウェイのアップグレード版です。Nginx Ingress および 50 以上のアノテーション (Nginx Ingress シナリオの 90% 以上をカバー) と互換性があり、大規模な分散アプリケーションのための同時段階的リリース、柔軟なサービスガバナンス、および包括的なセキュリティ保護をサポートします。
コンポーネント
APIG Controller:
APIG Controller はコントロールプレーンであり、ネットワークデータプレーンではありません。クラウドネイティブ API ゲートウェイインスタンスとその設定を管理します。APIG Controller はサービストラフィックを一切処理しません。バイパスモードで動作し、実際のサービストラフィックを処理するクラウドネイティブ API ゲートウェイインスタンスを管理します。
クラスターに、APIG Controller コンポーネントをインストールします。コンポーネントが提供する ApigConfig Custom Resource Definition (CRD) を使用して、クラウドネイティブ API ゲートウェイインスタンスを宣言的に管理し、Ingress リソースに対するゲートウェイのリスナーオプションを設定します。
クラウドネイティブ API ゲートウェイ:
APIG Controller は、設定された ApigConfig リソースに基づいてクラウドネイティブ API ゲートウェイを作成します。このゲートウェイは、コントロールプレーンとデータプレーンで構成されます。
コントロールプレーン:コントロールプレーンは、関連付けられたコンテナーサービスクラスター内の Ingress、IngressClass、Service などのリソースをリッスンします。これらのリソースを解析し、結果の設定をリアルタイムでデータプレーンに送信します。
データプレーン:データプレーンは、トラフィックガバナンス設定を実装します。コントロールプレーンからのルールに基づいて外部リクエストを処理し、リクエストをバックエンドのターゲットサービスに転送します。
仕組み
APIG Controller は、クラスター内に作成された ApigConfig リソースをリッスンします。対応するクラウドネイティブ API ゲートウェイインスタンスのライフサイクルと、ゲートウェイとコンテナーサービスクラスター間の関連付けをリアルタイムで動的に維持します。
クラウドネイティブ API ゲートウェイのコントロールプレーンは、関連付けられたコンテナーサービスクラスターの API サーバーから Ingress リソースの変更を取得します。その後、ゲートウェイのルーティングルールを動的に更新します。クラウドネイティブ API ゲートウェイがリクエストを受信すると、リクエストを Ingress の転送ルールと照合し、対応するバックエンドサービスの Pod に転送します。
Kubernetes における Service、Ingress、IngressClass、ApigConfig、および APIG Controller の関係は次のとおりです:
Service:実際のバックエンドサービスの抽象化です。1 つの Service で、複数の同一のバックエンドサービスを表すことができます。
Ingress:HTTP または HTTPS リクエストをどの Service に転送すべきかを指定するリバースプロキシのルールセットです。たとえば、リクエストのホストと 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 コントローラー
MSE Ingress は、トラフィック管理に MSE クラウドネイティブゲートウェイを使用します。Nginx Ingress および 50 以上のアノテーション (Nginx Ingress シナリオの 90% 以上をカバー) と互換性があり、大規模な分散アプリケーションのための同時段階的リリース、柔軟なサービスガバナンス、および包括的なセキュリティ保護をサポートします。
仕組み
コンポーネント
MSE Ingressコントローラ:
MSE Ingressコントローラーはネットワークデータプレーンではありませんが、MSEクラウドネイティブゲートウェイとその構成を管理する制御プレーンです。 MSE Ingressコントローラはサービス要求を処理しません。 MSE Ingressコントローラーは、サービストラフィックを処理するMSEクラウドネイティブゲートウェイを管理するためのトラフィックバイパスとして機能します。
MSE Ingress ControllerコンポーネントをACKクラスターまたはACKサーバーレスクラスターにインストールし、このコンポーネントが提供するMseIngressConfig CRDを使用して、アノテーションに基づいてクラウドネイティブゲートウェイを管理し、ゲートウェイのIngressリソースリスニングアイテムを設定する必要があります。
MSE Ingressコントローラーコンポーネントのインストール方法の詳細については、「MSE Ingressコントローラーコンポーネントの管理」をご参照ください。
MSE cloud-native Gateway: MSE cloud-native Gatewayは、設定したMseIngressConfig CRDに基づいて作成されます。 MSEクラウドネイティブゲートウェイは、制御プレーンとデータプレーンで構成されます。
コントロールプレーン: 関連するACKクラスター内のIngress、Ingressクラス、サービスなどのリソースを監視します。 リソースが解析された後、解析されたリソース構成は、リアルタイムでゲートウェイデータプレーンに送信される。
Data plane: トラフィックガバナンスを実装します。 データプレーンは、コントロールプレーンから送信されたガバナンスルールに基づいて外部リクエストを処理し、リクエストを宛先のバックエンドサービスにルーティングします。
ワークフロー
MSE Ingressコントローラーは、ACKクラスター内のMseIngressConfig CRDによって定義されたリソースを監視し、リソースに対応するクラウドネイティブゲートウェイのライフサイクルと、ゲートウェイとACKクラスター間の関連付けをリアルタイムで動的に維持します。
クラウドネイティブゲートウェイの制御プレーンは、関連するACKクラスターのAPIサーバーを使用してIngressリソースの変更を取得し、ゲートウェイのルーティングルールを動的に更新します。 クラウドネイティブゲートウェイがリクエストを受信した後、ゲートウェイはリクエストをIngressルーティングルールと照合し、照合されたルーティングルールに基づいてバックエンドサービスに対応するポッドにリクエストをルーティングします。
Kubernetesクラスターでは、Services、Ingress、Ingressクラス、MseIngressConfigs、およびMSE Ingressコントローラーは、次のプロセスで動作します。
サービス: 実際のバックエンドサービスの抽象化。 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コントローラーは、クラスター内のMseIngressConfig CRDによって定義されたIngressリソースを監視し、解析されたIngressリソースの説明で指定されたトラフィック管理ルールを実装するためにMSEクラウドネイティブゲートウェイを調整するために使用されます。
次の図は、MSE Ingressコントローラーの動作を示しています。
