コンテナネットワークインターフェイス (CNI) は、Kubernetes におけるネットワークインターフェイスを設定するための仕様です。CNI チェーンは、複数の CNI プラグインを使用して、より柔軟にネットワークを設定できるモードです。Container Service for Kubernetes (ACK) クラスターでは、CNI チェーンによって複数の CNI プラグインをリンクできます。各 CNI プラグインは、IP アドレスの割り当てやルーティングなどのネットワークタスクを処理します。ACK がコンテナを作成する際、CNI チェーンは最初のプラグインを呼び出し、その出力を次のプラグインに渡します。この処理は、チェーン内のすべてのプラグインがタスクを完了するまで続きます。
前提条件
Terway ネットワークプラグインを使用する ACK マネージドクラスター があること。
Terway のバージョンが v1.5.6 以降であり、クラスターが専用 ENI ネットワークモードではないこと。
ACK は、複数の CNI プラグインが連携して動作することを保証しません。カスタム CNI チェーンの設定は 高リスク操作 です。作業を進める前に、各 CNI プラグインの機能を十分に理解し、 業務中断 につながる可能性のある設定エラーを避けるよう注意してください。
カスタム CNI チェーンの設定
CNI チェーンを使用するには、使用する CNI プラグインを Terway の設定ファイルに追加する必要があります。
次のコマンドを実行して、
eni-configConfigMap を編集します。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設定ファイルでカスタムプラグイン設定を確認できます。
ユースケース
portmap の設定
portmap プラグインは、Pod の内部ポートをホストのポートにマッピングするプラグインです。これにより、Pod は特定のサービスを外部に公開できます。
パブリックネットワークアクセスが必要な場合は、セキュリティグループのインバウンドルールで、対応するポートのトラフィックが許可されていることを確認してください。
このルールは Kubernetes ネットワークポリシーと互換性がない場合があります。本番環境にデプロイする前に、設定を十分にテストすることを推奨します。
設定例
ノードのプライベート 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 以降が必要です。
kube-proxy の代替が有効になっている Datapath V2 クラスターでは、portmap プラグインは不要です。
kind: ConfigMap apiVersion: v1 metadata: name: eni-config namespace: kube-system data: 10-terway.conflist: | { "name": "terway-chain", "plugins": [ { "cniVersion": "0.4.0", "name": "terway", "type": "terway", "symmetric_routing": true, "capabilities": {"bandwidth": true} }, { "type": "portmap", "capabilities": {"portMappings": true}, "masqAll": true } ] } 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}
}