22.2. 추가 네트워크 구성

클러스터 관리자는 클러스터에 대한 추가 네트워크를 구성할 수 있습니다. 다음과 같은 네트워크 유형이 지원됩니다.

22.2.1. 추가 네트워크 관리 방법

두 가지 접근 방법으로 추가 네트워크의 라이프사이클을 관리할 수 있습니다. 각 접근 방식은 상호 배타적이며 한 번에 하나의 추가 네트워크 관리에만 사용할 수 있습니다. 두 방법 모두 추가 네트워크는 사용자가 구성하는 CNI(Container Network Interface) 플러그인에 의해 관리됩니다.

추가 네트워크의 경우 추가 네트워크의 일부로 구성하는 IPAM(IP 주소 관리) CNI 플러그인을 통해 IP 주소가 프로비저닝됩니다. IPAM 플러그인은 DHCP 및 고정 할당을 포함한 다양한 IP 주소 할당 방식을 지원합니다.

  • CNO(Cluster Network Operator) 구성을 수정합니다. CNO는 NetworkAttachmentDefinition 오브젝트를 자동으로 생성하고 관리합니다. CNO는 오브젝트 라이프사이클을 관리하는 것 외에도 DHCP가 할당된 IP 주소를 사용하는 추가 네트워크에 DHCP를 사용할 수 있도록 합니다.
  • YAML 매니페스트 적용: NetworkAttachmentDefinition 오브젝트를 생성하여 추가 네트워크를 직접 관리할 수 있습니다. 이 방법을 사용하면 CNI 플러그인을 연결할 수 있습니다.
참고

OVN SDN을 사용하여 RHOSP(Red Hat OpenStack Platform)에 여러 네트워크 인터페이스를 사용하여 OpenShift Container Platform 노드를 배포하는 경우 보조 인터페이스의 DNS 구성이 기본 인터페이스의 DNS 구성보다 우선할 수 있습니다. 이 경우 보조 인터페이스에 연결된 서브넷 ID의 DNS 네임 서버를 제거합니다.

$ openstack subnet set --dns-nameserver 0.0.0.0 <subnet_id>

22.2.2. 추가 네트워크 연결을 위한 구성

추가 네트워크는 k8s.cni.cncf.io API 그룹에서 NetworkAttachmentDefinition API를 사용하여 구성됩니다.

중요

이 정보는 프로젝트 관리 사용자가 액세스할 수 있으므로 NetworkAttachmentDefinition 오브젝트에 민감한 정보 또는 시크릿을 저장하지 마십시오.

API 구성은 다음 표에 설명되어 있습니다.

표 22.1. NetworkAttachmentDefinition API 필드

필드유형설명

metadata.name

string

추가 네트워크의 이름입니다.

metadata.namespace

string

오브젝트와 연결된 네임스페이스입니다.

spec.config

string

JSON 형식의 CNI 플러그인 구성입니다.

22.2.2.1. Cluster Network Operator를 통한 추가 네트워크 구성

추가 네트워크 연결 구성은 CNO(Cluster Network Operator) 구성의 일부로 지정됩니다.

다음 YAML은 CNO를 사용하여 추가 네트워크를 관리하기 위한 구성 매개변수를 설명합니다.

CNO(Cluster Network Operator) 구성

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  # ...
  additionalNetworks: 1
  - name: <name> 2
    namespace: <namespace> 3
    rawCNIConfig: |- 4
      {
        ...
      }
    type: Raw

1
하나 이상의 추가 네트워크 구성으로 구성된 배열입니다.
2
생성 중인 추가 네트워크 연결의 이름입니다. 이름은 지정된 namespace 내에서 고유해야 합니다.
3
네트워크 연결을 생성할 네임스페이스입니다. 값을 지정하지 않으면 default 네임스페이스가 사용됩니다.
4
JSON 형식의 CNI 플러그인 구성입니다.

22.2.2.2. YAML 매니페스트에서 추가 네트워크 구성

추가 네트워크의 구성은 다음 예와 같이 YAML 구성 파일에서 지정됩니다.

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: <name> 1
spec:
  config: |- 2
    {
      ...
    }
1
생성 중인 추가 네트워크 연결의 이름입니다.
2
JSON 형식의 CNI 플러그인 구성입니다.

22.2.3. 추가 네트워크 유형에 대한 구성

추가 네트워크의 특정 구성 필드는 다음 섹션에 설명되어 있습니다.

22.2.3.1. 브리지 추가 네트워크 구성

다음 오브젝트는 브릿지 CNI 플러그인의 구성 매개변수를 설명합니다.

표 22.2. 브릿지 CNI 플러그인 JSON 구성 오브젝트

필드유형설명

cniVersion

string

CNI 사양 버전입니다. 0.3.1 값이 필요합니다.

name

string

CNO 구성에 대해 이전에 제공한 name 매개변수의 값입니다.

type

string

 

bridge

string

사용할 가상 브릿지의 이름을 지정합니다. 브릿지 인터페이스가 호스트에 없으면 생성됩니다. 기본값은 cni0입니다.

ipam

object

IPAM CNI 플러그인에 대한 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다.

ipMasq

boolean

가상 네트워크에서 전송되는 트래픽에 IP 마스커레이딩을 사용하려면 true로 설정합니다. 모든 트래픽의 소스 IP 주소가 브리지의 IP 주소로 다시 작성됩니다. 브리지에 IP 주소가 없으면 이 설정이 적용되지 않습니다. 기본값은 false입니다.

isGateway

boolean

브리지에 IP 주소를 할당하려면 true로 설정합니다. 기본값은 false입니다.

isDefaultGateway

boolean

브릿지를 가상 네트워크의 기본 게이트웨이로 구성하려면 true로 설정합니다. 기본값은 false입니다. isDefaultGatewaytrue로 설정되면 isGateway도 자동으로 true로 설정됩니다.

forceAddress

boolean

이전에 할당된 IP 주소를 가상 브리지에 할당할 수 있도록 하려면 true로 설정합니다. false로 설정하면 중첩되는 하위 집합의 IPv4 주소 또는 IPv6 주소가 가상 브릿지에 지정되는 경우 오류가 발생합니다. 기본값은 false입니다.

hairpinMode

boolean

가상 브리지가 수신한 가상 포트를 통해 이더넷 프레임을 다시 보낼 수 있도록 하려면 true 로 설정합니다. 이 모드를 반사 릴레이라고도 합니다. 기본값은 false입니다.

promiscMode

boolean

브릿지에서 무차별 모드를 사용하려면 true로 설정합니다. 기본값은 false입니다.

vlan

string

VLAN(가상 LAN) 태그를 정수 값으로 지정합니다. 기본적으로 VLAN 태그는 할당되지 않습니다.

mtu

string

최대 전송 단위(MTU)를 지정된 값으로 설정합니다. 기본값은 커널에 의해 자동으로 설정됩니다.

22.2.3.1.1. 브릿지 구성 예

다음 예제는 이름이 bridge-net인 추가 네트워크를 구성합니다.

{
  "cniVersion": "0.3.1",
  "name": "work-network",
  "type": "bridge",
  "isGateway": true,
  "vlan": 2,
  "ipam": {
    "type": "dhcp"
    }
}

22.2.3.2. 호스트 장치 추가 네트워크에 대한 구성

참고

device, hwaddr, kernelpath 또는 pciBusID 매개변수 중 하나만 설정하여 네트워크 장치를 지정합니다.

다음 오브젝트는 호스트 장치 CNI 플러그인의 구성 매개변수를 설명합니다.

표 22.3. 호스트 장치 CNI 플러그인 JSON 구성 오브젝트

필드유형설명

cniVersion

string

CNI 사양 버전입니다. 0.3.1 값이 필요합니다.

name

string

CNO 구성에 대해 이전에 제공한 name 매개변수의 값입니다.

type

string

구성할 CNI 플러그인의 이름: 호스트 장치.

device

string

선택 사항: 장치의 이름(예: eth0).

hwaddr

string

선택사항: 장치 하드웨어 MAC 주소입니다.

kernelpath

string

선택사항: /sys/devices/pci0000:00/0000:00:1f.6 과 같은 Linux 커널 장치 경로입니다.

pciBusID

string

선택사항: 네트워크 장치의 PCI 주소(예: 0000:00:1f.6) 입니다.

22.2.3.2.1. 호스트 장치 구성 예

다음 예제는 이름이 hostdev-net인 추가 네트워크를 구성합니다.

{
  "cniVersion": "0.3.1",
  "name": "work-network",
  "type": "host-device",
  "device": "eth1"
}

22.2.3.3. IPVLAN 추가 네트워크 구성

다음 오브젝트는 IPVLAN CNI 플러그인의 구성 매개변수를 설명합니다.

표 22.4. IPVLAN CNI 플러그인 JSON 구성 오브젝트

필드유형설명

cniVersion

string

CNI 사양 버전입니다. 0.3.1 값이 필요합니다.

name

string

CNO 구성에 대해 이전에 제공한 name 매개변수의 값입니다.

type

string

구성할 CNI 플러그인의 이름: ipvlan.

mode

string

가상 네트워크의 운영 모드입니다. 값은 l2, l3 또는 l3s여야 합니다. 기본값은 l2입니다.

master

string

네트워크 연결과 연결할 이더넷 인터페이스입니다. 마스터를 지정하지 않으면 기본 네트워크 경로에 대한 인터페이스가 사용됩니다.

mtu

integer

최대 전송 단위(MTU)를 지정된 값으로 설정합니다. 기본값은 커널에 의해 자동으로 설정됩니다.

ipam

object

IPAM CNI 플러그인에 대한 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다.

dhcp 를 지정하지 마십시오. IPVLAN 인터페이스는 호스트 인터페이스와 MAC 주소를 공유하므로 DHCP를 사용하여 IPVLAN를 구성할 수 없습니다.

22.2.3.3.1. ipvlan 구성 예

다음 예제는 이름이 ipvlan-net인 추가 네트워크를 구성합니다.

{
  "cniVersion": "0.3.1",
  "name": "work-network",
  "type": "ipvlan",
  "master": "eth1",
  "mode": "l3",
  "ipam": {
    "type": "static",
    "addresses": [
       {
         "address": "192.168.10.10/24"
       }
    ]
  }
}

22.2.3.4. MACVLAN 추가 네트워크 구성

다음 오브젝트는 macvlan CNI 플러그인의 구성 매개변수를 설명합니다.

표 22.5. MACVLAN CNI 플러그인 JSON 구성 오브젝트

필드유형설명

cniVersion

string

CNI 사양 버전입니다. 0.3.1 값이 필요합니다.

name

string

CNO 구성에 대해 이전에 제공한 name 매개변수의 값입니다.

type

string

구성할 CNI 플러그인의 이름입니다. macvlan.

mode

string

가상 네트워크에서 트래픽 가시성을 구성합니다. bridge, passthru, private 또는 vepa 중 하나여야 합니다. 값을 입력하지 않으면 기본값은 bridge입니다.

master

string

새로 생성된 macvlan 인터페이스와 연결할 호스트 네트워크 인터페이스입니다. 값을 지정하지 않으면 기본 경로 인터페이스가 사용됩니다.

mtu

string

지정된 값에 대한 최대 전송 단위(MTU)입니다. 기본값은 커널에 의해 자동으로 설정됩니다.

ipam

object

IPAM CNI 플러그인에 대한 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다.

참고

플러그인 구성에 대한 마스터 키를 지정하는 경우, 가능한 충돌을 방지하려면 기본 네트워크 플러그인과 연결된 것과 다른 물리적 네트워크 인터페이스를 사용합니다.

22.2.3.4.1. macvlan 구성 예

다음 예제는 이름이 macvlan-net인 추가 네트워크를 구성합니다.

{
  "cniVersion": "0.3.1",
  "name": "macvlan-net",
  "type": "macvlan",
  "master": "eth1",
  "mode": "bridge",
  "ipam": {
    "type": "dhcp"
    }
}

22.2.4. 추가 네트워크에 대한 IP 주소 할당 구성

IP 주소 관리(IPAM) CNI(Container Network Interface) 플러그인은 다른 CNI 플러그인에 대한 IP 주소를 제공합니다.

다음 IP 주소 할당 유형을 사용할 수 있습니다.

  • 정적 할당
  • DHCP 서버를 통한 동적 할당. 지정한 DHCP 서버는 추가 네트워크에서 연결할 수 있어야 합니다.
  • Whereabouts IPAM CNI 플러그인을 통한 동적 할당

22.2.4.1. 고정 IP 주소 할당 구성

다음 표에서는 고정 IP 주소 할당 구성에 대해 설명합니다.

표 22.6. IPAM 고정 구성 오브젝트

필드유형설명

type

string

IPAM 주소 유형입니다. static 값이 필요합니다.

addresses

array

가상 인터페이스에 할당할 IP 주소를 지정하는 오브젝트 배열입니다. IPv4 및 IPv6 IP 주소가 모두 지원됩니다.

routes

array

Pod 내부에서 구성할 경로를 지정하는 오브젝트 배열입니다.

dns

array

선택 사항: DNS 구성을 지정하는 오브젝트 배열입니다.

address 배열에는 다음 필드가 있는 오브젝트가 필요합니다.

표 22.7. ipam.addresses[] array

필드유형설명

주소

string

지정하는 IP 주소 및 네트워크 접두사입니다. 예를 들어 10.10.21.10/24를 지정하면 추가 네트워크에 IP 주소 10.10.21.10이 할당되고 넷마스크는 255.255.255.0입니다.

gateway

string

송신 네트워크 트래픽을 라우팅할 기본 게이트웨이입니다.

표 22.8. ipam.routes[] array

필드유형설명

dst

string

CIDR 형식의 IP 주소 범위(예: 기본 경로의 경우 192.168.17.0/24 또는 0.0.0.0/0 )입니다.

gw

string

네트워크 트래픽이 라우팅되는 게이트웨이입니다.

표 22.9. IPAM.dns 오브젝트

필드유형설명

nameservers

array

DNS 쿼리를 보낼 하나 이상의 IP 주소 배열입니다.

domain

array

호스트 이름에 추가할 기본 도메인입니다. 예를 들어 도메인이 example.com으로 설정되면 example-host에 대한 DNS 조회 쿼리가 example-host.example.com으로 다시 작성됩니다.

search

array

DNS 조회 쿼리 중에 규정되지 않은 호스트 이름(예: example-host)에 추가할 도메인 이름 배열입니다.

고정 IP 주소 할당 구성 예

{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.7/24"
        }
      ]
  }
}

22.2.4.2. DHCP(Dynamic IP 주소) 할당 구성

다음 JSON은 DHCP를 사용한 동적 IP 주소 할당 구성을 설명합니다.

DHCP 리스 갱신

pod는 생성될 때 원래 DHCP 리스를 얻습니다. 리스는 클러스터에서 실행되는 최소 DHCP 서버 배포를 통해 주기적으로 갱신되어야 합니다.

DHCP 서버 배포를 트리거하려면 다음 예와 같이 Cluster Network Operator 구성을 편집하여 shim 네트워크 연결을 만들어야 합니다.

shim 네트워크 연결 정의 예

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  additionalNetworks:
  - name: dhcp-shim
    namespace: default
    type: Raw
    rawCNIConfig: |-
      {
        "name": "dhcp-shim",
        "cniVersion": "0.3.1",
        "type": "bridge",
        "ipam": {
          "type": "dhcp"
        }
      }
  # ...

표 22.10. IPAM DHCP 구성 오브젝트

필드유형설명

type

string

IPAM 주소 유형입니다. dhcp 값은 필수입니다.

DHCP(Dynamic IP 주소) 할당 구성 예

{
  "ipam": {
    "type": "dhcp"
  }
}

22.2.4.3. Whereabouts를 사용한 동적 IP 주소 할당 구성

Whereabouts CNI 플러그인을 사용하면 DHCP 서버를 사용하지 않고도 IP 주소를 추가 네트워크에 동적으로 할당할 수 있습니다.

다음 표에서는 Whereabouts를 사용한 동적 IP 주소 할당 구성에 대해 설명합니다.

표 22.11. 구성 오브젝트를 설명하는 IPAM

필드유형설명

type

string

IPAM 주소 유형입니다. Whereabouts 필요한 값입니다.

범위

string

CIDR 표기법의 IP 주소와 범위입니다. IP 주소는 이 주소 범위 내에서 할당됩니다.

exclude

array

선택 사항: CIDR 표기법의 0개 이상의 IP 주소 및 범위 목록입니다. 제외된 주소 범위 내의 IP 주소는 할당되지 않습니다.

Whereabouts를 사용하는 동적 IP 주소 할당 구성 예

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/27",
    "exclude": [
       "192.0.2.192/30",
       "192.0.2.196/32"
    ]
  }
}

22.2.5. Cluster Network Operator를 사용하여 추가 네트워크 연결 생성

CNO(Cluster Network Operator)는 추가 네트워크 정의를 관리합니다. 생성할 추가 네트워크를 지정하면 CNO가 NetworkAttachmentDefinition 오브젝트를 자동으로 생성합니다.

중요

Cluster Network Operator가 관리하는 NetworkAttachmentDefinition 오브젝트를 편집하지 마십시오. 편집하면 추가 네트워크의 네트워크 트래픽이 중단될 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

  1. 선택 사항: 추가 네트워크의 네임스페이스를 생성합니다.

    $ oc create namespace <namespace_name>
  2. CNO 구성을 편집하려면 다음 명령을 입력합니다.

    $ oc edit networks.operator.openshift.io cluster
  3. 다음 예제 CR과 같이 생성 중인 추가 네트워크에 대한 구성을 추가하여 생성 중인 CR을 수정합니다.

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      # ...
      additionalNetworks:
      - name: tertiary-net
        namespace: namespace2
        type: Raw
        rawCNIConfig: |-
          {
            "cniVersion": "0.3.1",
            "name": "tertiary-net",
            "type": "ipvlan",
            "master": "eth1",
            "mode": "l2",
            "ipam": {
              "type": "static",
              "addresses": [
                {
                  "address": "192.168.1.23/24"
                }
              ]
            }
          }
  4. 변경 사항을 저장하고 텍스트 편집기를 종료하여 변경 사항을 커밋합니다.

검증

  • CNO가 다음 명령을 실행하여 NetworkAttachmentDefinition 오브젝트를 생성했는지 확인합니다. CNO가 오브젝트를 생성하기 전에 지연이 발생할 수 있습니다.

    $ oc get network-attachment-definitions -n <namespace>

    다음과 같습니다.

    <namespace>
    CNO 구성에 추가한 네트워크 연결의 네임스페이스를 지정합니다.

    출력 예

    NAME                 AGE
    test-network-1       14m

22.2.6. YAML 매니페스트를 적용하여 추가 네트워크 연결 생성

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

  1. 다음 예와 같이 추가 네트워크 구성으로 YAML 파일을 생성합니다.

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: next-net
    spec:
      config: |-
        {
          "cniVersion": "0.3.1",
          "name": "work-network",
          "type": "host-device",
          "device": "eth1",
          "ipam": {
            "type": "dhcp"
          }
        }
  2. 추가 네트워크를 생성하려면 다음 명령을 입력합니다.

    $ oc apply -f <file>.yaml

    다음과 같습니다.

    <file>
    YAML 매니페스트가 포함된 파일의 이름을 지정합니다.