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


クラスターユーザーとして、Pod をセカンダリーネットワークにアタッチできます。

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

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

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

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

前提条件

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

手順

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

    1. カスタマイズせずにセカンダリーネットワークをアタッチするには、次の形式でアノテーションを追加します。<network> が、Pod に関連付けるセカンダリーネットワークの名前に置き換えます。

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: <network>[,<network>,...] 
      1
      Copy to Clipboard Toggle word wrap
      1
      複数のセカンダリーネットワークを指定するには、各ネットワークをコンマで区切ります。コンマの間にはスペースを入れないでください。同じセカンダリーネットワークを複数回指定した場合、Pod は複数のネットワークインターフェイスをそのネットワークにアタッチします。
    2. カスタマイズしてセカンダリーネットワークをアタッチするには、次の形式でアノテーションを追加します。

      metadata:
        annotations:
          k8s.v1.cni.cncf.io/networks: |-
            [
              {
                "name": "<network>", 
      1
      
                "namespace": "<namespace>", 
      2
      
                "default-route": ["<default_route>"] 
      3
      
              }
            ]
      Copy to Clipboard Toggle word wrap
      1
      NetworkAttachmentDefinition オブジェクトによって定義されたセカンダリーネットワークの名前を指定します。
      2
      NetworkAttachmentDefinition オブジェクトが定義される namespace を指定します。
      3
      オプション: 192.168.17.1 などのデフォルトルートのオーバーライドを指定します。
  2. Pod を作成するには、以下のコマンドを入力します。<name> を Pod の名前に置き換えます。

    $ oc create -f <name>.yaml
    Copy to Clipboard Toggle word wrap
  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: |- 
    1
    
          [{
              "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
    1
    k8s.v1.cni.cncf.io/network-status パラメーターは、オブジェクトの JSON 配列です。各オブジェクトは、Pod にアタッチされているセカンダリーネットワークのステータスを表します。アノテーションの値はプレーンテキストの値として保存されます。

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

Pod をセカンダリーネットワークに割り当てる場合、特定の Pod でそのネットワークに関するその他のプロパティーを指定する必要がある場合があります。これにより、ルーティングの一部を変更することができ、静的 IP アドレスおよび MAC アドレスを指定できます。これを実行するには、JSON 形式のアノテーションを使用できます。

前提条件

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

手順

アドレスおよび/またはルーティングオプションを指定する間に Pod をセカンダリーネットワークに追加するには、以下の手順を実行します。

  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", 
    1
    
          "default-route": ["192.0.2.1"] 
    2
    
        }]'
    spec:
      containers:
      - name: example-pod
        command: ["/bin/bash", "-c", "sleep 2000000000000"]
        image: centos/tools
    Copy to Clipboard Toggle word wrap

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

    name
    name キーは、Pod に関連付けるセカンダリーネットワークの名前です。
    default-route
    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> 
    1
    
    namespace: <namespace> 
    2
    
    rawCNIConfig: '{ 
    3
    
      ...
    }'
    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>", 
    1
    
      "plugins": [{ 
    2
    
          "type": "macvlan",
          "capabilities": { "ips": true }, 
    3
    
          "master": "eth0", 
    4
    
          "mode": "bridge",
          "ipam": {
            "type": "static"
          }
        }, {
          "capabilities": { "mac": true }, 
    5
    
          "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 形式のアノテーションで参照できます。

    以下を使用して 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>", 
    1
    
            "ips": [ "192.0.2.205/24" ], 
    2
    
            "mac": "CA:FE:C0:FF:EE:00" 
    3
    
          }
        ]'
    Copy to Clipboard Toggle word wrap

    1 1 1 1
    上記の rawCNIConfig を作成する際に、指定されるように <name> を使用します。
    2 2 2 2
    サブネットマスクを含む IP アドレスを指定します。
    3 3 3
    MAC アドレスを指定します。
    注記

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

  4. セカンダリーネットワークを持つ Pod の IP アドレスと MAC プロパティーを検証するには、oc コマンドを使用して Pod 内で ip コマンドを実行します。

    $ oc exec -it <pod_name> -- ip a
    Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat