手当たり次第に書くんだ

飽きっぽいのは本能

Kubernetes Multus の導入 – Pod に複数 NIC を接続する

Kubernetes に Multus CNI を導入し、Pod に追加ネットワークを接続する考え方を整理します。Multus はデフォルト CNI を置き換えるものではなく、Pod に複数のネットワークを持たせるための仕組みです。

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 wide

NetworkAttachmentDefinition

追加ネットワークは 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"}]
      }
    }
EOF

Pod への割り当て

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 を接続する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る