Ingressは、Kubernetesクラスター内のサービスへの外部アクセスを管理するためのレイヤー7負荷分散を提供するAPIオブジェクトです。 このトピックでは、Ingressについて説明し、Ingressコントローラーの動作とIngressコントローラーの使用方法について説明します。
目次
イングレスとは
Kubernetesクラスターでは、Ingressはクラスター内のサービスを公開するアクセスポイントとして機能します。 クラスター内のサービス向けのネットワークトラフィックのほとんどを分散します。 Ingressは、Kubernetesクラスター内のサービスへの外部アクセスを有効にするために使用されるKubernetesリソースオブジェクトです。 Ingressのルーティングルールを設定して、ネットワークトラフィックを異なるサービスのバックエンドポッドにルーティングできます。
Ingressでは、HTTPトラフィックルーティングルールのみを設定できます。 Ingressは、負荷分散アルゴリズムやセッションアフィニティなどの高度な機能をサポートしていません。 これらの機能を有効にするには、Ingressコントローラーで設定する必要があります。
Nginx Ingressコントローラ
Container Service for Kubernetes (ACK) は、オープンソースバージョンに基づいて最適化されたNGINX Ingressコントローラーを提供します。 ACKによって提供されるNGINX Ingressコントローラは、オープンソースバージョンと互換性があり、オープンソースバージョンによって提供されるすべての注釈をサポートします。 ACKクラスターの作成時にNGINX Ingressコントローラーをインストールできます。
NGINX Ingressコントローラーのしくみ
Ingressは、NGINX IngressコントローラーをクラスターにデプロイしてIngressのルーティングルールを解析する場合にのみ、通常どおり機能します。 NGINX Ingressコントローラがルーティングルールに一致する要求を受信した後、NGINX Ingressコントローラは、対応するバックエンドサービスに要求をルーティングします。 その後、バックエンドサービスは要求をポッドに転送します。 Kubernetesクラスターでは、Services、Ingress、およびNGINX Ingressコントローラーは次のプロセスで動作します。
サービスは、複製されたポッドのセットで実行されるバックエンドアプリケーションの抽象化です。
Ingressにはリバースプロキシルールが含まれています。 HTTPまたはHTTPSリクエストがルーティングされるサービスポッドを制御します。 たとえば、リクエストは、リクエスト内のホストとURLパスに基づいて、異なるServiceポッドにルーティングされます。
NGINX Ingressコントローラは、Ingressルールを解析するリバースプロキシプログラムです。 Ingressルールに変更が加えられた場合、NGINX Ingressコントローラはそれに応じてIngressルールを更新します。 NGINX Ingressコントローラーがリクエストを受信すると、Ingressルールに基づいてリクエストをServiceポッドにリダイレクトします。
NGINX Ingressコントローラーは、APIサーバーからIngressルールの変更を取得し、nginx.confなどの設定ファイルを動的に生成します。 これらの設定ファイルは、NGINXなどのロードバランサーで必要です。 次に、NGINX Ingressコントローラはロードバランサをリロードします。 たとえば、NGINX Ingressコントローラーはnginx -s load
コマンドを実行してNGINXをリロードし、新しいIngressルールを生成します。
NGINX Ingressコントローラーは、LoadBalancerタイプのサービスに対してServer Load Balancing (SLB) インスタンスを作成できます。 SLBインスタンスは、Kubernetesクラスターでサービスを公開するために使用されます。 次に、入力ルールを使用して、どのサービス要求がルーティングされるかを制御します。
関連ドキュメント
ALB Ingressコントローラ
Application Load Balancer (ALB) IngressコントローラーはNGINX Ingressコントローラーと互換性があり、ALBインスタンスに基づいて改善されたトラフィックルーティング機能を提供します。 ALB Ingressコントローラーは、複雑なルーティング、自動証明書検出、HTTP、HTTPS、およびQUICプロトコルをサポートします。 ALB Ingressコントローラーは、レイヤー7での超高弾力性と重いトラフィック負荷のバランスを取るためのクラウドネイティブアプリケーションの要件を満たしています。
Ingressにサービスを提供するALBインスタンスは、ALB Ingressコントローラーによって完全に管理されます。 Ingressエラーによるサービスの中断を避けるため、ALBコンソールでこれらのALBインスタンスを変更しないことを推奨します。 ALBに関連するクォータの詳細については、「制限」をご参照ください。
ALB Ingressコントローラーのしくみ
ALB Ingressコントローラーは、APIサーバーからIngressへの変更を取得し、Ingressの変更が検出されたときにAlbConfigオブジェクトを動的に生成します。 次に、ALB Ingressコントローラーは、ALBインスタンスの作成、リスナーの設定、Ingressルールの作成、およびバックエンドサーバーグループの設定という操作を順番に実行します。 Services、Ingress、およびAlbConfigsオブジェクトは、次の方法で相互作用します。
サービスは、レプリケートされたポッドのグループにデプロイされるアプリケーションの抽象化です。
Ingressにはリバースプロキシルールが含まれています。 HTTPまたはHTTPSリクエストがルーティングされるサービスを制御します。 たとえば、Ingressは、リクエスト内のホストとURLに基づいて、リクエストを別のサービスにルーティングします。
AlbConfigは、ALB IngressコントローラーがALBインスタンスとリスナーを構成するために使用するカスタムリソース定義 (CRD) です。 AlbConfigオブジェクトは、1つのALBインスタンスに対応する。
NGINXイングレスコントローラーは、LoadBalancerタイプのサービスに対してサーバーロードバランシング(SLB)インスタンスを作成できます。これらのSLBインスタンスは、Kubernetesクラスタ内のサービスを外部に公開するために使用されます。そして、イングレスルールを使用して、どのサービスにリクエストがルーティングされるかを制御します。
関連ドキュメント
MSE Ingressコントローラ
MSE ingressはMSEクラウドネイティブゲートウェイに基づいて開発され、ingressトラフィックを管理するためのより強力な方法を提供します。 MSE IngressはNGINX Ingressと互換性があり、NGINX Ingressで定義された50を超えるアノテーションと互換性があります。 MSE Ingressは、NGINX Ingressの90% を超えるシナリオに適しています。 MSE Ingressは、複数のサービスバージョンのカナリアリリースを同時にサポートし、柔軟なサービスガバナンス機能と包括的なセキュリティ保護を提供します。 MSE Ingressは、多数のクラウドネイティブ分散アプリケーションが使用されるシナリオで、トラフィックガバナンスの要件を満たすことができます。
概要
MSE Ingressの機能の詳細については、以下のトピックを参照してください。
MSE Ingressの仕組み
コンポーネント
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コントローラーの動作を示しています。