Terway は、Alibaba Cloud が開発したオープンソースの Container Network Interface (CNI) プラグインです。Terway は Virtual Private Cloud (VPC) と統合され、標準の Kubernetes ネットワークポリシーを用いてコンテナー向けのアクセス制御ポリシーを定義できます。
事前準備
Terway の動作原理をより深く理解するために、Terway ネットワークプラグインの利用を開始する前に、本トピックをご確認ください。
作業を進める前に、コンテナーネットワークプラグインの基本概念を理解し、適切なプラグインを選択済みであることをご確認ください。詳細については、「ネットワーキング」および「Terway と Flannel の比較」をご参照ください。
クラスターを作成する前に、その CIDR ブロックを計画する必要があります。詳細については、「ACK マネージドクラスターの CIDR ブロックの計画」をご参照ください。
課金
Terway は無料でご利用いただけます。ただし、Terway が各ノードにデプロイする Pod は、ノードのリソースをわずかに消費します。ACK で使用される Alibaba Cloud サービスの課金に関する詳細については、「クラウドリソース料金」をご参照ください。
注意事項
Terway の構成ファイル eni-config には多数のシステムパラメーターが含まれています。明示的に許可されていないフィールドを変更または削除すると、ネットワーク切断や Pod の作成失敗などの問題が発生する可能性があります。変更可能なパラメーターについては、「Terway 構成パラメーターのカスタマイズ」をご参照ください。
Terway コンポーネントは CustomResourceDefinitions (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 インスタンスタイプがサポートする ENI の数によって決定されます。Terway では、各ノードに対して最小限の Pod 数が設定されています。この下限を満たさない限り、ノードはクラスターに追加できません。以下の表に詳細を示します。
Terway モード | ノードあたりの最大 Pod 数 | 例 | 静的 IP アドレス、独立 vSwitch、独立セキュリティグループをサポートするノードあたりの Pod 数 |
共有 ENI モード | (ECS インスタンスタイプがサポートする ENI 数 - 1) × (単一 ENI がサポートするプライベート IP アドレス数) (EniQuantity - 1) × EniPrivateIpAddressQuantity 説明 ノードをクラスターに追加するには、ノードあたりの最大 Pod 数が 11 より大きい必要があります。 | たとえば、g7 一般用途インスタンスファミリーの ecs.g7.4xlarge インスタンスタイプの場合、このインスタンスタイプは 8 個の ENI をサポートし、各 ENI は 30 個のプライベート IP アドレスをサポートします。ノードあたりの最大 Pod 数は (8 - 1) × 30 = 210 となります。 重要 ノード ENI を使用できる Pod の最大数は、ノードの仕様によって固定された値です。 | 0 |
共有 ENI モード + Trunk ENI | Trunk モードにおけるノードあたりの最大 Pod 数: (ECS インスタンスタイプがサポートするネットワークインターフェースカード (NIC) の総数) - (ECS インスタンスタイプがサポートする ENI 数) EniTotalQuantity - EniQuantity | ||
排他的な ENI モード | ECS インスタンスの場合: ECS インスタンスタイプがサポートする ENI 数 - 1 EniQuantity - 1 Lingjun インスタンスの場合: LeniQuota - 1 説明 ノードをクラスターに追加するには、ノードあたりの最大 Pod 数が 6 より大きい必要があります。 | たとえば、g7 一般用途インスタンスファミリーの ecs.g7.4xlarge インスタンスタイプの場合、このインスタンスタイプは 8 個の ENI をサポートします。ノードあたりの最大 Pod 数は (8 - 1) = 7 となります。 | ECS インスタンスタイプがサポートする ENI 数 - 1 EniQuantity - 1 説明 Lingjun インスタンスはサポートされていません。 |
Terway v1.11.0 以降では、ノードプール単位で排他的な ENI モードまたは共有 ENI モードを選択できます。両方のタイプのノードプールは、単一のクラスター内で共存可能です。詳細については、「Terway リリースノート」をご参照ください。
コンテナーネットワークがサポートする最大 Pod 数の確認方法
方法 1:ノードプールを作成する際、インスタンスタイプ セクションに移動すると、Terway 互換性(対応 Pod 数) 列に各インスタンスタイプがサポートする Pod 数が表示されます。
方法 2:以下の手順に従って必要なデータを取得し、ECS インスタンスタイプがサポートする Pod 数を手動で算出します。
インスタンスファミリー のドキュメントを参照して、ECS インスタンスがサポートする ENI 数を照会します。
OpenAPI Explorer を使用して情報を照会できます。既存のノードのインスタンスタイプを
InstanceTypesパラメーターに指定し、呼び出しを実行 をクリックします。応答において、EniQuantityはそのインスタンスタイプがサポートする ENI の最大数、EniPrivateIpAddressQuantityは単一 ENI がサポートするプライベート IP アドレス数、EniTotalQuantityはそのインスタンスタイプがサポートするネットワークインターフェースの総数を示します。
クラスター作成時に Terway ネットワークプラグインをインストールする
クラスターを作成する際に、Terway ネットワークプラグインをインストールする必要があります。既存のクラスターに対してネットワークプラグインを変更することはできません。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ページで、Kubernetes クラスターの作成 をクリックします。
Terway ネットワークプラグインの主要なネットワークパラメーターを構成します。その他のクラスターパラメーターについては、「ACK マネージドクラスターの作成」をご参照ください。
構成項目
説明
IPv6 デュアルスタック
IPv4 および IPv6 アドレスの両方をサポートするデュアルスタッククラスターを作成するには、有効化 を選択します。
この機能は Kubernetes 1.22 以降でのみ利用可能です。また、Terway プラグインでのみサポートされ、eRDMA 機能との併用はできません。
クラスターは IPv4 および IPv6 の両方のプロトコルをサポートしますが、ワーカーノードとコントロールプレーン間の通信は引き続き IPv4 アドレスを使用します。以下の点を確認してください。
クラスターの VPC が IPv6 デュアルスタックをサポートしていること。
共有 ENI モードで Terway を使用する場合、ノードの インスタンスタイプ が IPv6 をサポートしていること。サポートされる IPv4 および IPv6 アドレス数は同一である必要があります。
VPC
クラスターが使用する VPC です。
ネットワークプラグイン
Terway を選択します。
DataPath V2
このチェックボックスをオンにすると、DataPath V2 加速モードが有効になります。加速モードを有効化すると、Terway は通常の共有 ENI モードとは異なるトラフィック転送経路を使用して、より高速なネットワーク通信を実現します。このモードの特徴については、「ネットワークアクセラレーション」をご参照ください。
説明Kubernetes 1.34 以降を実行する新規クラスターで DataPath V2 を選択した場合、Terway ノードは kube-proxy を実行しなくなります。
このモードでは、デフォルトで portmap がサポートされます。portmap プラグインの構成は不要です。詳細については、「カスタム CNI チェーンの構成」をご参照ください。
DataPath V2 は、以下のオペレーティングシステムイメージでのみサポートされ、Linux カーネル 5.10 以降が必要です。
Alibaba Cloud Linux 3(全バージョン)
ContainerOS
Ubuntu
有効化すると、Terway ポリシーコンテナーは各ワーカーノードで追加で 0.5 コアおよび 512 MB のリソースを消費します。この消費量はクラスター規模の拡大に伴い増加します。デフォルトの Terway 構成では、ポリシーコンテナーの CPU 制限は 1 コア、メモリ制限は無制限です。
DataPath V2 モードでは、コンテナーネットワーク接続追跡 (conntrack) 情報が eBPF マップに格納されます。Linux のネイティブ conntrack メカニズムと同様に、eBPF conntrack は LRU(Least Recently Used)アルゴリズムに基づいて実装されています。マップの容量に達すると、最も古い接続レコードが自動的に削除され、新しい接続を保存するためのスペースが確保されます。ビジネス規模に応じて関連パラメーターを構成し、接続数が上限を超えないようにする必要があります。詳細については、「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 の CIDR ブロックです。高いクラスター可用性を実現するため、3 つ以上の異なるゾーンから vSwitch を選択することを推奨します。
Pod vSwitch
Pod で使用される vSwitch の CIDR ブロックです。これはノード vSwitch の CIDR ブロックと重複可能です。
Service CIDR
Service で使用される CIDR ブロックです。これはノードおよび Pod の CIDR ブロックと重複してはなりません。
IPv6 Service CIDR
IPv6 デュアルスタックを有効化後に構成可能です。
Terway の動作モード
以下では、さまざまな Terway モードの特徴、比較、および動作原理について説明します。
共有 ENI モードと排他的な ENI モード
Terway では、Pod への IP アドレス割り当てに 2 つのモードを提供しています:共有 ENI モード および 排他的な ENI モード。
Terway v1.11.0 以降では、ノードプール単位で共有 ENI モードまたは排他的な ENI モードを選択できます。このオプションは、クラスター作成時には利用できなくなりました。
ノード上のプライマリ ENI はノードのオペレーティングシステム (OS) に割り当てられます。残りの ENI は Terway によって管理され、Pod ネットワークの構成に使用されます。そのため、これらの ENI を手動で構成しないでください。一部の ENI を自身で管理したい場合は、「ENI のホワイトリストの構成」をご参照ください。
項目 | 共有 ENI モード | 排他的な ENI モード | |
Pod IP アドレス管理 | ENI 割り当て方法 | 複数の Pod が 1 つの ENI を共有します。 | 各 Pod がノード上で専用の ENI を占有します。 |
Pod デプロイ密度 | Pod デプロイ密度が高いため、単一ノードで数百の Pod をサポートできます。 | Pod デプロイ密度が低いため、一般的なインスタンスタイプのノードでは少数の Pod のみをサポートします。 | |
ネットワークアーキテクチャ | |||
データリンク | Pod が他の Pod にアクセスする場合、または Service のバックエンドとしてアクセスされる場合、トラフィックはノードのネットワークプロトコルスタックを通過します。 | Pod が Service にアクセスする場合、トラフィックはノード OS のプロトコルスタックを通過します。しかし、Pod が他の Pod にアクセスする場合、または Service のバックエンドとしてアクセスされる場合、Pod はアタッチされた ENI を直接使用してノードのネットワークプロトコルスタックをバイパスします。これにより、より高いパフォーマンスを実現します。 | |
シナリオ | 標準的な Kubernetes シナリオ。 | このモードでは、ネットワークパフォーマンスが従来の仮想マシンと同等になります。ネットワークスループットや低レイテンシーなど、ネットワークパフォーマンスに高い要求があるアプリケーションなどのシナリオに適しています。 | |
ネットワークアクセラレーション | DataPath V2 ネットワークアクセラレーションをサポートします。詳細については、「ネットワークアクセラレーション」をご参照ください。 | ネットワークアクセラレーションはサポートしていません。ただし、Pod が ENI リソースを専有するため、優れたネットワークパフォーマンスを実現します。 | |
NetworkPolicy サポート | ネイティブの Kubernetes |
| |
ノードレベルのネットワーク構成 | サポートされています。詳細については、「ノードレベルのネットワーク構成」をご参照ください。 | サポートされています。詳細については、「ノードレベルのネットワーク構成」をご参照ください。 | |
アクセスの制御 | Trunk ENI 構成を有効化すると、Pod に対して静的 IP アドレス、独立セキュリティグループ、および独立 vSwitch を構成できます。詳細については、「Pod に対する静的 IP アドレス、独立 vSwitch、および独立セキュリティグループの構成」をご参照ください。 | Pod に対して静的 IP アドレス、独立セキュリティグループ、および独立 vSwitch を構成できます。 | |
ネットワークアクセラレーション
Terway を共有 ENI モードで使用する場合、ネットワークアクセラレーションモードを有効化できます。アクセラレーションモードを有効化すると、Terway は通常の共有 ENI モードとは異なるトラフィック転送経路を使用して、より高いパフォーマンスを実現します。現在、Terway では DataPath V2 アクセラレーションモードがサポートされています。以下では、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 アクセラレーションモードを選択していた可能性があります。以下では、その特徴について説明します。
アクセスの制御
共有 ENI モードの Terway では、NetworkPolicy および Trunk ENI オプションのサポートにより、クラスター内のネットワークトラフィックをより詳細に管理できます。排他的な ENI モードの Terway でも、一部のトラフィック制御機能がサポートされています。
NetworkPolicy サポート
Terway 排他的な ENI モードのノードプールは、
NetworkPolicyをサポートしていません。Terway 共有 ENI モードのノードプールは、ネイティブの Kubernetes
NetworkPolicy機能をサポートしており、ユーザー定義のルールを使用して Pod 間のネットワークトラフィックを制御できます。クラスターを作成する際、ネットワークプラグイン を Terway に設定し、NetworkPolicy サポート オプションを選択することで、クラスターの
NetworkPolicyを有効化できます。詳細については、「ACK クラスターでのネットワークポリシーの使用」をご参照ください。説明コンソールで
NetworkPolicyリソースを管理する機能はパブリックプレビュー中です。この機能を利用するには、クォータセンターコンソール にて申請を行う必要があります。
Pod に対する静的 IP アドレス、独立 vSwitch、および独立セキュリティグループの構成
Terway 排他的な ENI モードのノードプールでは、各 Pod に対して静的 IP アドレス、独立 vSwitch、および独立セキュリティグループをデフォルトで構成できます。これにより、詳細なトラフィック管理、トラフィック隔離、ネットワークポリシー構成、IP アドレス管理機能が提供されます。
Trunk ENI は、Terway 共有 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 アドレスを管理します。OpenAPI 操作の制限事項については、対応するクラウド製品のドキュメントをご参照ください。
共有 ENI モード:最大 500 ノードを並列で割り当てることができます。
排他的な ENI/Trunk ENI モード:最大 100 Pod を並列で割り当てることができます。
上記のクォータは変更できません。
よくある質問
Terway が排他的な ENI モードか共有 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です。
既存の ACK クラスターでネットワークプラグインを切り替えることは可能ですか?
ネットワークプラグイン(Terway または Flannel)は、クラスター作成時にのみ選択できます。クラスター作成後のネットワークプラグインの変更はできません。異なるネットワークプラグインを使用するには、新規クラスターを作成する必要があります。詳細については、「ACK マネージドクラスターの作成」をご参照ください。