Terway は Alibaba Cloud VPC 向けのオープンソース CNI プラグインであり、コンテナ間のアクセスポリシーを定義するための標準 Kubernetes ネットワークポリシーをサポートします。
事前準備
Terway コンテナネットワークプラグインを使用する前に、このトピックを読んで Terway の動作原理を理解してください。
まず、「ネットワーク概要」および「Terway と Flannel CNI プラグインの比較」を読んで、コンテナネットワークプラグインの基本概念を理解し、適切なプラグインを選択してください。
クラスターを作成する前に、その CIDR ブロックを計画する必要があります。詳細については、「ACK マネージドクラスターのネットワーク計画」をご参照ください。
課金
Terway プラグインは無料です。ただし、Terway は各ノードに Pod をデプロイするため、少量のノードリソースを消費します。ACK クラウドサービスの課金に関する詳細は、「クラウドリソースコスト」をご参照ください。
重要
Terway 設定ファイル eni-config には重要なシステムパラメーターが含まれています。ユーザーによる構成が明示的に許可されていないフィールドを変更または削除すると、ネットワークが中断されたり、Pod の作成ができなくなったりする可能性があります。カスタマイズ可能なパラメーターについては、「Terway パラメーターのカスタマイズ」をご参照ください。
Terway コンポーネントは CRD を使用してリソースのステータスを追跡します。これらのシステムリソースを手動で変更しないでください。許可されていない変更はネットワークの中断や Pod の作成不能を引き起こす可能性があります。
リソース名 | リソースタイプ | ユーザーによる CRD 操作 | ユーザーによる CR 操作 |
podnetworkings.network.alibabacloud.com | ユーザーリソース | いいえ | はい |
podenis.network.alibabacloud.com | システムリソース | いいえ | いいえ |
networkinterfaces.network.alibabacloud.com | システムリソース | いいえ | いいえ |
nodes.network.alibabacloud.com | システムリソース | いいえ | いいえ |
noderuntimes.network.alibabacloud.com | システムリソース | いいえ | いいえ |
*.cilium.io | システムリソース | いいえ | いいえ |
*.crd.projectcalico.org | システムリソース | いいえ | いいえ |
ノードあたりの最大 Pod 数
Terway ネットワークプラグインを使用する場合、ノードが実行できる最大 Pod 数は、その ECS インスタンスタイプがサポートする Elastic Network Interface (ENI) の数によって決まります。Terway は最小 Pod 制限を適用しており、各ノードはクラスターに正常に追加されるためにこの制限を満たす必要があります。
Terway モード | Pod 制限 | 例 | 静的 IP Pod 数 |
共有 ENI モード | (ECS インスタンスタイプがサポートする ENI 数 - 1)× ENI あたりのプライベート IP アドレス数 (EniQuantity - 1)× EniPrivateIpAddressQuantity 説明 クラスターに参加するには、ノードが 11 個を超える Pod をサポートしている必要があります。 | 例として、汎用インスタンスファミリー g7 の ecs.g7.4xlarge インスタンスタイプを考えてみます。このインスタンスタイプは 8 個の ENI をサポートし、各 ENI は 30 個のプライベート IP アドレスをサポートします。ノードあたりの最大 Pod 数は(8 - 1)× 30 = 210 Pod と計算されます。 重要 ノード ENI を使用する Pod の最大数は、ノードのインスタンスタイプによって固定されます。 | 0 |
共有 ENI モード + Trunk ENI | ノードあたりの最大 Trunk Pod 数: ECS インスタンスタイプのネットワークインターフェース総数 - ECS インスタンスタイプがサポートする ENI 数 EniTotalQuantity - EniQuantity | ||
排他的な ENI モード | ECS インスタンス: ECS インスタンスタイプがサポートする ENI 数 - 1 EniQuantity - 1 Lingjun インスタンス: Lingjun ENI クォータ - 1 LeniQuota - 1 説明 クラスターに参加するには、ノードが 6 個を超える Pod をサポートしている必要があります。 | 例として、ecs.g7.4xlarge タイプの ECS インスタンスは 8 個の ENI をサポートします。ノードあたりの最大 Pod 数は(8 - 1)= 7 Pod です。 | ECS インスタンスタイプがサポートする ENI 数 - 1 EniQuantity - 1 説明 Lingjun インスタンスはサポートされていません。 |
Terway v1.11.0 以降では、ノードプールごとに排他的な ENI モードまたは共有 ENI モードを選択できます。異なるモードを使用するノードプールは、同じクラスター内で共存可能です。詳細については、「Terway リリースノート」をご参照ください。
サポートされる Pod 数の確認
方法 1:ノードプールを作成する際、「インスタンスタイプ」セクションの「Terway 互換性 (サポートされる Pod 数)」列を確認して、サポートされる Pod 数を確認します。
方法 2:次のいずれかの方法で必要な値を取得し、ECS インスタンスタイプがサポートする Pod 数を手動で計算します。
インスタンスファミリーのドキュメントを参照して、ECS インスタンスがサポートする Elastic Network Interface の最大数を確認します。
OpenAPI Explorer を使用します。
InstanceTypesパラメーターに既存ノードのインスタンスタイプを指定し、[呼び出しの開始] をクリックします。応答において、EniQuantityはインスタンスタイプがサポートする Elastic Network Interface の最大数、EniPrivateIpAddressQuantityは ENI あたりのプライベート IP アドレス数、EniTotalQuantityはインスタンスタイプがサポートするネットワークインターフェースの総数です。
Terway ネットワークプラグインのインストール
クラスターを作成する際に Terway ネットワークプラグインをインストールする必要があります。既存のクラスターに対してネットワークプラグインの種類を変更することはできません。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、Kubernetes クラスターの作成 をクリックします。
Terway ネットワークプラグインの主要なネットワークパラメーターを設定します。その他のクラスター作成パラメーターについては、「ACK マネージドクラスターの作成」をご参照ください。
パラメーター
説明
IPv6 デュアルスタック
有効にする を選択して、IPv4 および IPv6 アドレスの両方をサポートするデュアルスタッククラスターを作成します。
VPC
クラスターの VPC です。
ネットワークプラグイン
Terway を選択します。
DataPath V2
このオプションを選択して、DataPath V2 高速化モードを有効にします。このモードでは、Terway は標準の共有 ENI モードとは異なるトラフィック転送パスを使用してネットワーク高速化を提供します。詳細については、「Datapath V2 を使用した Terway のベストプラクティス」をご参照ください。
説明Kubernetes 1.34 以降を実行し、DataPath V2 を使用する新規クラスターでは、kube-proxy は Terway ノード上で実行されなくなります。
このモードにはポートマップの組み込みサポートが含まれているため、ポートマッププラグインを構成する必要はありません。詳細については、「カスタム CNI チェーンの構成」をご参照ください。
DataPath V2 は以下のオペレーティングシステムイメージでのみサポートされ、Linux カーネル 5.10 以降が必要です。
Alibaba Cloud Linux 4
Alibaba Cloud Linux 3(すべてのバージョン)
ContainerOS
Ubuntu
有効にすると、各ワーカーノード上の Terway ポリシーコンテナは、追加で 0.5 CPU コアおよび 512 MB のメモリを消費することが想定されます。このリソース消費量はクラスター規模に応じて増加します。デフォルトの Terway 構成では、ポリシーコンテナの CPU 制限は 1 コアで、メモリ制限はありません。
DataPath V2 モードでは、コンテナネットワークの接続追跡(conntrack)情報は eBPF マップに格納されます。Linux のネイティブ conntrack メカニズムと同様に、eBPF conntrack は Least Recently Used(LRU)アルゴリズムを使用します。マップがいっぱいになると、最も古い接続レコードが新しいレコードのために削除されます。ワークロードに基づいて関連パラメーターを構成し、接続制限を超えないようにしてください。詳細については、「Terway モードにおける conntrack 構成の最適化」をご参照ください。
NetworkPolicy サポート
このオプションを選択して、ネイティブ Kubernetes
NetworkPolicyを有効にします。説明Terway v1.9.2 以降では、新規クラスターの NetworkPolicy は eBPF によって実装され、データプレーンで DataPath V2 機能が有効になります。
コンソールで
NetworkPolicyリソースを管理する機能はパブリックプレビュー中です。この機能を使用するには、クォータセンターコンソール でリクエストを送信してください。
Trunk ENI のサポート
このオプションを選択して、Trunk ENI モードを有効にします。これにより、各 Pod に静的 IP アドレス、個別の vSwitch、および個別のセキュリティグループを割り当てることができます。
説明ACK マネージドクラスター では、リクエストを送信せずに Trunk ENI を有効化できます。ACK 専用クラスター で Trunk ENI を有効化する場合は、事前に クォータセンターコンソール でリクエストを送信してください。
Kubernetes 1.31 以降を実行する新規作成の ACK マネージドクラスター では、Trunk ENI 機能が自動的に有効になります。手動で選択する必要はありません。
vSwitch
クラスターノードの vSwitch です。高可用性を確保するため、少なくとも 3 つの異なるアベイラビリティゾーンから vSwitch を選択することを推奨します。
ポッド vSwitch
Pod の vSwitch です。これらはノードの vSwitch と同じでも構いません。
サービス CIDR ブロック
Kubernetes サービスの CIDR ブロックです。この CIDR ブロックは、ノード CIDR ブロックまたは Pod CIDR ブロックと重複してはなりません。
IPv6 サービスネットワークセグメント
IPv6 デュアルスタックを有効にした後でのみ、このパラメーターを設定できます。
Terway の動作モード
このトピックでは、Terway の各種モードとその動作原理を比較します。
共有 ENI モードと排他的な ENI モード
Terway は、Pod に IP アドレスを割り当てるための 2 つのモードを提供します。共有 ENI モード および 排他的な ENI モード です。
Terway v1.11.0 以降では、ノードプールごとに共有 ENI モードまたは排他的な ENI モードを選択できます。このオプションは、クラスター作成時のクラスターレベルではもはや利用できません。
ノードのオペレーティングシステム(OS)はプライマリ ENI を使用します。Terway は残りの ENI を管理して Pod ネットワークを構成します。これらの ENI を手動で構成しないでください。一部の ENI を自分で管理する必要がある場合は、「ENI のフィルターの構成」をご参照ください。
項目 | 共有 ENI モード | 排他的な ENI モード | |
Pod IP アドレス管理 | ENI 割り当て | 複数の Pod が 1 つの ENI を共有します。 | 各 Pod にノード上の専用 ENI が割り当てられます。 |
Pod デプロイ密度 | 高密度で、1 つのノード上で数百の Pod をサポートします。 | 低密度で、通常のノードは数個の Pod のみをサポートします。 | |
ネットワークアーキテクチャ | |||
データパス | Pod が他の Pod と通信する場合、またはサービスバックエンドとしてアクセスされる場合、トラフィックはノードのネットワークスタックを通過します。 | Pod がサービスにアクセスする場合、トラフィックは引き続きノードの OS ネットワークスタックを通過します。ただし、Pod 間通信の場合、または Pod がサービスバックエンドとして機能する場合は、アタッチされた ENI を直接使用してノードのネットワークスタックをバイパスするため、パフォーマンスが向上します。 | |
シナリオ | 汎用的な Kubernetes ワークロード。 | 仮想マシンと同等のネットワークパフォーマンスを提供するため、高ネットワークスループットまたは低レイテンシーを必要とするアプリケーションに最適です。 | |
ネットワーク高速化 | DataPath V2 をサポートしてネットワーク高速化を実現します。詳細については、「ネットワーク高速化」をご参照ください。 | ネットワーク高速化はサポートされていません。このモードはすでに各 Pod に専用 ENI を提供しているため、優れたネットワークパフォーマンスを実現しています。 | |
NetworkPolicy サポート | ポリシーベースのアクセス制御のためのネイティブ Kubernetes |
| |
ノードレベルのネットワーク構成 | サポートされています。詳細については、「ノードレベルのネットワーク構成」をご参照ください。 | サポートされています。詳細については、「ノードレベルのネットワーク構成」をご参照ください。 | |
アクセスの制御 | Trunk ENI を有効にすると、各 Pod に静的 IP アドレス、個別の vSwitch、および個別のセキュリティグループを構成できます。詳細については、「Pod の静的 IP アドレス、個別の vSwitch、およびセキュリティグループの構成」をご参照ください。 | 各 Pod に静的 IP アドレス、個別の vSwitch、および個別のセキュリティグループを構成できます。 | |
ネットワーク高速化
共有 ENI モードでは、ネットワーク高速化を有効にできます。これは標準モードとは異なるトラフィック転送パスを使用して、より高いパフォーマンスを実現します。Terway は現在、DataPath V2 高速化モードをサポートしています。以下にその特徴を示します。
DataPath V2 は、以前の IPvlan+eBPF 高速化モードのアップグレード版です。Terway V1.8.0 以降では、クラスターを作成して Terway プラグインをインストールする際に、DataPath V2 が唯一利用可能な高速化モードです。
DataPath V2 および IPvlan+eBPF 高速化モードは、共有 ENI モードのノードプールにのみ適用され、排他的な ENI モードのノードプールには影響しません。
DataPath V2 の特徴 | 説明 |
適用される Terway バージョン | Terway v1.8.0 以降で作成されたクラスター。 |
ネットワークアーキテクチャ | |
高速化されたデータパス |
|
パフォーマンス最適化 |
|
使用方法 | クラスターを作成する際、ネットワークプラグイン を Terway に設定し、その後 DataPath V2 オプションを選択します。 |
使用上の注意 |
|
旧バージョンのクラスターでは、IPvlan+eBPF 高速化モードが使用されている可能性があります。その特徴を以下に示します。
アクセスの制御
Terway は詳細なトラフィック管理を提供します。共有 ENI モードでは、NetworkPolicy および Trunk ENI オプションによってこれを実現します。排他的な ENI モードもトラフィック制御機能を備えています。
NetworkPolicy
排他的な ENI モードのノードプールは
NetworkPolicyをサポートしていません。共有 ENI モードのノードプールは、ネイティブ Kubernetes
NetworkPolicyをサポートしており、ユーザー定義ルールを使用して Pod 間のネットワークトラフィックを制御できます。クラスターを作成する際、ネットワークプラグイン として Terway を選択し、NetworkPolicy サポート オプションを選択することで、
NetworkPolicyを有効にできます。詳細については、「ACK クラスターでのネットワークポリシーの使用」をご参照ください。説明コンソールで
NetworkPolicyリソースを管理する機能はパブリックプレビュー中です。この機能を使用するには、クォータセンターコンソール でリクエストを送信してください。
静的 IP、vSwitch、およびセキュリティグループ
排他的な ENI モードのノードプールは、各 Pod に静的 IP アドレス、個別の vSwitch、および個別のセキュリティグループを割り当てる機能を本質的にサポートしています。これにより、詳細なトラフィック管理、ネットワーク分離、ポリシー構成、および IP アドレス管理が可能になります。
共有 ENI モードのノードプールでは、オプションの Trunk ENI 機能により、各 Pod に静的 IP アドレス、個別の vSwitch、および個別のセキュリティグループを構成できます。
この機能を有効にするには、クラスターを作成する際に ネットワークプラグイン を Terway に設定し、その後 Trunk ENI のサポート オプションを選択します。詳細については、「Pod の静的 IP アドレス、個別の vSwitch、およびセキュリティグループの構成」をご参照ください。
説明ACK マネージドクラスター では、リクエストを送信せずに Trunk ENI を有効化できます。ACK 専用クラスター で Trunk ENI を有効化する場合は、事前に クォータセンターコンソール でリクエストを送信してください。
Kubernetes 1.31 以降を実行する新規作成の ACK マネージドクラスター では、Trunk ENI 機能が自動的に有効になります。手動で選択する必要はありません。
Trunk ENI モードを有効にすると、terway-eniip および terway-controlplane コンポーネントがインストールされます。
スケーリング制限
Terway はクラウドプロダクトの OpenAPI を呼び出して、ノードのネットワークインターフェースおよび IP アドレスを管理します。これらの操作の使用制限については、各クラウドプロダクトのドキュメントをご参照ください。
共有 ENI モード:最大 500 ノードを同時に割り当てることができます。
排他的な ENI / TrunkENI モード:最大 100 Pod を同時に割り当てることができます。
これらのクォータは固定されています。
データプレーン構成
Terway データプレーンは、カーネルレベル構成の正確なシーケンスと整合性に依存しています。IP rule、IP route、または eBPF フックを外部コンポーネント(優先度の調整、ルールのオーバーライド、プログラムのアンロードを含む)が調整なしに変更すると、Pod ネットワークの中断、ネットワークポリシーの無効化、意図しないトラフィックのリダイレクトなどの重大な障害が発生する可能性があります。統合前にすべてのサードパーティコンポーネントを厳密に検証し、競合を防止してください。
TC フィルタールール
インターフェース | 方向 | プログラム | 優先度 | 機能 |
ethx | toContainer | VLAN Untag | 20000 | VLAN タグの削除 |
ethx | toContainer | cil_from_netdev | 25000 | Cilium svc/ネットワークポリシー |
veth | toContainer | cil_to_container | 25000 | Cilium svc/ネットワークポリシー |
veth | fromContainer | cil_from_container | 25000 | Cilium svc/ネットワークポリシー |
ethx | fromContainer | cil_to_netdev | 25000 | Cilium svc/ネットワークポリシー |
ethx | fromContainer | VLAN Tag | 50001 | VLAN タグの追加 |
IP ルール
方向 | 優先度 | ルーティングテーブル |
toContainer | 512 | 1000 + linkIndex(ENI インデックス) |
fromContainer | 512 | 1000 + linkIndex(ENI インデックス) |
よくある質問
Terway ENI モードの識別
Terway v1.11.0 以降では、Terway はデフォルトで共有 ENI モードを使用します。ノードプールの排他的な ENI ネットワークモードを構成することで、排他的な ENI モードを有効にできます。
Terway v1.11.0 より前のバージョンでは、クラスター作成時に排他的な ENI モードまたは共有 ENI モードのいずれかを選択できます。クラスター作成後、以下の方法でモードを識別できます。
排他的な ENI モード:kube-system 名前空間の Terway DaemonSet の名前は
terway-eniです。共有 ENI モード:kube-system 名前空間の Terway DaemonSet の名前は
terway-eniipです。
ネットワークプラグインの切り替え
いいえ。Terway または Flannel のネットワークプラグインは、クラスター作成時のみ選択でき、その後変更することはできません。プラグインを切り替えるには、新しいクラスターを作成する必要があります。詳細については、「ACK マネージドクラスターの作成」をご参照ください。