Container Network Interface (CNI) は、Kubernetes のネットワークインターフェースを設定するための仕様です。CNI チェーンは、複数の CNI プラグインを使用して、より柔軟な方法でネットワークを設定できるモードです。Container Service for Kubernetes (ACK) クラスターでは、CNI チェーンで複数の CNI プラグインをリンクできます。各 CNI プラグインは、IP アドレスの割り当てやルーティングなどのネットワークタスクを処理します。ACK がコンテナーを作成すると、CNI チェーンは最初のプラグインを呼び出し、チェーン内のすべてのプラグインがタスクを完了するまで、出力を次のプラグインに送信します。
ACK は、CNI プラグインが相互に連携できることを保証しません。カスタム CNI チェーンの設定はハイリスクな操作です。CNI チェーンの仕組みを理解し、CNI チェーンを設定する際は注意してください。設定エラーはビジネスの中断につながる可能性があります。
前提条件
ACK マネージドクラスターが作成され、クラスターが Terway を使用していること。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
制限事項
Terway プラグインのバージョンが 1.5.6 以降であること。コンポーネントの更新方法の詳細については、「コンポーネントの管理」をご参照ください。
カスタム CNI チェーンの設定
CNI チェーンを使用するには、使用する CNI プラグインを Terway の設定ファイルに追加する必要があります。
次のコマンドを実行して、
eni-config設定ファイルを編集します。kubectl edit cm -nkube-system eni-configパラメーター
説明
10-terway.conf
Terway CNI の設定。この設定は変更しないでください。
重要元の設定ファイルは変更しないでください。
10-terway.conflist
カスタム CNI チェーンの設定。
pluginsの最初の CNI 設定は、10-terway.conf内の設定である必要があります。重要このトピックの設定は一例です。設定エラーにつながる可能性があるため、この設定を直接使用しないでください。
設定ブロックの内容が JSON フォーマットであることを確認してください。
設定ファイル
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }kubectl rollout restart -n kube-system daemonset.apps/terway-eniipを実行して、Terway Pod を再作成します。設定が正しい場合、ノード上の
etc/cni/net.d/10-terway.conflistファイルでカスタムプラグインの設定を確認できます。
ユースケース
ACK は、CNI プラグインが相互に連携できることを保証しません。カスタム CNI チェーンの設定はハイリスクな操作です。CNI チェーンの仕組みを理解し、CNI チェーンを設定する際は注意してください。設定エラーはビジネスの中断につながる可能性があります。
以下のユースケースは参考用です。
portmap の設定
portmap プラグインは、Pod の内部ポートをホストのポートにマッピングするために使用されます。これにより、Pod は特定のサービスを外部アクセスに公開できます。
インターネットアクセスが必要な場合は、セキュリティグループで対応するポートがインバウンドトラフィックに対して開いていることを確認してください。
設定例
ノードのプライベート IP アドレスとポートを使用したアクセス:
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "externalSetMarkChain":"KUBE-MARK-MASQ" } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }パブリック IP アドレスとポートを使用したアクセス:
インターネットアクセスのシナリオでは、次の設定が必要です。
設定項目
非 Datapath V2
Datapath V2
masqAll
不要
必要
symmetric_routing
必要
必要
masqAll: portmap プラグインのパラメーター。portmap v1.7.1 以降が必要です。
symmetric_routing: Terway プラグインのパラメーター。Terway v1.15.0 以降が必要です。
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "symmetric_routing": true, "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "masqAll": false } ] } 10-terway.conf: | { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "capabilities": {"bandwidth": true} }
コンテナーの IPv6 リンクローカルアドレスの無効化
クラスターで IPv6 デュアルスタック機能が有効になっていない場合でも、コンテナーのネットワークインターフェースには、作成時に fe80::/64 範囲の IPv6 リンクローカルアドレスが自動的に割り当てられます。これは、オペレーティングシステムのカーネルのデフォルトの動作です。この動作は通常無害であり、通常のビジネス運用には影響しません。
ただし、アプリケーションがネットワークアドレスの処理中にエラーを検出した場合、アプリケーションは IPv6 リンクローカルアドレスを Pod の IP アドレスとして認識できない可能性があります。その結果、アプリケーションは通信に IPv6 リンクローカルアドレスを使用しようとします。リンクローカルアドレスは、同じリンク上のデバイス間の通信にのみ使用され、ネットワーク間の通信には使用できません。そうしないと、アプリケーションで例外が発生する可能性があります。前述のシナリオでアプリケーションコードに欠陥がある場合は、まずアプリケーションベンダーに報告し、ソリューションを求めてください。
それでもコンテナー内の IPv6 リンクローカルアドレスを無効にする必要がある場合は、tuning プラグインを設定することで無効にできます。
設定例
kind: ConfigMap
apiVersion: v1
metadata:
name: eni-config
namespace: kube-system
data:
10-terway.conflist: |
{
"plugins": [
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
},
{
"type": "tuning",
"sysctl": {
"net.ipv6.conf.all.disable_ipv6": "1",
"net.ipv6.conf.default.disable_ipv6": "1",
"net.ipv6.conf.lo.disable_ipv6": "1"
}
}
]
}
10-terway.conf: |
{
"cniVersion": "0.4.0",
"name": "terway",
"type": "terway",
"capabilities": {"bandwidth": true}
}