Kubernetes に Multus CNI を導入し、Pod に追加ネットワークを接続する考え方を整理します。Multus はデフォルト CNI を置き換えるものではなく、Pod に複数のネットワークを持たせるための仕組みです。
参考
書籍
書籍
参考書籍
Kubernetes完全ガイド 第2版
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Multus の位置づけ
通常の Pod は、クラスタのデフォルト CNI から 1 つの Pod IP を受け取ります。Multus を使うと、それに加えて macvlan などの追加 CNI を Pod に割り当てられます。
インストール
kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset-thick.yml
kubectl -n kube-system get pod -l app=multus -o wideNetworkAttachmentDefinition
追加ネットワークは NetworkAttachmentDefinition として定義します。以下は macvlan の例です。実際の master はノード側の NIC 名に合わせます。
kubectl apply -f - <<'EOF'
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: macvlan-net
spec:
config: |
{
"cniVersion": "0.3.1",
"type": "macvlan",
"master": "ens37",
"mode": "bridge",
"ipam": {
"type": "host-local",
"ranges": [[{"subnet": "192.0.2.0/24", "rangeStart": "192.0.2.100", "rangeEnd": "192.0.2.120"}]],
"routes": [{"dst": "0.0.0.0/0"}]
}
}
EOFPod への割り当て
kubectl apply -f - <<'EOF'
apiVersion: v1
kind: Pod
metadata:
name: multus-test
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-net
spec:
containers:
- name: alpine
image: alpine:latest
command: ["sleep", "infinity"]
EOF
kubectl exec -it multus-test -- ip addrまとめ
Multus は、Pod ネットワークとは別の L2/L3 ネットワークへ Pod を接続したい場合に有効です。ただし、物理 NIC、IPAM、ノード配置に依存するため、通常の Service 設計より運用上の制約は強くなります。
Kubernetes Multus の導入 – Pod に複数 NIC を接続する





