検索

6.3. 追加のネットワークインターフェースの作成

download PDF

Pod の追加インターフェースは、カスタムリソース (CR) として保存される CNI 設定で定義されます。これらの CR は、oc ツールを使用して作成し、一覧表示し、編集し、削除できます。

以下の手順は、Pod に macvlan インターフェースを設定します。この設定は、すべての実稼働環境に適用されない可能性がありますが、他の CNI プラグインに同じ手順を使用できます。

6.3.1. 追加インターフェースの CNI 設定の CR としての作成

注記

追加インターフェースを Pod に割り当てる必要がある場合、インターフェースを定義する CR は Pod と同じプロジェクト (namespace) に置かれる必要があります。

  1. CNI 設定を CR として保存するプロジェクト、およびその CR を使用する Pod を作成します。

    $ oc new-project multinetwork-example
  2. 追加のネットワークインターフェースを定義する CR を作成します。以下の内容を含む、macvlan-conf.yaml という YAML ファイルを作成します。

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition 1
    metadata:
      name: macvlan-conf 2
    spec:
      config: '{ 3
          "cniVersion": "0.3.0",
          "type": "macvlan",
          "master": "eth0",
          "mode": "bridge",
          "ipam": {
            "type": "host-local",
            "subnet": "192.168.1.0/24",
            "rangeStart": "192.168.1.200",
            "rangeEnd": "192.168.1.216",
            "routes": [
              { "dst": "0.0.0.0/0" }
            ],
            "gateway": "192.168.1.1"
          }
        }'
    1
    kind: NetworkAttachmentDefinition: これは、この設定が保存される CR の名前です。これは、この設定が保存される CR の名前です。これは、ネットワークを Pod に割り当てる方法を定義する Kubernetes のカスタム拡張です。
    2
    name は、次の手順で使用されるアノテーションにマップされます。
    3
    config: CNI 設定は config フィールドにパッケージ化されます。

    設定はプラグインに固有のものです。CNI 設定部分の type 行に注意してください。CNI 設定の部分の type 行をメモしてください。 この例では、ネットワーク用の IPAM (IP アドレス管理) パラメーターのほかに、master フィールドは、Pod をホストするノードにあるネットワークインターフェースを参照する必要があります。

  3. 以下のコマンドを実行して CR を作成します。

    $ oc create -f macvlan-conf.yaml
注記

この例は、macvlan CNI プラグインをベースにしています。AWS 環境では、macvlan トラフィックはフィルターされる可能性があるため、必要な宛先に到達しない可能性があります。

6.3.2. 追加インターフェースの CR の管理

追加インターフェースの CR は、oc CLI を使用して管理できます。

以下のコマンドを使用して、追加リソースの CR を一覧表示します。

$ oc get network-attachment-definitions.k8s.cni.cncf.io

以下のコマンドを使用して、追加インターフェースの CR を削除します。

$ oc delete network-attachment-definitions.k8s.cni.cncf.io macvlan-conf

6.3.3. CR を使用するアノテーション付き Pod の作成

追加インターフェースを使用する Pod を作成するには、CR を参照するアノテーションを使用します。以下の内容を含む Pod についての samplepod.yaml という YAML ファイルを作成します。

apiVersion: v1
kind: Pod
metadata:
  name: samplepod
  annotations:
    k8s.v1.cni.cncf.io/networks: macvlan-conf 1
spec:
  containers:
  - name: samplepod
    command: ["/bin/bash", "-c", "sleep 2000000000000"]
    image: centos/tools
1
annotations フィールドには、k8s.v1.cni.cncf.io/networks: macvlan-conf が含まれます。 これは、先に定義した CR の name フィールドに相関します。

以下のコマンドを実行して samplepod Pod を作成します。

$ oc create -f samplepod.yaml

追加のネットワークインターフェースが作成され、Pod に割り当てられているのを確認するには、以下のコマンドを使用して IPv4 アドレス情報を一覧表示します。

$ oc exec -it samplepod -- ip -4 addr

3 つのインターフェースが出力に一覧表示されます。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 1
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP  link-netnsid 0 2
    inet 10.244.1.4/24 scope global eth0
       valid_lft forever preferred_lft forever
4: net1@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN  link-netnsid 0 3
    inet 192.168.1.203/24 scope global net1
       valid_lft forever preferred_lft forever
1
lo: ループバックインターフェースです。
2
eth0: クラスター全体のデフォルトネットワークに接続されるインターフェースです。
3
net1: 作成したばかりの新規インターフェースです。

6.3.3.1. 複数インターフェースの Pod への割り当て

複数の追加インターフェースを Pod に割り当てるには、複数の名前を、Pod 定義の annotations フィールドにカンマ区切りの形式で指定します。

Pod 定義の以下の annotations フィールドは、追加インターフェースの複数の異なる CR を指定します。

  annotations:
    k8s.v1.cni.cncf.io/networks: macvlan-conf, tertiary-conf, quaternary-conf

Pod 定義の以下の annotations フィールドは、追加インターフェースに同じ CR を指定します。

  annotations:
    k8s.v1.cni.cncf.io/networks: macvlan-conf, macvlan-conf

6.3.4. 実行中の Pod のインターフェース設定の表示

Pod の実行後に、作成された追加インターフェースの設定を確認できます。先の例と同じ Pod を表示するには、以下のコマンドを実行します。

$ oc describe pod samplepod

出力の metadata セクションには、JSON 形式で表示されるアノテーションの一覧が含まれます。

Annotations:
  k8s.v1.cni.cncf.io/networks: macvlan-conf
  k8s.v1.cni.cncf.io/networks-status:
    [{
        "name": "openshift-sdn",
        "ips": [
            "10.131.0.10"
        ],
        "default": true,
        "dns": {}
    },{
        "name": "macvlan-conf", 1
        "interface": "net1", 2
        "ips": [ 3
            "192.168.1.200"
        ],
        "mac": "72:00:53:b4:48:c4", 4
        "dns": {} 5
    }]
1
name は、カスタムリソース名 macvlan-conf を参照します。
2
interface は、Pod のインターフェースの名前を参照します。
3
ips は、Pod に割り当てられる IP アドレスの一覧です。
4
mac は、インターフェースの MAC アドレスです。
5
dns は、インターフェースの DNS を参照します。

最初のアノテーション k8s.v1.cni.cncf.io/networks: macvlan-conf は、例で作成された CR を参照します。このアノテーションは Pod 定義で指定されています。

2 つ目のアノテーションは、 k8s.v1.cni.cncf.io/networks-status です。k8s.v1.cni.cncf.io/networks-status には 2 つのインターフェースが一覧表示されます。

  • 最初のインターフェースは、デフォルトネットワーク openshift-sdn のインターフェースを記述します。このインターフェースは eth0 として作成されます。これは、クラスター内の通信に使用されます。
  • 2 つ目のインターフェースは、作成した追加インターフェース net1 です。上記の出力は、Pod に割り当てられた IP アドレスなど、インターフェースの作成時に設定されたいくつかのキーの値を一覧表示しています。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.