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の設定ファイルに追加する必要があります。
手順
次のコマンドを実行して、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ポッドを再作成します。設定が有効な場合は、ノードの
etc/cni/net.d/10-terway.conflis
設定ファイルでカスタムプラグイン設定を表示できます。
ユースケース
ACKは、CNIプラグインが互いに共同作業できることを保証するものではない。 カスタムCNIチェーンの設定はハイリスク操作です。 CNIチェーンの仕組みを理解し、CNIチェーンを設定するときは注意してください。 設定エラーにより、ビジネスが中断される可能性があります。
以下のユースケースは参考用です。
ポートマップの設定
ポートマッププラグインは、ポッドの内部ポートをホストのポートにマップするために使用されます。 これにより、ポッドは特定のサービスを外部アクセスに公開できます。
設定例
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}
}
コンテナーのIPv6リンクローカルアドレスの無効化
コンテナのIPv4/IPv6デュアルスタック機能が無効になっている場合でも、CNIには、CNIの作成後にfe80::/64
CIDRブロックからIPv6リンクローカルアドレスが割り当てられます。 これは、オペレーティングシステムカーネルによって実行されるデフォルトの操作です。 この操作はビジネスの中断を引き起こしません。
ただし、ネットワークアドレスを処理するときにアプリケーションでエラーが発生した場合、アプリケーションはIPv6リンクローカルアドレスをポッドIPアドレスとして認識できない場合があります。 その結果、アプリケーションは、通信のためにIPv6リンクローカルアドレスを使用することを試みる。 リンク-ローカルアドレスは、同じリンク上のデバイス間の通信にのみ使用され、ネットワーク間の通信には使用できません。 そうでない場合、アプリケーションは例外に遭遇する可能性があります。 上記のシナリオでアプリケーションコードに欠陥が含まれている場合は、まずアプリケーションベンダーに報告し、ソリューションを探します。
それでもコンテナーのIPv6リンクローカルアドレスを無効にする場合は、チューニング
プラグインを使用します。
設定例
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}
}