Container Service for Kubernetes (ACK) は、KubernetesネットワークモデルをAlibaba Cloudネットワークサービスと統合することにより、安定した高性能なコンテナネットワークを提供します。 このトピックでは、Container Network Interface (CNI) 、Service、Ingress、DNSベースのサービス検出など、ACKクラスターネットワーキングで使用される重要な用語について説明します。 これらの用語を理解して、アプリケーション展開モデルとネットワークアクセス方法を最適化できます。
CNIプラグイン
KubernetesはCNIプラグインを使用して、コンテナ間のネットワーク通信を有効化および標準化します。
コンテナネットワーク内のポッドのステータスは、ポッドのライフサイクルフェーズによって異なります。 たとえば、ポッドが作成されると、コンテナーネットワークに追加されます。 ポッドが削除されると、コンテナーネットワークから削除されます。
コンテナネットワーク内の各ポッドには、ポッドを識別するために一意のIPアドレスが割り当てられます。
ポッドは、クラスター内のエンドポイントおよびクラスター外のエンドポイントと通信できます。
CNIプラグインは、コンテナネットワークの実装を担当します。 使用するCNIプラグインは、ポッドにIPアドレスを割り当てる方法、オーバーレイネットワークを使用するかどうか、クラスター内でトラフィックを転送する方法、ポッドへのアクセスを管理する方法を決定します。 よく知られているオープンソースのCNIプラグインには、Calico、Flannel、およびCiliumが含まれます。
ACKは、TerwayとFlannelのCNIプラグインを提供します。 TerwayとFlannelは異なる機能を提供します。 次のセクションでは、TerwayとFlannelが提供する機能について説明します。 ACKクラスターの作成時にTerwayとFlannelを選択する方法については、「TerwayとFlannelの比較」を参照してください。
クラスターを作成した後は、クラスターで使用するネットワークプラグインを変更することはできません。
Terway
Terwayは、Alibaba Cloudによって開発されたCNIプラグインです。 ACKクラスターのECSインスタンスは、elastic network Interface (ENI) を使用してネットワーク通信を有効にします。 TerwayはノードのENIをポッドに割り当て、ポッド間のネットワーク接続を確立します。 したがって、Terwayプラグインを使用するクラスター内のポッドは、クラスターが存在する仮想プライベートクラウド (VPC) に接続されます。 Terwayモードは、パケットをカプセル化するのにVXLAN (Virtual Extensible Local Area Network) のようなトンネリング技術を必要としないので、通信効率を改善する。 Terwayは、ネットワークのパフォーマンスとアクセス制御に対する要件が高い大規模なクラスターやシナリオに最適です。
Terwayプラグインを使用するACKクラスターを作成する場合、包括的ENIモードまたは排他的ENIモードで実行するようにTerwayを設定できます。 次のセクションでは、2つのモードを異なる観点から比較します。
IP割り当ての観点から: 排他的ENIモードでは、各ポッドに個別のENIが割り当てられ、優れたネットワークパフォーマンスが提供されます。 包括的ENIモードでは、ENIが複数のポッドで共有されるため、ノードにデプロイできるポッドの数が増えます。
ネットワーク高速化の観点から: 包括的ENIモードはDataPath V2高速化をサポートします。 包括的ENIモードでTerwayのDataPath V2アクセラレーションを有効にすると、Terwayは別のトラフィック転送パスを採用してネットワーク通信を高速化します。
アクセス制御の観点から: 包括的ENIモードと排他的ENIモードの両方で、固定IPアドレス、個別のセキュリティグループ、およびポッド用のvSwitchの設定をサポートします。 さらに、排他的ENIモードは、Kubernetesネットワークポリシーによるアクセス制御をサポートします。
フランネル
FlannelはオープンソースのCNIプラグインです。 Flannelは、VXLANなどのネットワーク仮想化テクノロジーを使用して、ポッドのオーバーレイネットワークを構築します。 フランネルは構成し易く、使用し易いです。 Terwayと比較して、フランネルはNATゲートウェイを必要としないため、フランネルはネットワークパフォーマンスとアクセス制御機能が弱くなります。 さらに、Flannelは大きなクラスターをサポートしていません。 Flannelは、1,000個以下のノードを含むクラスターに適しています。 ネットワークパフォーマンスとアクセス制御の要件が低い場合、またはクラスターをすばやく作成して使用する場合は、Flannelプラグインを使用することを推奨します。
TerwayとFlannelの比較の詳細については、「TerwayとFlannelの比較」をご参照ください。
サービス
クラウドネイティブアプリケーションには、アジャイル反復と高速スケーリングが必要です。 ポッドは、Kubernetesの一時的かつ交換可能なリソースです。 ポッドが破壊または交換されると、関連するネットワークリソースが変更されます。 したがって、ポッドへの安定した一貫したエントリポイントが必要です。 Kubernetesでは、サービスはポッドのグループへのエントリポイントとして機能し、ポッドの負荷分散を実装します。 サービスのしくみを次のリストに示します。
サービスは、サービスのセレクターに一致するポッドに関連付けられます。 システムは、サービスのIPアドレスとポートをポッドのIPアドレスとポートにマッピングします。
サービスのバックエンドポッドが更新されると、サービスは自動的にトラフィック転送ルールを更新し、トラフィックを更新されたポッドに転送できるようにします。
ACKクラスターは、ClusterIP、NodePort、LoadBalancer、Headless、およびExternalNameのサービスタイプをサポートしています。 さまざまな種類のサービスを選択して、クラスター内、クラスター外、またはインターネットからポッドにアクセスできるようにすることができます。 詳細については、「クイックスタート」をご参照ください。
イングレス
レイヤー4で負荷分散を提供するサービスと比較して、Ingressはレイヤー7でクラスター内のサービスへの外部アクセスを管理します。 Ingressは、複数のサービスへの集中エントリポイントを提供します。 Ingressを使用して、さまざまなレイヤー7転送ルールを設定できます。 たとえば、ドメイン名またはパスに基づいて異なるサービスにリクエストを転送できます。 詳細については、「Ingressの概要」をご参照ください。
DNSベースのサービス検出
ACKはDNSを使用してサービス検出を実装します。 たとえば、サービスの名前は、サービスのクラスターIPアドレスに解決できます。 これにより、サービスのバックエンドポッドにアクセスできます。 DNSベースのサービス検出機能を使用して、IPアドレスや配置環境に関係なく、ドメイン名を介してアプリケーションにアクセスできます。 DNSコンポーネントの詳細については、「DNSの概要」をご参照ください。