3.3. Pod をセカンダリーネットワークにアタッチする


Pod をセカンダリーネットワークに割り当てることができます。Pod をセカンダリーネットワークに割り当てると、Pod はプライマリークラスターネットワークを超えて追加のネットワークインターフェイスを使用できます。

3.3.1. セカンダリーネットワークに Pod を追加する

セカンダリーネットワークに Pod を追加できます。Pod は、デフォルトネットワークで通常のクラスター関連のネットワークトラフィックを継続的に送信します。

Pod が作成されると、セカンダリーネットワークが Pod にアタッチされます。ただし、Pod がすでに存在する場合は、セカンダリーネットワークをその Pod にアタッチすることはできません。

Pod はセカンダリーネットワークと同じ namespace に存在する必要があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • クラスターにログインする。

手順

  1. アノテーションを Pod オブジェクトに追加します。以下のアノテーション形式のいずれかのみを使用できます。

    1. カスタマイズせずにセカンダリーネットワークを割り当てるには、以下の形式でアノテーションを追加します。

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
      Copy to Clipboard Toggle word wrap

      ここでは、以下のようになります。

      k8s.v1.cni.cncf.io/networks
      Pod に関連付けるセカンダリーネットワークの名前を指定します。複数のセカンダリーネットワークを指定するには、各ネットワークをコンマで区切ります。コンマの間にはスペースを入れないでください。同じセカンダリーネットワークを複数回指定した場合、Pod は複数のネットワークインターフェイスをそのネットワークにアタッチします。
    2. カスタマイズしてセカンダリーネットワークをアタッチするには、次の形式でアノテーションを追加します。

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: |-
            [
              {
                "name": "<network>",
                "namespace": "<namespace>",
                "default-route": ["<default_route>"]
              }
            ]
      Copy to Clipboard Toggle word wrap

      ここでは、以下のようになります。

      name
      NetworkAttachmentDefinition オブジェクトによって定義されるセカンダリーネットワークの名前を指定します。
      namespace
      NetworkAttachmentDefinition オブジェクトが定義される namespace を指定します。
      default-route
      オプションのパラメーター。デフォルトルートのオーバーライドを指定します(例: 192.168.17.1)
  2. 以下のコマンドを入力して Pod を作成します。

    $ oc create -f <name>.yaml
    Copy to Clipboard Toggle word wrap

    <name> を Pod の名前に置き換えます。

  3. オプション:次のコマンドを入力して、アノテーションが Pod CR に存在することを確認します。<name> を Pod の名前に置き換えます。

    $ oc get pod <name> -o yaml
    Copy to Clipboard Toggle word wrap

    次の例では、example-pod Pod が net1 セカンダリーネットワークにアタッチされています。

    $ oc get pod example-pod -o yaml
    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/networks: macvlan-bridge
        k8s.v1.cni.cncf.io/network-status: |-
          [{
              "name": "ovn-kubernetes",
              "interface": "eth0",
              "ips": [
                  "10.128.2.14"
              ],
              "default": true,
              "dns": {}
          },{
              "name": "macvlan-bridge",
              "interface": "net1",
              "ips": [
                  "20.2.2.100"
              ],
              "mac": "22:2f:60:a5:f8:00",
              "dns": {}
          }]
      name: example-pod
      namespace: default
    spec:
      ...
    status:
      ...
    Copy to Clipboard Toggle word wrap

    ここでは、以下のようになります。

    k8s.v1.cni.cncf.io/network-status
    オブジェクトの JSON 配列を指定します。各オブジェクトは、Pod にアタッチされているセカンダリーネットワークのステータスを表します。アノテーションの値はプレーンテキストの値として保存されます。

3.3.1.1. Pod 固有のアドレスおよびルーティングオプションの指定

JSON 形式のアノテーションを使用して、Pod 固有のアドレス指定およびルーティングオプションを設定できます。これらのオプションを設定すると、Pod の静的 IP アドレス、MAC アドレス、およびデフォルトルートを設定できます。

前提条件

  • Pod はセカンダリーネットワークと同じ namespace に存在する必要があります。
  • OpenShift CLI (oc) がインストールされている。
  • クラスターにログインすること。

手順

  1. Pod リソース定義を編集します。既存の Pod リソースを編集する場合は、以下のコマンドを実行してデフォルトエディターでその定義を編集します。<name> を、編集する Pod リソースの名前に置き換えます。

    $ oc edit pod <name>
    Copy to Clipboard Toggle word wrap
  2. Pod リソース定義で、k8s.v1.cni.cncf.io/networks パラメーターを Pod の metadata マッピングに追加します。k8s.v1.cni.cncf.io/networks は、追加のプロパティーを指定するだけでなく、NetworkAttachmentDefinition カスタムリソース (CR) 名を参照するオブジェクトリストの JSON 文字列を受け入れます。

    metadata:
      annotations:
        k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]'
    # ...
    Copy to Clipboard Toggle word wrap

    ここでは、以下のようになります。

    <network>
    次の例に示すように、JSON オブジェクトに置き換えます。一重引用符が必要です。

    以下の例では、アノテーションで default-route パラメーターを使用して、デフォルトルートを持つネットワーク割り当てを指定します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: example-pod
      annotations:
        k8s.v1.cni.cncf.io/networks: '[
        {
          "name": "net1"
        },
        {
          "name": "net2",
          "default-route": ["192.0.2.1"]
        }]'
    spec:
      containers:
      - name: example-pod
        command: ["/bin/bash", "-c", "sleep 2000000000000"]
        image: centos/tools
    Copy to Clipboard Toggle word wrap

    ここでは、以下のようになります。

    name
    Pod に関連付けるセカンダリーネットワークの名前を指定します。
    default-route
    ルーティングテーブルに他のルーティングテーブルがない場合に、ルーティングされるトラフィックのゲートウェイ値を指定します。複数の default-route キーを指定すると、Pod がアクティブでなくなります。

    デフォルトのルートにより、他のルートに指定されていないトラフィックがゲートウェイにルーティングされます。

    重要

    OpenShift Container Platform のデフォルトのネットワークインターフェイス以外のインターフェイスへのデフォルトのルートを設定すると、Pod 間のトラフィックに予想されるトラフィックが別のインターフェイスでルーティングされる可能性があります。

    Pod のルーティングプロパティーを確認する場合、oc コマンドを Pod 内で ip コマンドを実行するために使用できます。

    $ oc exec -it <pod_name> -- ip route
    Copy to Clipboard Toggle word wrap
    注記

    また、Pod の k8s.v1.cni.cncf.io/network-status を参照して、JSON 形式の一覧のオブジェクトで default-route キーの有無を確認し、デフォルトルートが割り当てられているセカンダリーネットワークを確認することができます。

    Pod に静的 IP アドレスまたは MAC アドレスを設定するには、JSON 形式のアノテーションを使用できます。これには、この機能をとくに許可するネットワークを作成する必要があります。これは、CNO の rawCNIConfig で指定できます。

  3. 以下のコマンドを実行して CNO CR を編集します。

    $ oc edit networks.operator.openshift.io cluster
    Copy to Clipboard Toggle word wrap

    以下の YAML は、CNO の設定パラメーターを説明しています。

    Cluster Network Operator YAML の設定

    name: <name>
    namespace: <namespace>
    rawCNIConfig: '{
      ...
    }'
    type: Raw
    Copy to Clipboard Toggle word wrap

    ここでは、以下のようになります。

    name
    作成するセカンダリーネットワーク割り当ての名前を指定します。名前は指定された namespace 内で一意である必要があります。
    namespace
    ネットワークの割り当てを作成する namespace を指定します。値を指定しない場合、default の namespace が使用されます。
    rawCNIConfig
    以下のテンプレートに基づく CNI プラグイン設定を JSON 形式で指定します。

    以下のオブジェクトは、macvlan CNI プラグインを使用して静的 MAC アドレスと IP アドレスを使用するための設定パラメーターを説明しています。

    静的 IP および MAC アドレスを使用した macvlan CNI プラグイン JSON 設定オブジェクト

    {
      "cniVersion": "0.3.1",
      "name": "<name>",
      "plugins": [{
          "type": "macvlan",
          "capabilities": { "ips": true },
          "master": "eth0",
          "mode": "bridge",
          "ipam": {
            "type": "static"
          }
        }, {
          "capabilities": { "mac": true },
          "type": "tuning"
        }]
    }
    Copy to Clipboard Toggle word wrap

    ここでは、以下のようになります。

    name
    作成するセカンダリーネットワークアタッチメントの名前を指定します。名前は指定された namespace 内で一意である必要があります。
    plugins
    CNI プラグイン設定の配列を指定します。1 つ目のオブジェクトは、macvlan プラグイン設定を指定し、2 つ目のオブジェクトはチューニングプラグイン設定を指定します。
    ips
    CNI プラグインのランタイム設定機能の静的 IP 機能を有効にするために要求が実行されるように指定します。
    master
    macvlan プラグインが使用するインターフェイスを指定します。
    mac
    CNI プラグインの静的 MAC アドレス機能を有効にするために要求が実行されるように指定します。

    上記のネットワーク割り当ては、特定の Pod に割り当てられる静的 IP アドレスと MAC アドレスを指定するキーと共に、JSON 形式のアノテーションで参照できます。

  4. 以下のコマンドを入力して Pod を編集します。

    $ oc edit pod <name>
    Copy to Clipboard Toggle word wrap

    静的 IP および MAC アドレスを使用した macvlan CNI プラグイン JSON 設定オブジェクト

    apiVersion: v1
    kind: Pod
    metadata:
      name: example-pod
      annotations:
        k8s.v1.cni.cncf.io/networks: '[
          {
            "name": "<name>",
            "ips": [ "192.0.2.205/24" ],
            "mac": "CA:FE:C0:FF:EE:00"
          }
        ]'
    Copy to Clipboard Toggle word wrap

    ここでは、以下のようになります。

    name
    作成するセカンダリーネットワークアタッチメントの名前を指定します。名前は指定された namespace 内で一意である必要があります。
    ips
    サブネットマスクを含む IP アドレスを指定します。
    mac
    MAC アドレスを指定します。
    注記

    静的 IP アドレスおよび MAC アドレスを同時に使用することはできません。これらは個別に、または一緒に使用することもできます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat