21.3. 추가 네트워크 구성


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

21.3.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 Kubernetes를 사용하여 RHOSP(Red Hat OpenStack Platform)에 여러 네트워크 인터페이스가 있는 OpenShift Container Platform 노드를 배포할 때 보조 인터페이스의 DNS 구성이 기본 인터페이스의 DNS 구성보다 우선할 수 있습니다. 이 경우 보조 인터페이스에 연결된 서브넷 ID의 DNS 이름 서버를 제거합니다.

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

21.3.2. 추가 네트워크 연결 구성

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

중요

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

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

표 21.2. NetworkAttachmentDefinition API 필드
필드유형설명

metadata.name

string

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

metadata.namespace

string

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

spec.config

string

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

21.3.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 네임스페이스가 사용됩니다.
중요

OVN-Kubernetes 네트워크 플러그인의 네임스페이스 문제를 방지하려면 이 네임스페이스가 기본 추가 네트워크 연결을 위해 예약되어 있으므로 추가 네트워크 연결 기본값 을 지정하지 마십시오.

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

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

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

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

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

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

21.3.3.1. 브릿지 추가 네트워크에 대한 구성

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

표 21.3. 브릿지 CNI 플러그인 JSON 구성 오브젝트
필드유형설명

cniVersion

string

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

name

string

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

type

string

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

ipam

object

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

bridge

string

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

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 태그는 할당되지 않습니다.

preserveDefaultVlan

string

선택 사항: 기본 vlan을 브리지에 연결된 veth 끝에 유지해야 하는지 여부를 나타냅니다. 기본값은 true입니다.

vlanTrunk

list

선택 사항: VLAN 트렁크 태그를 할당합니다. 기본값은 none 입니다.

mtu

integer

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

enabledad

boolean

선택 사항: 컨테이너 사이드 veth 에 대해 중복 주소 탐지를 활성화합니다. 기본값은 false입니다.

macspoofchk

boolean

선택 사항: mac 스푸핑 검사를 활성화하여 컨테이너에서 발생하는 트래픽을 인터페이스의 mac 주소로 제한합니다. 기본값은 false입니다.

참고

VLAN 매개 변수는 veth 의 호스트에서 VLAN 태그를 구성하고 브리지 인터페이스에서 vlan_filtering 기능도 활성화합니다.

참고

L2 네트워크에 대한 uplink를 구성하려면 다음 명령을 사용하여 uplink 인터페이스에서 VLAN을 허용해야 합니다.

$  bridge vlan add vid VLAN_ID dev DEV
21.3.3.1.1. 브릿지 CNI 플러그인 구성 예

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

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

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

참고

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

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

표 21.4. 호스트 장치 CNI 플러그인 JSON 구성 오브젝트
필드유형설명

cniVersion

string

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

name

string

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

type

string

구성할 CNI 플러그인의 이름: host-device.

device

string

선택사항: 장치 이름(예: eth0 )입니다.

hwaddr

string

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

kernelpath

string

선택 사항: Linux 커널 장치 경로(예: /sys/devices/pci0000:00/0000:00:1f.6 )

pciBusID

string

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

21.3.3.2.1. 호스트 장치 구성 예

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

{
  "cniVersion": "0.3.1",
  "name": "hostdev-net",
  "type": "host-device",
  "device": "eth1"
}

21.3.3.3. VLAN 추가 네트워크에 대한 구성

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

표 21.5. VLAN CNI 플러그인 JSON 구성 오브젝트
필드유형설명

cniVersion

string

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

name

string

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

type

string

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

master

string

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

vlanId

integer

vlan의 ID를 설정합니다.

ipam

object

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

mtu

integer

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

dns

integer

선택 사항: 반환할 DNS 정보(예: 우선순위 지정 DNS 이름 서버 목록)입니다.

linkInContainer

boolean

선택 사항: 마스터 인터페이스가 컨테이너 네트워크 네임스페이스에 있는지 또는 기본 네트워크 네임스페이스에 있는지 여부를 지정합니다. 컨테이너 네임스페이스 마스터 인터페이스 사용을 요청하려면 값을 true 로 설정합니다.

21.3.3.3.1. VLAN 구성 예

다음 예제에서는 vlan-net 이라는 추가 네트워크를 구성합니다.

{
  "name": "vlan-net",
  "cniVersion": "0.3.1",
  "type": "vlan",
  "master": "eth0",
  "mtu": 1500,
  "vlanId": 5,
  "linkInContainer": false,
  "ipam": {
      "type": "host-local",
      "subnet": "10.1.1.0/24"
  },
  "dns": {
      "nameservers": [ "10.1.1.1", "8.8.8.8" ]
  }
}

21.3.3.4. ipvlan 추가 네트워크에 대한 구성

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

표 21.6. IPVLAN CNI 플러그인 JSON 구성 오브젝트
필드유형설명

cniVersion

string

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

name

string

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

type

string

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

ipam

object

IPAM CNI 플러그인의 구성 오브젝트입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다. 플러그인이 연결되어 있지 않으면 이 작업이 필요합니다.

mode

string

선택사항: 가상 네트워크의 작동 모드입니다. 값은 l2, l3 또는 l3s여야 합니다. 기본값은 l2입니다.

master

string

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

mtu

integer

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

linkInContainer

boolean

선택 사항: 마스터 인터페이스가 컨테이너 네트워크 네임스페이스에 있는지 또는 기본 네트워크 네임스페이스에 있는지 여부를 지정합니다. 컨테이너 네임스페이스 마스터 인터페이스 사용을 요청하려면 값을 true 로 설정합니다.

중요
  • ipvlan 오브젝트에서는 가상 인터페이스가 마스터 인터페이스와 통신할 수 없습니다. 따라서 컨테이너는 ipvlan 인터페이스를 사용하여 호스트에 연결할 수 없습니다. 컨테이너가PTP(Precision Time Protocol)를 지원하는 네트워크와 같이 호스트에 대한 연결을 제공하는 네트워크에 참여하고 있는지 확인합니다.
  • 단일 마스터 인터페이스는 macvlanipvlan 을 둘 다 사용하도록 동시에 구성할 수 없습니다.
  • 인터페이스와 무관할 수 없는 IP 할당 체계의 경우 ipvlan 플러그인은 이 논리를 처리하는 이전 플러그인과 연결할 수 있습니다. 마스터 를 생략한 경우 이전 결과에 슬레이브를 부여하려면 ipvlan 플러그인에 대한 단일 인터페이스 이름이 포함되어야 합니다. ipam 을 생략하면 이전 결과가 ipvlan 인터페이스를 구성하는 데 사용됩니다.
21.3.3.4.1. IPVLAN CNI 플러그인 구성 예

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

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

21.3.3.5. macvlan 추가 네트워크에 대한 구성

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

표 21.7. MACVLAN CNI 플러그인 JSON 구성 오브젝트
필드유형설명

cniVersion

string

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

name

string

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

type

string

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

ipam

object

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

mode

string

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

master

string

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

mtu

string

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

linkInContainer

boolean

선택 사항: 마스터 인터페이스가 컨테이너 네트워크 네임스페이스에 있는지 또는 기본 네트워크 네임스페이스에 있는지 여부를 지정합니다. 컨테이너 네임스페이스 마스터 인터페이스 사용을 요청하려면 값을 true 로 설정합니다.

참고

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

21.3.3.5.1. MACVLAN CNI 플러그인 구성 예

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

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

21.3.3.6. Cryostat 추가 네트워크에 대한 구성

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

표 21.8. Buildah CNI 플러그인 JSON 구성 오브젝트
필드유형설명

cniVersion

string

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

name

string

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

type

string

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

mac

string

선택 사항: 인터페이스에 지정된 MAC 주소를 요청합니다.

mtu

integer

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

selinuxcontext

string

선택 사항: 탭 장치와 연결할 SELinux 컨텍스트입니다.

참고

OpenShift Container Platform에는 system_u:system_r:container_t:s0 값이 필요합니다.

multiQueue

boolean

선택 사항: 다중 큐를 활성화하려면 true 로 설정합니다.

소유자

integer

선택 사항: 탭 장치를 소유한 사용자입니다.

group

integer

선택 사항: 탭 장치를 소유한 그룹입니다.

bridge

string

선택 사항: 탭 장치를 기존 브리지의 포트로 설정합니다.

21.3.3.6.1. 탭 구성 예

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

{
 "name": "mynet",
 "cniVersion": "0.3.1",
 "type": "tap",
 "mac": "00:11:22:33:44:55",
 "mtu": 1500,
 "selinuxcontext": "system_u:system_r:container_t:s0",
 "multiQueue": true,
 "owner": 0,
 "group": 0
 "bridge": "br1"
}
21.3.3.6.2. Cryostat CNI 플러그인에 대한 SELinux 부울 설정

container_t SELinux 컨텍스트를 사용하여 탭 장치를 생성하려면 MCO(Machine Config Operator)를 사용하여 호스트에서 container_use_devices 부울을 활성화합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. 다음 세부 정보를 사용하여 setsebool-container-use-devices.yaml 과 같은 새 YAML 파일을 생성합니다.

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 99-worker-setsebool
    spec:
      config:
        ignition:
          version: 3.2.0
        systemd:
          units:
          - enabled: true
            name: setsebool.service
            contents: |
              [Unit]
              Description=Set SELinux boolean for the TAP CNI plugin
              Before=kubelet.service
    
              [Service]
              Type=oneshot
              ExecStart=/usr/sbin/setsebool container_use_devices=on
              RemainAfterExit=true
    
              [Install]
              WantedBy=multi-user.target graphical.target
  2. 다음 명령을 실행하여 새 MachineConfig 오브젝트를 만듭니다.

    $ oc apply -f setsebool-container-use-devices.yaml
    참고

    MachineConfig 오브젝트에 변경 사항을 적용하면 변경 사항이 적용된 후 영향을 받는 모든 노드가 정상적으로 재부팅됩니다. 이 업데이트를 적용하는 데 시간이 다소 걸릴 수 있습니다.

  3. 다음 명령을 실행하여 변경 사항이 적용되었는지 확인합니다.

    $ oc get machineconfigpools

    예상 출력

    NAME        CONFIG                                                UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master      rendered-master-e5e0c8e8be9194e7c5a882e047379cfa      True      False      False      3              3                   3                     0                      7d2h
    worker      rendered-worker-d6c9ca107fba6cd76cdcbfcedcafa0f2      True      False      False      3              3                   3                     0                      7d

    참고

    모든 노드는 업데이트 및 준비 상태에 있어야 합니다.

추가 리소스

21.3.3.7. OVN-Kubernetes 추가 네트워크 구성

Red Hat OpenShift Networking OVN-Kubernetes 네트워크 플러그인을 사용하면 포드에 대한 보조 네트워크 인터페이스를 구성할 수 있습니다. 보조 네트워크 인터페이스를 구성하려면 NetworkAttachmentDefinition CR(사용자 정의 리소스)에서 구성을 정의해야 합니다.

참고

노드의 OVN-Kubernetes 컨트롤 플레인 에이전트가 연결된 network-attachment-definition CR을 처리할 때까지 Pod 및 다중 네트워크 정책 생성은 보류 중 상태로 유지될 수 있습니다.

계층 2 또는 localnet 토폴로지에서 OVN-Kubernetes 추가 네트워크를 구성할 수 있습니다.

  • 계층 2 토폴로지는 east-west 클러스터 트래픽을 지원하지만 기본 물리적 네트워크에 대한 액세스를 허용하지는 않습니다.
  • 로컬 네트워크 토폴로지는 물리적 네트워크에 연결할 수 있지만 클러스터 노드에서 기본 OVS(Open vSwitch) 브릿지를 추가로 구성해야 합니다.

다음 섹션에서는 현재 OVN-Kubernetes에서 보조 네트워크에서 허용하는 각 토폴로지에 대한 예제 구성을 제공합니다.

참고

네트워크 이름은 고유해야 합니다. 예를 들어 동일한 네트워크를 참조하는 다양한 구성으로 여러 NetworkAttachmentDefinition CR을 생성하는 것은 지원되지 않습니다.

21.3.3.7.1. OVN-Kubernetes 추가 네트워크에서 지원되는 플랫폼

지원되는 플랫폼에서 OVN-Kubernetes 추가 네트워크를 사용할 수 있습니다.

  • 베어 메탈
  • IBM Power®
  • IBM Z®
  • IBM® LinuxONE
  • VMware vSphere
  • Red Hat OpenStack Platform (RHOSP)
21.3.3.7.2. OVN-Kubernetes 네트워크 플러그인 JSON 구성 테이블

다음 표에서는 OVN-Kubernetes CNI 네트워크 플러그인의 구성 매개변수를 설명합니다.

표 21.9. OVN-Kubernetes 네트워크 플러그인 JSON 구성 테이블
필드유형설명

cniVersion

string

CNI 사양 버전입니다. 필수 값은 0.3.1 입니다.

name

string

네트워크의 이름입니다. 이러한 네트워크는 네임스페이스가 지정되지 않습니다. 예를 들어 두 개의 다른 네임스페이스에 존재하는 두 개의 다른 NetworkAttachmentDefinitions 에서 참조되는 l2-network 라는 네트워크를 사용할 수 있습니다. 이렇게 하면 다른 네임스페이스에서 NetworkAttachmentDefinition 을 사용하는 Pod가 동일한 보조 네트워크를 통해 통신할 수 있습니다. 그러나 이러한 두 다른 NetworkAttachmentDefinitions토폴로지,서브넷,mtu, excludeSubnets 와 같은 동일한 네트워크 관련 매개변수도 공유해야 합니다.

type

string

구성할 CNI 플러그인의 이름입니다. 이 값은 ovn-k8s-cni-overlay 로 설정해야 합니다.

토폴로지

string

네트워크의 토폴로지 구성입니다. layer2 또는 localnet 중 하나여야 합니다.

subnets

string

클러스터 전체에서 네트워크에 사용할 서브넷입니다.

"topology":"layer2" 배포의 경우 IPv6 (2001:DBB::/64) 및 듀얼 스택 (192.168.100.0/24,2001:DBB::/64) 서브넷이 지원됩니다.

생략하면 네트워크를 구현하는 논리 스위치는 계층 2 통신만 제공하며 사용자는 Pod의 IP 주소를 구성해야 합니다. 포트 보안은 MAC 스푸핑만 방지합니다.

mtu

string

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

netAttachDefName

string

이 구성이 포함된 네트워크 연결 정의 오브젝트의 메타데이터 네임스페이스이름입니다. 예를 들어 이 구성이 l2-network 라는 네임스페이스 ns1NetworkAttachmentDefinition 에 정의된 경우 ns1/l2-network 로 설정해야 합니다.

excludeSubnets

string

쉼표로 구분된 CIDR 및 IP 주소 목록입니다. IP 주소는 할당 가능한 IP 주소 풀에서 제거되며 Pod에 전달되지 않습니다.

vlanID

integer

토폴로지가 localnet 으로 설정되면 지정된 VLAN 태그가 이 추가 네트워크의 트래픽에 할당됩니다. 기본값은 VLAN 태그를 할당하지 않는 것입니다.

21.3.3.7.3. 다중 네트워크 정책과의 호환성

k8s.cni.cncf.io API 그룹의 MultiNetworkPolicy CRD(사용자 정의 리소스 정의)에서 제공하는 다중 네트워크 정책 API는 OVN-Kubernetes 보조 네트워크와 호환됩니다. 네트워크 정책을 정의할 때 OVN-Kubernetes 보조 네트워크가 subnets 필드를 정의하는지 여부에 따라 사용할 수 있는 네트워크 정책 규칙입니다. 자세한 내용은 다음 표를 참조하십시오.

표 21.10. 서브넷 CNI 구성을 기반으로 지원되는 다중 네트워크 정책 선택기
subnets 필드 지정허용된 다중 네트워크 정책 선택기

제공됨

  • podSelectornamespaceSelector
  • ipBlock

없음

  • ipBlock

예를 들어 다음 다중 네트워크 정책은 subnets 필드가 blue2 라는 추가 네트워크의 추가 네트워크 CNI 구성에 정의된 경우에만 유효합니다.

Pod 선택기를 사용하는 다중 네트워크 정책의 예

apiVersion: k8s.cni.cncf.io/v1beta1
kind: MultiNetworkPolicy
metadata:
  name: allow-same-namespace
  annotations:
    k8s.v1.cni.cncf.io/policy-for: blue2
spec:
  podSelector:
  ingress:
  - from:
    - podSelector: {}

다음 예제에서는 OVN-Kubernetes 추가 네트워크에 항상 유효한 ipBlock 네트워크 정책 선택기를 사용합니다.

IP 블록 선택기를 사용하는 다중 네트워크 정책의 예

apiVersion: k8s.cni.cncf.io/v1beta1
kind: MultiNetworkPolicy
metadata:
  name:  ingress-ipblock
  annotations:
    k8s.v1.cni.cncf.io/policy-for: default/flatl2net
spec:
  podSelector:
    matchLabels:
      name: access-control
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 10.200.0.0/30

21.3.3.7.4. 계층 2 전환 토폴로지 구성

전환(계층 2) 토폴로지 네트워크는 클러스터 전체 논리 스위치를 통해 워크로드를 상호 연결합니다. 이 구성은 IPv6 및 듀얼 스택 배포에 사용할 수 있습니다.

참고

계층 2 전환 토폴로지 네트워크는 클러스터 내의 Pod 간 데이터 패킷 전송만 허용합니다.

다음 JSON 예제에서는 전환된 보조 네트워크를 구성합니다.

{
  "cniVersion": "0.3.1",
  "name": "l2-network",
  "type": "ovn-k8s-cni-overlay",
  "topology":"layer2",
  "subnets": "10.100.200.0/24",
  "mtu": 1300,
  "netAttachDefName": "ns1/l2-network",
  "excludeSubnets": "10.100.200.0/29"
}
21.3.3.7.5. localnet 토폴로지 구성

전환된 localnet 토폴로지는 클러스터 전체 논리 스위치를 물리적 네트워크에 통해 VNC(Network Attachment Definitions)로 생성된 워크로드를 상호 연결합니다.

21.3.3.7.5.1. OVN-Kubernetes 추가 네트워크 구성을 위한 사전 요구 사항
21.3.3.7.5.2. OVN-Kubernetes 추가 네트워크 매핑 구성

추가 네트워크를 OVN-Kubernetes 추가 네트워크로 사용하려면 추가 네트워크를 OVN 브리지에 매핑해야 합니다. 브리지 매핑을 사용하면 네트워크 트래픽이 물리적 네트워크에 도달할 수 있습니다. 브리지 매핑은 인터페이스 레이블이라고도 하는 물리적 네트워크 이름을 OVS(Open vSwitch)로 생성된 브릿지에 연결합니다.

nmstate.io/v1 API 그룹의 일부인 NodeNetworkConfigurationPolicy 오브젝트를 생성하여 매핑을 선언적으로 생성할 수 있습니다. 이 API는 NMState Operator에서 제공합니다. 이 API를 사용하면 node-role.kubernetes.io/worker: '' 과 같이 지정된 nodeSelector 표현식과 일치하는 노드에 브리지 매핑을 적용할 수 있습니다.

추가 네트워크를 연결할 때 기존 br-ex 브리지를 사용하거나 새 브리지를 만들 수 있습니다. 사용할 방법은 특정 네트워크 인프라에 따라 다릅니다.

  • 노드에 단일 네트워크 인터페이스만 포함된 경우 기존 브릿지를 사용해야 합니다. 이 네트워크 인터페이스는 OVN-Kubernetes에서 소유하고 관리하며 br-ex 브리지에서 제거하거나 인터페이스 구성을 변경할 수 없습니다. 네트워크 인터페이스를 제거하거나 변경하면 클러스터 네트워크가 제대로 작동하지 않습니다.
  • 노드에 여러 네트워크 인터페이스가 포함된 경우 다른 네트워크 인터페이스를 새 브리지에 연결하고 추가 네트워크에 이를 사용할 수 있습니다. 이 방법을 사용하면 기본 클러스터 네트워크와 트래픽을 격리할 수 있습니다.

localnet1 네트워크는 다음 예제에서 br-ex 브릿지에 매핑됩니다.

브리지 공유를 위한 매핑 예

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: mapping 1
spec:
  nodeSelector:
    node-role.kubernetes.io/worker: '' 2
  desiredState:
    ovn:
      bridge-mappings:
      - localnet: localnet1 3
        bridge: br-ex 4
        state: present 5

1
구성 오브젝트의 이름입니다.
2
노드 네트워크 구성 정책을 적용할 노드를 지정하는 노드 선택기입니다.
3
트래픽이 OVS 브리지로 전달되는 추가 네트워크의 이름입니다. 이 추가 네트워크는 OVN-Kubernetes 추가 네트워크를 정의하는 NetworkAttachmentDefinition 오브젝트의 spec.config.name 필드 이름과 일치해야 합니다.
4
노드의 OVS 브리지 이름입니다. 이 값은 state: present 를 지정하는 경우에만 필요합니다.
5
매핑의 상태입니다. 브릿지를 추가하려면 이 브릿지가 존재 하거나 absent 여야 합니다. 기본값은 present 입니다.

다음 예에서 localnet2 네트워크 인터페이스는 ovs-br1 브리지에 연결됩니다. 이 연결을 통해 OVN-Kubernetes 네트워크 플러그인에서 추가 네트워크로 네트워크 인터페이스를 사용할 수 있습니다.

여러 인터페이스가 있는 노드의 매핑 예

apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
  name: ovs-br1-multiple-networks 1
spec:
  nodeSelector:
    node-role.kubernetes.io/worker: '' 2
  desiredState:
    interfaces:
    - name: ovs-br1 3
      description: |-
        A dedicated OVS bridge with eth1 as a port
        allowing all VLANs and untagged traffic
      type: ovs-bridge
      state: up
      bridge:
        allow-extra-patch-ports: true
        options:
          stp: false
        port:
        - name: eth1 4
    ovn:
      bridge-mappings:
      - localnet: localnet2 5
        bridge: ovs-br1 6
        state: present 7

1
구성 오브젝트의 이름입니다.
2
노드 네트워크 구성 정책을 적용할 노드를 지정하는 노드 선택기입니다.
3
모든 클러스터 트래픽에 OVN-Kubernetes에서 사용하는 기본 브릿지와 별도의 새 OVS 브리지입니다.
4
이 새 OVS 브리지와 연결할 호스트 시스템의 네트워크 장치입니다.
5
트래픽이 OVS 브리지로 전달되는 추가 네트워크의 이름입니다. 이 추가 네트워크는 OVN-Kubernetes 추가 네트워크를 정의하는 NetworkAttachmentDefinition 오브젝트의 spec.config.name 필드 이름과 일치해야 합니다.
6
노드의 OVS 브리지 이름입니다. 이 값은 state: present 를 지정하는 경우에만 필요합니다.
7
매핑의 상태입니다. 브릿지를 추가하려면 이 브릿지가 존재 하거나 absent 여야 합니다. 기본값은 present 입니다.

NMState Operator는 노드 선택기에서 지정한 모든 노드에 및 투명하게 추가 네트워크 구성을 적용하기 때문에 이 선언적 접근 방식을 사용하는 것이 좋습니다.

다음 JSON 예제에서는 localnet 보조 네트워크를 구성합니다.

{
  "cniVersion": "0.3.1",
  "name": "ns1-localnet-network",
  "type": "ovn-k8s-cni-overlay",
  "topology":"localnet",
  "subnets": "202.10.130.112/28",
  "vlanID": 33,
  "mtu": 1500,
  "netAttachDefName": "ns1/localnet-network"
  "excludeSubnets": "10.100.200.0/29"
}
21.3.3.7.6. 추가 네트워크에 대한 Pod 구성

k8s.v1.cni.cncf.io/networks 주석을 통해 보조 네트워크 연결을 지정해야 합니다.

다음 예제에서는 이 가이드에 표시된 각 연결 구성에 대해 하나씩 두 개의 보조 첨부 파일로 Pod를 프로비저닝합니다.

apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.v1.cni.cncf.io/networks: l2-network
  name: tinypod
  namespace: ns1
spec:
  containers:
  - args:
    - pause
    image: k8s.gcr.io/e2e-test-images/agnhost:2.36
    imagePullPolicy: IfNotPresent
    name: agnhost-container
21.3.3.7.7. 고정 IP 주소를 사용하여 Pod 구성

다음 예제에서는 고정 IP 주소를 사용하여 Pod를 프로비저닝합니다.

참고
  • 계층 2 연결에 대한 Pod의 보조 네트워크 연결의 IP 주소만 지정할 수 있습니다.
  • pod의 고정 IP 주소를 지정하는 것은 연결 구성에 서브넷이 적용되지 않는 경우에만 가능합니다.
apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.v1.cni.cncf.io/networks: '[
      {
        "name": "l2-network", 1
        "mac": "02:03:04:05:06:07", 2
        "interface": "myiface1", 3
        "ips": [
          "192.0.2.20/24"
          ] 4
      }
    ]'
  name: tinypod
  namespace: ns1
spec:
  containers:
  - args:
    - pause
    image: k8s.gcr.io/e2e-test-images/agnhost:2.36
    imagePullPolicy: IfNotPresent
    name: agnhost-container
1
네트워크의 이름입니다. 이 값은 모든 NetworkAttachmentDefinitions 에서 고유해야 합니다.
2
인터페이스에 할당할 MAC 주소입니다.
3
Pod에 생성할 네트워크 인터페이스의 이름입니다.
4
네트워크 인터페이스에 할당할 IP 주소입니다.

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

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

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

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

21.3.4.1. 고정 IP 주소 할당 구성

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

표 21.11. IPAM 고정 구성 오브젝트
필드유형설명

type

string

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

주소

array

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

routes

array

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

dns

array

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

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

표 21.12. IPAM.addresses[] 배열
필드유형설명

address

string

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

gateway

string

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

표 21.13. ipam.routes[] array
필드유형설명

dst

string

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

GW

string

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

표 21.14. IPAM.dns 오브젝트
필드유형설명

네임서버

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"
        }
      ]
  }
}

21.3.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"
        }
      }
  # ...

표 21.15. IPAM DHCP 구성 오브젝트
필드유형설명

type

string

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

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

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

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

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

Whereabouts CNI 플러그인은 별도의 NetworkAttachmentDefinitions 내에서 동일한 CIDR 범위의 중복 IP 주소 범위 및 구성을 여러 번 지원합니다. 이를 통해 멀티 테넌트 환경에서 유연성 및 관리 기능이 향상됩니다.

21.3.4.3.1. 동적 IP 주소 구성 오브젝트

다음 표에서는 Whereabouts를 사용하여 동적 IP 주소 할당을 위한 구성 오브젝트를 설명합니다.

표 21.16. IPAM 위치 설정 오브젝트
필드유형설명

type

string

IPAM 주소 유형입니다. 여기서about s 값이 필요합니다.

range

string

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

exclude

array

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

network_name

string

선택 사항: Pod의 각 그룹 또는 도메인이 동일한 IP 주소 범위를 공유하는 경우에도 자체 IP 주소 집합을 갖도록 합니다. 이 필드를 설정하는 것은 특히 다중 테넌트 환경에서 네트워크를 분리하고 정리하는 데 중요합니다.

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

다음 예제에서는 Whereabouts를 사용하는 동적 주소 할당 구성을 보여줍니다.

Whereabouts dynamic IP address assignment

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

21.3.4.3.3. IP 주소 범위가 겹치는 Whereabouts를 사용하는 동적 IP 주소 할당

다음 예제에서는 다중 테넌트 네트워크에 겹치는 IP 주소 범위를 사용하는 동적 IP 주소 할당을 보여줍니다.

NetworkAttachmentDefinition 1

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/29",
    "network_name": "example_net_common", 1
  }
}

1
선택 사항: 설정된 경우 NetworkAttachmentDefinition 2의 network_name 과 일치해야 합니다.

NetworkAttachmentDefinition 2

{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/24",
    "network_name": "example_net_common", 1
  }
}

1
선택 사항: 설정된 경우 NetworkAttachmentDefinition 1의 network_name 과 일치해야 합니다.

21.3.4.4. Whereabouts-reconciler 데몬 세트 생성

Whereabouts 조정기는 Whereabouts IP Address Management(IPAM) 솔루션을 사용하여 클러스터 내에서 Pod의 동적 IP 주소 할당을 관리합니다. 이렇게 하면 각 pod가 지정된 IP 주소 범위에서 고유한 IP 주소를 가져옵니다. Pod가 삭제되거나 축소될 때 IP 주소 릴리스도 처리합니다.

참고

NetworkAttachmentDefinition CR(사용자 정의 리소스)을 동적 IP 주소 할당에 사용할 수도 있습니다.

Cluster Network Operator를 통해 추가 네트워크를 구성할 때 whereabouts-reconciler 데몬 세트가 자동으로 생성됩니다. YAML 매니페스트에서 추가 네트워크를 구성할 때 자동으로 생성되지 않습니다.

whereabouts-reconciler 데몬 세트의 배포를 트리거하려면 Cluster Network Operator CR(사용자 정의 리소스) 파일을 편집하여 whereabouts-shim 네트워크 연결을 수동으로 생성해야 합니다.

다음 절차에 따라 whereabouts-reconciler 데몬 세트를 배포합니다.

프로세스

  1. 다음 명령을 실행하여 Network.operator.openshift.io CR(사용자 정의 리소스)을 편집합니다.

    $ oc edit network.operator.openshift.io cluster
  2. 이 예제 YAML 추출에 표시된 additionalNetworks 섹션을 CR(사용자 정의 리소스)의 사양 정의 내에 포함합니다.

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    # ...
    spec:
      additionalNetworks:
      - name: whereabouts-shim
        namespace: default
        rawCNIConfig: |-
          {
           "name": "whereabouts-shim",
           "cniVersion": "0.3.1",
           "type": "bridge",
           "ipam": {
             "type": "whereabouts"
           }
          }
        type: Raw
    # ...
  3. 파일을 저장하고 텍스트 편집기를 종료합니다.
  4. 다음 명령을 실행하여 whereabouts-reconciler 데몬 세트가 성공적으로 배포되었는지 확인합니다.

    $ oc get all -n openshift-multus | grep whereabouts-reconciler

    출력 예

    pod/whereabouts-reconciler-jnp6g 1/1 Running 0 6s
    pod/whereabouts-reconciler-k76gg 1/1 Running 0 6s
    pod/whereabouts-reconciler-k86t9 1/1 Running 0 6s
    pod/whereabouts-reconciler-p4sxw 1/1 Running 0 6s
    pod/whereabouts-reconciler-rvfdv 1/1 Running 0 6s
    pod/whereabouts-reconciler-svzw9 1/1 Running 0 6s
    daemonset.apps/whereabouts-reconciler 6 6 6 6 6 kubernetes.io/os=linux 6s

21.3.4.5. Whereabouts IP 조정기 일정 구성

Whereabouts IPAM CNI 플러그인은 IP 조정기를 매일 실행합니다. 이 프로세스에서는 IP가 소진될 수 있는 모든 진행 중인 IP 할당을 정리하므로 새 Pod가 IP를 할당하지 못하도록 합니다.

IP 조정기가 실행되는 빈도를 변경하려면 다음 절차를 사용하십시오.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • whereabouts-reconciler 데몬 세트를 배포하고 whereabouts-reconciler Pod가 실행 중입니다.

프로세스

  1. 다음 명령을 실행하여 openshift-multus 네임스페이스에 IP 조정기에 대한 특정 cron 표현식을 사용하여 이름이 whereabouts-config 라는 ConfigMap 오브젝트를 생성합니다.

    $ oc create configmap whereabouts-config -n openshift-multus --from-literal=reconciler_cron_expression="*/15 * * * *"

    이 cron 표현식은 IP 조정기가 15분마다 실행됨을 나타냅니다. 특정 요구 사항에 따라 표현식을 조정합니다.

    참고

    whereabouts-reconciler 데몬 세트는 5개의 별표를 포함하는 cron 표현식 패턴만 사용할 수 있습니다. 초를 나타내는 데 사용되는 여섯 번째 단계는 현재 지원되지 않습니다.

  2. 다음 명령을 실행하여 openshift-multus 네임스페이스 내에서 whereabouts-reconciler 데몬 세트 및 Pod와 관련된 리소스에 대한 정보를 검색합니다.

    $ oc get all -n openshift-multus | grep whereabouts-reconciler

    출력 예

    pod/whereabouts-reconciler-2p7hw                   1/1     Running   0             4m14s
    pod/whereabouts-reconciler-76jk7                   1/1     Running   0             4m14s
    pod/whereabouts-reconciler-94zw6                   1/1     Running   0             4m14s
    pod/whereabouts-reconciler-mfh68                   1/1     Running   0             4m14s
    pod/whereabouts-reconciler-pgshz                   1/1     Running   0             4m14s
    pod/whereabouts-reconciler-xn5xz                   1/1     Running   0             4m14s
    daemonset.apps/whereabouts-reconciler          6         6         6       6            6           kubernetes.io/os=linux   4m16s

  3. 다음 명령을 실행하여 whereabouts-reconciler Pod가 구성된 간격으로 IP 조정기를 실행하는지 확인합니다.

    $ oc -n openshift-multus logs whereabouts-reconciler-2p7hw

    출력 예

    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..2024_02_02_16_33_54.1375928161": CREATE
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..2024_02_02_16_33_54.1375928161": CHMOD
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..data_tmp": RENAME
    2024-02-02T16:33:54Z [verbose] using expression: */15 * * * *
    2024-02-02T16:33:54Z [verbose] configuration updated to file "/cron-schedule/..data". New cron expression: */15 * * * *
    2024-02-02T16:33:54Z [verbose] successfully updated CRON configuration id "00c2d1c9-631d-403f-bb86-73ad104a6817" - new cron expression: */15 * * * *
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/config": CREATE
    2024-02-02T16:33:54Z [debug] event not relevant: "/cron-schedule/..2024_02_02_16_26_17.3874177937": REMOVE
    2024-02-02T16:45:00Z [verbose] starting reconciler run
    2024-02-02T16:45:00Z [debug] NewReconcileLooper - inferred connection data
    2024-02-02T16:45:00Z [debug] listing IP pools
    2024-02-02T16:45:00Z [debug] no IP addresses to cleanup
    2024-02-02T16:45:00Z [verbose] reconciler success

21.3.4.6. 동적으로 듀얼 스택 IP 주소 할당을 위한 구성 생성

듀얼 스택 IP 주소 할당은 다음과 같은 ipRanges 매개변수를 사용하여 구성할 수 있습니다.

  • IPv4 주소
  • IPv6 주소
  • 여러 IP 주소 할당

프로세스

  1. type 을 whereabouts로 설정합니다.
  2. 다음 예와 같이 ipRanges 를 사용하여 IP 주소를 할당합니다.

    cniVersion: operator.openshift.io/v1
    kind: Network
    =metadata:
      name: cluster
    spec:
      additionalNetworks:
      - name: whereabouts-shim
        namespace: default
        type: Raw
        rawCNIConfig: |-
          {
           "name": "whereabouts-dual-stack",
           "cniVersion": "0.3.1,
           "type": "bridge",
           "ipam": {
             "type": "whereabouts",
             "ipRanges": [
                      {"range": "192.168.10.0/24"},
                      {"range": "2001:db8::/64"}
                  ]
           }
          }
  3. Pod에 네트워크를 연결합니다. 자세한 내용은 "추가 네트워크에 Pod 추가"를 참조하십시오.
  4. 모든 IP 주소가 할당되었는지 확인합니다.
  5. 다음 명령을 실행하여 IP 주소가 메타데이터로 할당되었는지 확인합니다.

    $ oc exec -it mypod -- ip a

21.3.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

21.3.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 매니페스트가 포함된 파일의 이름을 지정합니다.

21.3.7. 컨테이너 네트워크 네임스페이스에서 마스터 인터페이스 구성 정보

OpenShift Container Platform 4.14 이상에서는 사용자가 컨테이너 네임스페이스의 마스터 인터페이스를 기반으로 하는 MAC-VLAN, IP-VLAN 및 VLAN 하위 인터페이스를 생성할 수 있는 기능을 일반적으로 사용할 수 있습니다.

이 기능을 사용하면 별도의 네트워크 연결 정의에서 Pod 네트워크 구성의 일부로 마스터 인터페이스를 생성할 수 있습니다. 그런 다음 노드의 네트워크 구성에 대한 지식이 없어도 이 인터페이스에서 VLAN, MACVLAN 또는 IPVLAN을 기반으로 할 수 있습니다.

컨테이너 네임스페이스 마스터 인터페이스를 사용하려면 특정 유형의 추가 네트워크에 따라 linkInContainer 를 지정하고 VLAN, MACVLAN 또는 IPVLAN 플러그인 구성에서 value를 true 로 설정합니다.

21.3.7.1. SR-IOV VF에서 여러 VLAN 생성

이 기능을 사용하는 예제 사용 사례는 SR-IOV VF를 기반으로 여러 VLAN을 생성하는 것입니다. 이렇게 하려면 SR-IOV 네트워크를 생성한 다음 VLAN 인터페이스에 대한 네트워크 연결을 정의하는 것으로 시작합니다.

다음 예제에서는 이 다이어그램에 설명된 설정을 구성하는 방법을 보여줍니다.

그림 21.1. VLAN 생성

VLAN 생성

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • SR-IOV Network Operator가 설치되어 있습니다.

프로세스

  1. 다음 명령을 사용하여 Pod를 배포하려는 전용 컨테이너 네임스페이스를 생성합니다.

    $ oc new-project test-namespace
  2. SR-IOV 노드 정책을 생성합니다.

    1. SriovNetworkNodePolicy 오브젝트를 생성한 다음 YAML을 sriov-node-network-policy.yaml 파일에 저장합니다.

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
       name: sriovnic
       namespace: openshift-sriov-network-operator
      spec:
       deviceType: netdevice
       isRdma: false
       needVhostNet: true
       nicSelector:
         vendor: "15b3" 1
         deviceID: "101b" 2
         rootDevices: ["00:05.0"]
       numVfs: 10
       priority: 99
       resourceName: sriovnic
       nodeSelector:
          feature.node.kubernetes.io/network-sriov.capable: "true"
      참고

      deviceType: netdevice 설정을 사용하는 SR-IOV 네트워크 노드 정책 구성 예제는 Mellanox Network Interface Cards(NIC)에 맞게 조정됩니다.

      1
      SR-IOV 네트워크 장치의 벤더 16진수 코드입니다. 값 15b3 은 Mellanox NIC와 연결되어 있습니다.
      2
      SR-IOV 네트워크 장치의 장치 16진수 코드입니다.
    2. 다음 명령을 실행하여 YAML을 적용합니다.

      $ oc apply -f sriov-node-network-policy.yaml
      참고

      노드를 재부팅해야 하므로 이를 적용하는 데 다소 시간이 걸릴 수 있습니다.

  3. SR-IOV 네트워크를 생성합니다.

    1. 다음 예제 CR과 같이 추가 SR-IOV 네트워크 연결에 대한 SriovNetwork CR(사용자 정의 리소스)을 생성합니다. YAML을 sriov-network-attachment.yaml 파일로 저장합니다.

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
       name: sriov-network
       namespace: openshift-sriov-network-operator
      spec:
       networkNamespace: test-namespace
       resourceName: sriovnic
       spoofChk: "off"
       trust: "on"
    2. 다음 명령을 실행하여 YAML을 적용합니다.

      $ oc apply -f sriov-network-attachment.yaml
  4. VLAN 추가 네트워크를 생성합니다.

    1. 다음 YAML 예제를 사용하여 vlan100-additional-network-configuration.yaml 이라는 파일을 만듭니다.

      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: vlan-100
        namespace: test-namespace
      spec:
        config: |
          {
            "cniVersion": "0.4.0",
            "name": "vlan-100",
            "plugins": [
              {
                "type": "vlan",
                "master": "ext0", 1
                "mtu": 1500,
                "vlanId": 100,
                "linkInContainer": true, 2
                "ipam": {"type": "whereabouts", "ipRanges": [{"range": "1.1.1.0/24"}]}
              }
            ]
          }
      1
      VLAN 구성은 마스터 이름을 지정해야 합니다. Pod 네트워크 주석에서 구성할 수 있습니다.
      2
      linkInContainer 매개변수를 지정해야 합니다.
    2. 다음 명령을 실행하여 YAML 파일을 적용합니다.

      $ oc apply -f vlan100-additional-network-configuration.yaml
  5. 이전 지정된 네트워크를 사용하여 포드 정의를 생성합니다.

    1. 다음 YAML 예제를 사용하여 pod-a.yaml 파일이라는 파일을 생성합니다.

      참고

      아래 매니페스트에는 다음 두 가지 리소스가 포함됩니다.

      • 보안 레이블이 있는 네임스페이스
      • 적절한 네트워크 주석이 있는 Pod 정의
      apiVersion: v1
      kind: Namespace
      metadata:
        name: test-namespace
        labels:
          pod-security.kubernetes.io/enforce: privileged
          pod-security.kubernetes.io/audit: privileged
          pod-security.kubernetes.io/warn: privileged
          security.openshift.io/scc.podSecurityLabelSync: "false"
      ---
      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx-pod
        namespace: test-namespace
        annotations:
          k8s.v1.cni.cncf.io/networks: '[
            {
              "name": "sriov-network",
              "namespace": "test-namespace",
              "interface": "ext0" 1
            },
            {
              "name": "vlan-100",
              "namespace": "test-namespace",
              "interface": "ext0.100"
            }
          ]'
      spec:
        securityContext:
          runAsNonRoot: true
        containers:
          - name: nginx-container
            image: nginxinc/nginx-unprivileged:latest
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop: ["ALL"]
            ports:
              - containerPort: 80
            seccompProfile:
              type: "RuntimeDefault"
      1
      VLAN 인터페이스의 마스터로 사용할 이름입니다.
    2. 다음 명령을 실행하여 YAML 파일을 적용합니다.

      $ oc apply -f pod-a.yaml
  6. 다음 명령을 실행하여 test-namespace 내에서 nginx-pod 에 대한 자세한 정보를 가져옵니다.

    $ oc describe pods nginx-pod -n test-namespace

    출력 예

    Name:         nginx-pod
    Namespace:    test-namespace
    Priority:     0
    Node:         worker-1/10.46.186.105
    Start Time:   Mon, 14 Aug 2023 16:23:13 -0400
    Labels:       <none>
    Annotations:  k8s.ovn.org/pod-networks:
                    {"default":{"ip_addresses":["10.131.0.26/23"],"mac_address":"0a:58:0a:83:00:1a","gateway_ips":["10.131.0.1"],"routes":[{"dest":"10.128.0.0...
                  k8s.v1.cni.cncf.io/network-status:
                    [{
                        "name": "ovn-kubernetes",
                        "interface": "eth0",
                        "ips": [
                            "10.131.0.26"
                        ],
                        "mac": "0a:58:0a:83:00:1a",
                        "default": true,
                        "dns": {}
                    },{
                        "name": "test-namespace/sriov-network",
                        "interface": "ext0",
                        "mac": "6e:a7:5e:3f:49:1b",
                        "dns": {},
                        "device-info": {
                            "type": "pci",
                            "version": "1.0.0",
                            "pci": {
                                "pci-address": "0000:d8:00.2"
                            }
                        }
                    },{
                        "name": "test-namespace/vlan-100",
                        "interface": "ext0.100",
                        "ips": [
                            "1.1.1.1"
                        ],
                        "mac": "6e:a7:5e:3f:49:1b",
                        "dns": {}
                    }]
                  k8s.v1.cni.cncf.io/networks:
                    [ { "name": "sriov-network", "namespace": "test-namespace", "interface": "ext0" }, { "name": "vlan-100", "namespace": "test-namespace", "i...
                  openshift.io/scc: privileged
    Status:       Running
    IP:           10.131.0.26
    IPs:
      IP:  10.131.0.26

21.3.7.2. 컨테이너 네임스페이스에서 브릿지 마스터 인터페이스를 기반으로 하위 인터페이스 생성

하위 인터페이스 생성은 다른 유형의 인터페이스에 적용할 수 있습니다. 컨테이너 네임스페이스의 브리지 마스터 인터페이스를 기반으로 하위 인터페이스를 생성하려면 다음 절차를 따르십시오.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 OpenShift Container Platform 클러스터에 로그인되어 있습니다.

프로세스

  1. 다음 명령을 실행하여 Pod를 배포하려는 전용 컨테이너 네임스페이스를 생성합니다.

    $ oc new-project test-namespace
  2. 다음 YAML 예제를 사용하여 bridge-nad.yaml 이라는 브릿지 NetworkAttachmentDefinition CR(사용자 정의 리소스) 파일을 생성합니다.

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: bridge-network
    spec:
      config: '{
        "cniVersion": "0.4.0",
        "name": "bridge-network",
        "type": "bridge",
        "bridge": "br-001",
        "isGateway": true,
        "ipMasq": true,
        "hairpinMode": true,
        "ipam": {
          "type": "host-local",
          "subnet": "10.0.0.0/24",
          "routes": [{"dst": "0.0.0.0/0"}]
        }
      }'
  3. 다음 명령을 실행하여 NetworkAttachmentDefinition CR을 OpenShift Container Platform 클러스터에 적용합니다.

    $ oc apply -f bridge-nad.yaml
  4. 다음 명령을 실행하여 NetworkAttachmentDefinition CR이 성공적으로 생성되었는지 확인합니다.

    $ oc get network-attachment-definitions

    출력 예

    NAME             AGE
    bridge-network   15s

  5. 다음 YAML 예제를 사용하여 IPVLAN 추가 네트워크 구성에 사용할 ipvlan-additional-network-configuration.yaml 이라는 파일을 생성합니다.

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: ipvlan-net
      namespace: test-namespace
    spec:
      config: '{
        "cniVersion": "0.3.1",
        "name": "ipvlan-net",
        "type": "ipvlan",
        "master": "ext0", 1
        "mode": "l3",
        "linkInContainer": true, 2
        "ipam": {"type": "whereabouts", "ipRanges": [{"range": "10.0.0.0/24"}]}
      }'
    1
    네트워크 연결과 연결할 이더넷 인터페이스를 지정합니다. 나중에 Pod 네트워크 주석에 구성됩니다.
    2
    마스터 인터페이스가 컨테이너 네트워크 네임스페이스에 있음을 지정합니다.
  6. 다음 명령을 실행하여 YAML 파일을 적용합니다.

    $ oc apply -f ipvlan-additional-network-configuration.yaml
  7. 다음 명령을 실행하여 NetworkAttachmentDefinition CR이 성공적으로 생성되었는지 확인합니다.

    $ oc get network-attachment-definitions

    출력 예

    NAME             AGE
    bridge-network   87s
    ipvlan-net       9s

  8. 다음 YAML 예제를 사용하여 Pod 정의에 사용할 pod-a.yaml 이라는 파일을 생성합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-a
      namespace: test-namespace
      annotations:
        k8s.v1.cni.cncf.io/networks: '[
          {
            "name": "bridge-network",
            "interface": "ext0" 1
          },
          {
            "name": "ipvlan-net",
            "interface": "ext1"
          }
        ]'
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
      - name: test-pod
        image: quay.io/openshifttest/hello-sdn@sha256:c89445416459e7adea9a5a416b3365ed3d74f2491beb904d61dc8d1eb89a72a4
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: [ALL]
    1
    IPVLAN 인터페이스의 마스터로 사용할 이름을 지정합니다.
  9. 다음 명령을 실행하여 YAML 파일을 적용합니다.

    $ oc apply -f pod-a.yaml
  10. 다음 명령을 사용하여 Pod가 실행 중인지 확인합니다.

    $ oc get pod -n test-namespace

    출력 예

    NAME    READY   STATUS    RESTARTS   AGE
    pod-a   1/1     Running   0          2m36s

  11. 다음 명령을 실행하여 test-namespace 내에서 pod-a 리소스에 대한 네트워크 인터페이스 정보를 표시합니다.

    $ oc exec -n test-namespace pod-a -- ip a

    출력 예

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    3: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UP group default
        link/ether 0a:58:0a:d9:00:5d brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 10.217.0.93/23 brd 10.217.1.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::488b:91ff:fe84:a94b/64 scope link
           valid_lft forever preferred_lft forever
    4: ext0@if107: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
        link/ether be:da:bd:7e:f4:37 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 10.0.0.2/24 brd 10.0.0.255 scope global ext0
           valid_lft forever preferred_lft forever
        inet6 fe80::bcda:bdff:fe7e:f437/64 scope link
           valid_lft forever preferred_lft forever
    5: ext1@ext0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
        link/ether be:da:bd:7e:f4:37 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.1/24 brd 10.0.0.255 scope global ext1
           valid_lft forever preferred_lft forever
        inet6 fe80::beda:bd00:17e:f437/64 scope link
           valid_lft forever preferred_lft forever

    이 출력은 네트워크 인터페이스 ext1 이 물리적 인터페이스 ext0 과 연결되어 있음을 보여줍니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.