다중 네트워크
OpenShift Container Platform에서 여러 네트워크 인터페이스와 가상 라우팅 구성 및 관리
초록
1장. 다중 네트워크 이해하기 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 관리자와 사용자는 UDN(사용자 정의 네트워크) 또는 NetworkAttachmentDefinition (NAD)을 사용하여 클러스터의 모든 일반 네트워크 트래픽을 처리하는 네트워크를 정의할 수 있습니다.
1.1. OVN-K CNI가 있는 여러 네트워크 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 OVN-Kubernetes는 OpenShift Container Platform 클러스터의 컨테이너 네트워크 인터페이스(CNI) 역할을 합니다. 이 네트워크 인터페이스는 관리자가 기본 네트워크를 생성하는 데 사용하는 인터페이스입니다.
사용자 정의 네트워크와 네트워크 연결 정의는 모두 다음 네트워크 유형으로 사용될 수 있습니다.
- 기본 네트워크 : Pod의 기본 네트워크 역할을 합니다. 기본적으로 다른 네트워크를 통해 트래픽을 보내도록 Pod 경로를 구성한 경우를 제외하고 모든 트래픽이 기본 네트워크를 통해 전달됩니다.
- 보조 네트워크 : Pod의 기본이 아닌 보조 네트워크 역할을 합니다. 보조 네트워크는 특정 트래픽 유형 또는 용도 전용 별도의 인터페이스를 제공합니다. 인터페이스를 통해 보조 네트워크 경로를 사용하도록 명시적으로 구성하는 Pod 트래픽만 있습니다.
다음 다이어그램은 물리적 네트워크 인터페이스 eth0 를 사용하여 두 개의 네임스페이스에 연결하는 기존 기본 네트워크 인프라가 있는 클러스터를 보여줍니다. 한 네임스페이스의 포드 또는 가상 머신(VM)은 다른 네임스페이스의 포드 또는 VM과 격리되어 실행됩니다. 하나의 기본 네트워크만 생성할 수 있습니다. 그러나 각 네임스페이스에 대해 보조 네트워크를 여러 개 만들 수 있습니다.
그림 1.1. 여러 보조 UDN이 있는 네임스페이스를 보여주는 다이어그램
클러스터 설치 중에 OpenShift Container Platform 관리자는 Multus CNI 플러그인을 활용하여 대체 기본 보조 Pod 네트워크를 구성할 수 있습니다. Multus를 사용하면 ipvlan, macvlan 또는 Network Attachment Definitions와 같은 여러 CNI 플러그인을 함께 사용하여 Pod의 보조 네트워크 역할을 할 수 있습니다.
사용자 정의 네트워크는 OVN-Kubernetes가 CNI로 사용되는 경우에만 지원됩니다. UDN은 다른 CNI와 함께 사용할 수 없습니다.
사용 가능한 CNI 플러그인을 기반으로 보조 네트워크를 정의하고 이러한 네트워크 중 하나 이상을 포드에 연결할 수 있습니다. 필요에 따라 클러스터에 대해 두 개 이상의 보조 네트워크를 정의할 수 있습니다. 따라서 스위칭 또는 라우팅과 같은 네트워크 기능을 제공하는 pod를 구성할 때 유연성이 제공됩니다. 자세한 내용은 추가 리소스의 링크를 참조하십시오.
- 지원되는 CNI 플러그인의 전체 목록은 "OpenShift Container Platform의 2차 네트워크"를 참조하십시오.
- 사용자 정의 네트워크에 대한 자세한 내용은 "사용자 정의 네트워크(UDN) 정보"를 참조하십시오.
- 네트워크 연결 정의에 대한 자세한 내용은 " NetworkAttachmentDefinition을 사용하여 기본 네트워크 생성".
1.2. UserDefinedNetwork 및 NetworkAttachmentDefinition 지원 매트릭스 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 네트워크 및 네트워크 연결 정의를 사용하여 요구 사항에 맞게 사용자 지정 네트워크를 정의하고 구성할 수 있습니다.
UserDefinedNetwork 및 NetworkAttachmentDefinition CR(사용자 정의 리소스)을 생성하여 클러스터 관리자는 다음 작업을 완료할 수 있습니다.
- 사용자 지정 가능한 네트워크 구성 생성
- 자체 네트워크 토폴로지 정의
- 네트워크 격리 확인
- 워크로드에 대한 IP 주소 지정 관리
- 고급 네트워크 기능 구성
관리자는 ClusterUserDefinedNetwork CR을 생성하여 클러스터 수준에서 여러 네임스페이스에 걸쳐 있는 보조 네트워크를 생성하고 정의할 수 있습니다.
사용자 정의 네트워크 및 네트워크 연결 정의는 기본 및 보조 네트워크 인터페이스 역할을 하며 각 인터페이스는 계층2 및 토폴로지를 지원합니다.
계층 3
OpenShift Container Platform 4.19부터 ClusterUserDefinedNetwork CR에서 Localnet 토폴로지를 사용할 수 있게 되었습니다. 이 구성은 물리적 네트워크를 가상 네트워크에 연결하는 데 선호되는 방법입니다. 또는 NetworkAttachmentDefinition CR을 사용하여 Localnet 토폴로지를 사용하여 보조 네트워크를 생성할 수 있습니다.
다음 섹션에서는 기본 또는 보조 네트워크로 사용할 때 UserDefinedNetwork 및 NetworkAttachmentDefinition CR의 지원되는 기능을 중점적으로 설명합니다. ClusterUserDefinedNetwork CR에 대한 별도 테이블도 포함되어 있습니다.
| 네트워크 기능 | Layer2 토폴로지 | Layer3 토폴로지 |
|---|---|---|
| 동서 교통 | ✓ | ✓ |
| 남북 교통 | ✓ | ✓ |
| 영구 IP | ✓ | X |
| 서비스 | ✓ | ✓ |
| 라우트 | X | X |
|
| ✓ | ✓ |
| 멀티 캐스트 | X | ✓ |
|
| ✓ | ✓ |
|
| X | X |
다음과 같습니다.
- 멀티 캐스트
- 네임스페이스에서 활성화해야 하며 OVN-Kubernetes 네트워크 Pod에서만 사용할 수 있습니다. 자세한 내용은 "멀티캐스트 정보"를 참조하세요.
NetworkPolicy리소스-
기본 네트워크 유형으로
ClusterUserDefinedNetworkCR을 생성할 때UserDefinedNetworkCR 다음에 네트워크 정책을 생성해야 합니다.
| 네트워크 기능 | Layer2 토폴로지 | Layer3 토폴로지 | 로컬넷 토폴로지 |
|---|---|---|---|
| 동서 교통 | ✓ | ✓ |
✓ ( |
| 남북 교통 | X | X |
✓ ( |
| 영구 IP | ✓ | X |
✓ ( |
| 서비스 | X | X | X |
| 라우트 | X | X | X |
|
| X | X | X |
| 멀티 캐스트 | X | X | X |
|
| X | X | X |
|
| ✓ | ✓ |
✓ ( |
Localnet 토폴로지는 UserDefinedNetwork CR과 함께 사용할 수 없습니다. NetworkAttachmentDefinition CR의 경우 보조 네트워크에서만 지원됩니다.
| 네트워크 기능 | Layer2 토폴로지 | Layer3 토폴로지 | 로컬넷 토폴로지 |
|---|---|---|---|
| 동서 교통 | ✓ | ✓ | ✓ |
| 남북 교통 | ✓ | ✓ | ✓ |
| 영구 IP | ✓ | X | ✓ |
| 서비스 | ✓ | ✓ | |
| 라우트 | X | X | |
|
| ✓ | ✓ | |
| 멀티 캐스트 | X | ✓ | |
|
| X | X | ✓ |
|
| ✓ | ✓ |
다음과 같습니다.
- 멀티 캐스트
- 네임스페이스에서 활성화해야 하며 OVN-Kubernetes 네트워크 Pod에서만 사용할 수 있습니다. 자세한 내용은 "멀티캐스트 정보"를 참조하세요.
NetworkPolicy리소스-
기본 네트워크 유형으로
ClusterUserDefinedNetworkCR을 생성할 때UserDefinedNetworkCR 다음에 네트워크 정책을 생성해야 합니다.
2장. 보조 네트워크의 사용 사례 링크 복사링크가 클립보드에 복사되었습니다!
데이터 플레인 및 컨트롤 플레인 분리를 포함하여 네트워크 분리가 필요한 경우 보조 네트워크를 사용할 수 있습니다.
네트워크 트래픽 격리는 다음과 같은 성능 및 보안상의 이유로 유용합니다.
성능
교통 관리 : 두 개의 서로 다른 비행기에 교통을 보내 각 비행기를 따라 얼마나 많은 교통량이 있는지 관리할 수 있습니다.
보안
보안 고려 사항을 위해 특별히 관리되는 네트워크 플레인으로 중요한 트래픽을 보낼 수 있으며 테넌트 또는 고객 간에 공유되지 않아야 하는 개인 데이터를 분리할 수 있습니다.
클러스터의 모든 pod는 여전히 클러스터 전체의 기본 네트워크를 사용하여 클러스터 전체의 연결을 유지합니다. 모든 pod에는 클러스터 전체 pod 네트워크에 연결된 eth0 인터페이스가 있습니다. oc exec -it <pod_name> -- ip a 명령을 사용하여 pod의 인터페이스를 확인할 수 있습니다. Multus CNI(Container Network Interface)를 사용하는 보조 네트워크 인터페이스를 추가하는 경우 이러한 보조 네트워크의 이름은 net1,net2 등입니다.
Pod에 추가 네트워크 인터페이스를 연결하려면 인터페이스 연결 방법을 정의하는 구성을 생성해야 합니다. UserDefinedNetwork CR(사용자 정의 리소스) 또는 NetworkAttachmentDefinition CR을 사용하여 각 인터페이스를 지정합니다. 각 CR 내부의 CNI 구성은 해당 인터페이스의 생성 방법을 정의합니다.
2.1. OpenShift 컨테이너 플랫폼의 보조 네트워크 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform은 클러스터에서 보조 네트워크를 생성하기 위한 다음과 같은 CNI 플러그인을 제공합니다.
bridge: 동일한 호스트의 pod가 서로 통신할 수 있도록 브리지 기반 보조 네트워크를 구성하려면 다음 절차를 사용하십시오.
bond-cni: 여러 네트워크 인터페이스를 단일 논리 본딩 인터페이스로 집계하는 방법을 제공하려면 다음 절차를 사용하십시오.
host-device: pod가 호스트 시스템의 물리적 이더넷 네트워크 장치에 액세스할 수 있도록 하려면 다음 절차를 사용하십시오.
ipvlan: macvlan 기반 보조 네트워크와 유사하게 호스트의 pod가 해당 호스트의 다른 호스트 및 Pod와 통신할 수 있습니다. macvlan 기반 추가 네트워크와 달리 각 pod는 상위 물리적 네트워크 인터페이스와 동일한 MAC 주소를 공유합니다. 다음 절차를 사용하십시오.
VLAN: Pod에 대해 VLAN 기반 네트워크 격리 및 연결을 허용하려면 다음 절차를 사용하십시오.
macvlan: 호스트의 Pod가 물리적 네트워크 인터페이스를 사용하여 해당 호스트의 다른 호스트 및 Pod와 통신할 수 있도록 허용 macvlan 기반 보조 네트워크에 연결된 각 Pod에는 고유한 MAC 주소가 제공됩니다.
open btb 장치를 사용하면 사용자 공간 프로그램이 네트워크 패킷을 보내고 수신할 수 있습니다. 컨테이너 네임스페이스 내에 Cryostat 장치를 만들려면 다음 절차를 사용하십시오.
SR-IOV: Pod가 호스트 시스템의 SR-IOV 가능 하드웨어에서 VF(가상 기능) 인터페이스에 연결할 수 있도록 합니다.
route-override: Pod가 경로를 재정의하고 설정할 수 있도록 하려면 다음 절차를 사용하십시오.
2.2. UserDefinedNetwork 및 NetworkAttachmentDefinition 지원 매트릭스 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 네트워크 및 네트워크 연결 정의를 사용하여 요구 사항에 맞게 사용자 지정 네트워크를 정의하고 구성할 수 있습니다.
UserDefinedNetwork 및 NetworkAttachmentDefinition CR(사용자 정의 리소스)을 생성하여 클러스터 관리자는 다음 작업을 완료할 수 있습니다.
- 사용자 지정 가능한 네트워크 구성 생성
- 자체 네트워크 토폴로지 정의
- 네트워크 격리 확인
- 워크로드에 대한 IP 주소 지정 관리
- 고급 네트워크 기능 구성
관리자는 ClusterUserDefinedNetwork CR을 생성하여 클러스터 수준에서 여러 네임스페이스에 걸쳐 있는 보조 네트워크를 생성하고 정의할 수 있습니다.
사용자 정의 네트워크 및 네트워크 연결 정의는 기본 및 보조 네트워크 인터페이스 역할을 하며 각 인터페이스는 계층2 및 토폴로지를 지원합니다.
계층 3
OpenShift Container Platform 4.19부터 ClusterUserDefinedNetwork CR에서 Localnet 토폴로지를 사용할 수 있게 되었습니다. 이 구성은 물리적 네트워크를 가상 네트워크에 연결하는 데 선호되는 방법입니다. 또는 NetworkAttachmentDefinition CR을 사용하여 Localnet 토폴로지를 사용하여 보조 네트워크를 생성할 수 있습니다.
다음 섹션에서는 기본 또는 보조 네트워크로 사용할 때 UserDefinedNetwork 및 NetworkAttachmentDefinition CR의 지원되는 기능을 중점적으로 설명합니다. ClusterUserDefinedNetwork CR에 대한 별도 테이블도 포함되어 있습니다.
| 네트워크 기능 | Layer2 토폴로지 | Layer3 토폴로지 |
|---|---|---|
| 동서 교통 | ✓ | ✓ |
| 남북 교통 | ✓ | ✓ |
| 영구 IP | ✓ | X |
| 서비스 | ✓ | ✓ |
| 라우트 | X | X |
|
| ✓ | ✓ |
| 멀티 캐스트 | X | ✓ |
|
| ✓ | ✓ |
|
| X | X |
다음과 같습니다.
- 멀티 캐스트
- 네임스페이스에서 활성화해야 하며 OVN-Kubernetes 네트워크 Pod에서만 사용할 수 있습니다. 자세한 내용은 "멀티캐스트 정보"를 참조하세요.
NetworkPolicy리소스-
기본 네트워크 유형으로
ClusterUserDefinedNetworkCR을 생성할 때UserDefinedNetworkCR 다음에 네트워크 정책을 생성해야 합니다.
| 네트워크 기능 | Layer2 토폴로지 | Layer3 토폴로지 | 로컬넷 토폴로지 |
|---|---|---|---|
| 동서 교통 | ✓ | ✓ |
✓ ( |
| 남북 교통 | X | X |
✓ ( |
| 영구 IP | ✓ | X |
✓ ( |
| 서비스 | X | X | X |
| 라우트 | X | X | X |
|
| X | X | X |
| 멀티 캐스트 | X | X | X |
|
| X | X | X |
|
| ✓ | ✓ |
✓ ( |
Localnet 토폴로지는 UserDefinedNetwork CR과 함께 사용할 수 없습니다. NetworkAttachmentDefinition CR의 경우 보조 네트워크에서만 지원됩니다.
| 네트워크 기능 | Layer2 토폴로지 | Layer3 토폴로지 | 로컬넷 토폴로지 |
|---|---|---|---|
| 동서 교통 | ✓ | ✓ | ✓ |
| 남북 교통 | ✓ | ✓ | ✓ |
| 영구 IP | ✓ | X | ✓ |
| 서비스 | ✓ | ✓ | |
| 라우트 | X | X | |
|
| ✓ | ✓ | |
| 멀티 캐스트 | X | ✓ | |
|
| X | X | ✓ |
|
| ✓ | ✓ |
다음과 같습니다.
- 멀티 캐스트
- 네임스페이스에서 활성화해야 하며 OVN-Kubernetes 네트워크 Pod에서만 사용할 수 있습니다. 자세한 내용은 "멀티캐스트 정보"를 참조하세요.
NetworkPolicy리소스-
기본 네트워크 유형으로
ClusterUserDefinedNetworkCR을 생성할 때UserDefinedNetworkCR 다음에 네트워크 정책을 생성해야 합니다.
3장. 1차 네트워크 링크 복사링크가 클립보드에 복사되었습니다!
3.1. 사용자 정의 네트워크 정보 링크 복사링크가 클립보드에 복사되었습니다!
UDN(사용자 정의 네트워크)은 OVN-Kubernetes를 확장하여 기본 격리를 통해 사용자 정의 계층 2 및 계층 3 네트워크 세그먼트를 활성화하여 다중 테넌트 배포 및 사용자 정의 네트워크 아키텍처를 위한 향상된 네트워크 유연성, 보안 및 분할 기능을 제공합니다.
3.1.1. 사용자 정의 네트워크 개요 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 네트워크 분할 및 격리를 보호하고 개선하기 위해 ClusterUserDefinedNetwork CR(사용자 정의 리소스)을 사용하여 클러스터 수준에서 네임스페이스를 확장하는 기본 또는 보조 네트워크를 생성할 수 있으며 개발자는 UserDefinedNetwork CR을 사용하여 네임스페이스 수준에서 보조 네트워크를 정의할 수 있습니다.
UDN(사용자 정의 네트워크)을 구현하기 전에 OpenShift Container Platform의 OVN-Kubernetes CNI 플러그인은 기본 또는 기본 네트워크에서 계층 3 토폴로지만 지원했습니다. Kubernetes의 설계 원칙에 따라 모든 Pod는 기본 네트워크에 연결되고, 모든 Pod는 IP 주소를 통해 서로 통신하며, 네트워크 정책에 따라 Pod 간 트래픽이 제한됩니다.
Kubernetes 설계는 간단한 배포에 유용하지만 이 계층 3 토폴로지는 특히 최신 다중 테넌트 배포에 대해 기본 네트워크 세그먼트 구성의 사용자 지정을 제한합니다.
UDN은 이러한 모든 세그먼트가 기본적으로 격리되는 사용자 지정 계층 2 및 계층 3 네트워크 세그먼트를 활성화하여 Kubernetes Pod 네트워크에 대한 기본 계층 3 토폴로지의 유연성 및 분할 기능을 향상시킵니다. 이러한 세그먼트는 기본 OVN-Kubernetes CNI 플러그인을 사용하는 컨테이너 포드와 가상 머신의 기본 또는 보조 네트워크 역할을 합니다. UDN은 광범위한 네트워크 아키텍처와 토폴로지를 지원하여 네트워크의 유연성, 보안, 성능을 향상시킵니다.
다음 섹션에서는 사용자 정의 네트워크의 이점과 한계, ClusterUserDefinedNetwork 또는 UserDefinedNetwork CR을 생성할 때의 모범 사례, CR을 생성하는 방법, 배포와 관련이 있을 수 있는 추가 구성 세부 정보를 더욱 강조합니다.
3.1.2. 사용자 정의 네트워크의 이점 링크 복사링크가 클립보드에 복사되었습니다!
사용자 정의 네트워크를 사용하면 각 네임스페이스에 자체 격리된 기본 네트워크를 제공하여 테넌트 간 트래픽 위험을 줄이고 복잡한 네트워크 정책의 필요성을 제거하여 네트워크 관리를 단순화할 수 있습니다.
사용자 정의 네트워크는 다음과 같은 이점을 제공합니다.
보안을 위한 향상된 네트워크 격리
- 테넌트 격리 : 네임스페이스는 Red Hat OpenStack Platform(RHOSP)에서 테넌트가 격리되는 방식과 유사하게 자체적으로 격리된 기본 네트워크를 가질 수 있습니다. 이렇게 하면 테넌트 간 트래픽 위험이 줄어들어 보안이 향상됩니다.
네트워크 유연성
- 2계층 및 3계층 지원 : 클러스터 관리자는 기본 네트워크를 2계층 또는 3계층 네트워크 유형으로 구성할 수 있습니다.
간소화된 네트워크 관리
- 네트워크 구성의 복잡성 감소 : 사용자 정의 네트워크를 사용하면 서로 다른 네트워크의 작업 부하를 그룹화하여 격리를 달성할 수 있으므로 복잡한 네트워크 정책이 필요 없습니다.
고급 기능
- 일관되고 선택 가능한 IP 주소 지정 : 사용자는 다양한 네임스페이스와 클러스터에서 IP 서브넷을 지정하고 재사용하여 일관된 네트워킹 환경을 제공할 수 있습니다.
- 다중 네트워크 지원 : 사용자 정의 네트워킹 기능을 통해 관리자는 여러 네임스페이스를 단일 네트워크에 연결하거나, 서로 다른 네임스페이스 집합에 대해 별도의 네트워크를 만들 수 있습니다.
-
CUDN을 통해 가상 머신 연결 가능: BGP 경로 알림이 활성화된 계층 2
ClusterUserDefinedNetwork에 VM을 연결하면 VM 수신 및 송신 도달 가능성을 개선하는 동안 VM당 정적 경로를 공급자 네트워크에 게시하고 경로를 다시 가져올 수 있습니다.
Red Hat OpenStack Platform(RHOSP)에서 애플리케이션 마이그레이션 간소화
- 네트워크 패리티 : 사용자 정의 네트워킹을 사용하면 유사한 네트워크 격리 및 구성 옵션을 제공하여 OpenStack에서 OpenShift Container Platform으로 애플리케이션을 마이그레이션하는 작업이 간소화됩니다.
개발자와 관리자는 사용자 정의 리소스를 사용하여 네임스페이스 범위가 지정된 사용자 정의 네트워크를 만들 수 있습니다. 프로세스 개요는 다음과 같습니다.
-
관리자는
k8s.ovn.org/primary-user-defined-network레이블이 있는 사용자 정의 네트워크에 대한 네임스페이스를 만듭니다. -
UserDefinedNetworkCR은 클러스터 관리자나 사용자가 생성합니다. - 사용자는 네임스페이스에 포드를 생성합니다.
3.1.3. 사용자 정의 네트워크의 한계 링크 복사링크가 클립보드에 복사되었습니다!
성공적인 사용자 정의 네트워크(UDN)를 배포하려면 DNS 확인 동작, 이미지 레지스트리와 같은 기본 네트워크 서비스에 대한 제한된 액세스, 격리된 네트워크 간의 네트워크 정책 제약 조건, 포드 이전 네임스페이스 및 네트워크를 생성해야 하는 요구 사항을 고려해야 합니다.
UDN을 구현하기 전에 다음과 같은 제한 사항을 고려하세요.
DNS 제한 사항 :
- 포드에 대한 DNS 조회는 클러스터 기본 네트워크의 포드 IP 주소로 확인됩니다. 포드가 사용자 정의 네트워크의 일부인 경우에도 DNS 조회는 해당 사용자 정의 네트워크의 포드 IP 주소로 확인되지 않습니다. 하지만 서비스 및 외부 엔터티에 대한 DNS 조회는 예상대로 작동합니다.
- 포드가 기본 UDN에 할당되면 클러스터의 기본 네트워크에서 Kubernetes API(KAPI) 및 DNS 서비스에 액세스할 수 있습니다.
- 초기 네트워크 할당 : Pod를 생성하기 전에 네임스페이스와 네트워크를 생성해야 합니다. 포드가 있는 네임스페이스를 새로운 네트워크에 할당하거나 기존 네임스페이스에 UDN을 만드는 것은 OVN-Kubernetes에서 허용되지 않습니다.
- 상태 점검 제한 사항 : Kubelet 상태 점검은 클러스터 기본 네트워크에서 수행되므로 Pod의 기본 인터페이스의 네트워크 연결을 확인하지 않습니다. 따라서 기본 네트워크에서는 포드가 정상적으로 보이지만 기본 인터페이스에서는 연결이 끊어지는 시나리오가 사용자 정의 네트워크에서 발생할 수 있습니다.
- 네트워크 정책 제한 : 서로 다른 사용자 정의 기본 네트워크에 연결된 네임스페이스 간 트래픽을 활성화하는 네트워크 정책은 효과적이지 않습니다. 이러한 트래픽 정책은 이러한 분리된 네트워크 간에 연결성이 없기 때문에 적용되지 않습니다.
-
생성 및 수정 제한 :
ClusterUserDefinedNetworkCR과UserDefinedNetworkCR은 생성된 후에는 수정할 수 없습니다. -
기본 네트워크 서비스 액세스 : 사용자 정의 네트워크 포드는 기본 네트워크와 분리되어 있으므로 대부분의 기본 네트워크 서비스에 액세스할 수 없습니다. 예를 들어, 사용자 정의 네트워크 포드는 현재 OpenShift Container Platform 이미지 레지스트리에 액세스할 수 없습니다. 이러한 제한으로 인해 소스-이미지 빌드는 사용자 정의 네트워크 네임스페이스에서 작동하지 않습니다. 또한 Git 저장소의 소스 코드를 기반으로 애플리케이션을 만드는 함수(예:
oc new-app <command>)와 소스-이미지 빌드를 사용하는 OpenShift Container Platform 템플릿에서 애플리케이션을 만드는 함수 등 다른 함수는 작동하지 않습니다. 이러한 제한은 다른openshift-*.svc서비스에도 영향을 미칠 수 있습니다. - 연결 제한 : 사용자 정의 네트워크의 NodePort 서비스는 격리가 보장되지 않습니다. 예를 들어, 같은 노드에 있는 포드에서 서비스로 가는 NodePort 트래픽은 접근할 수 없지만, 다른 노드에 있는 포드에서 오는 트래픽은 성공합니다.
-
IP 주소 소진에 대한 불분명한 오류 메시지 : 사용자 정의 네트워크의 서브넷에서 사용 가능한 IP 주소가 부족하면 새로운 Pod가 시작되지 않습니다. 이 문제가 발생하면 다음 오류가 반환됩니다.
경고: pod sandbox를 만들지 못했습니다. 이 오류 메시지는 IP 고갈이 원인임을 명확하게 설명하지 않습니다. 문제를 확인하려면 OpenShift Container Platform 웹 콘솔의 포드 네임스페이스에 있는 이벤트 페이지를 확인하면 됩니다. 이 페이지에는 서브넷 고갈에 대한 명시적 메시지가 보고되어 있습니다. Layer2 송신 IP 제한 사항 (
UserDefinedNetworkCR만 해당):- 기본 게이트웨이 없이는 Egress IP가 작동하지 않습니다.
- Google Cloud에서는 Egress IP가 작동하지 않습니다.
- Egress IP는 여러 게이트웨이에서 작동하지 않고 대신 모든 트래픽을 단일 게이트웨이로 전달합니다.
3.1.4. 2계층 및 3계층 토폴로지 링크 복사링크가 클립보드에 복사되었습니다!
계층 2 토폴로지는 클러스터 노드에서 분산 가상 스위치를 생성합니다. 이 네트워크 토폴로지는 동일한 서브넷 내에서 VM(가상 머신)의 원활한 실시간 마이그레이션을 제공합니다. 계층 3 토폴로지는 라우팅을 사용하여 노드당 고유한 세그먼트를 생성합니다. 이 네트워크 토폴로지는 대규모 브로드캐스트 도메인을 효과적으로 관리합니다.
플랫 계층 2 토폴로지에서 가상 머신과 Pod는 가상 스위치에 연결하여 이러한 모든 구성 요소가 동일한 서브넷 내에서 서로 통신할 수 있도록 합니다. 이 토폴로지는 클러스터의 노드에서 VM을 실시간으로 마이그레이션하는 데 유용합니다. 다음 다이어그램은 라이브 마이그레이션을 위해 가상 스위치를 사용하는 두 개의 노드가 있는 플랫 레이어 2 토폴로지를 보여줍니다.
그림 3.1. 구성 요소 통신을 위해 가상 스위치를 사용하는 플랫 레이어 2 토폴로지
2계층 서브넷을 지정하지 않기로 결정한 경우 클러스터의 각 포드에 대한 IP 주소를 수동으로 구성해야 합니다. 2계층 서브넷을 지정하지 않으면 포트 보안은 MAC(Media Access Control) 스푸핑만 방지하는 데 국한되며 IP 스푸핑은 방지하지 않습니다. 2계층 토폴로지는 단일 브로드캐스트 도메인을 생성하는데, 이는 대규모 네트워크 환경에서 문제가 될 수 있으며, 토폴로지로 인해 네트워크 성능이 저하될 수 있는 브로드캐스트 스톰이 발생할 수 있습니다.
네트워크에 대해 더욱 구성 가능한 옵션에 액세스하려면 계층 2 토폴로지를 사용자 정의 네트워크(UDN)와 통합할 수 있습니다. 다음 다이어그램은 각 노드에 존재하는 포드를 포함하는 2계층 토폴로지를 갖춘 UDN을 사용하는 두 개의 노드를 보여줍니다. 각 노드에는 두 개의 인터페이스가 포함됩니다.
- 네트워크 구성 요소를 노드에 연결하는 컴퓨팅 노드인 노드 인터페이스입니다.
-
br-ex와 같은 OVS(Open vSwitch) 브리지는 Pod가 서로 통신하고 리소스를 공유할 수 있도록 2계층 OVN 스위치를 생성합니다.
외부 스위치는 두 인터페이스를 연결하고, 게이트웨이 또는 라우터는 외부 스위치와 2계층 OVN 스위치 간의 라우팅 트래픽을 처리합니다. 노드 내의 VM과 Pod는 UDN을 사용하여 서로 통신할 수 있습니다. 2계층 OVN 스위치는 UDN을 통한 노드 트래픽을 처리하므로 VM을 한 노드에서 다른 노드로 라이브 마이그레이션할 수 있습니다.
그림 3.2. 2계층 토폴로지를 사용하는 사용자 정의 네트워크(UDN)
3계층 토폴로지는 클러스터의 각 노드에 대해 고유한 2계층 세그먼트를 생성합니다. 3계층 라우팅 메커니즘은 이러한 세그먼트를 상호 연결하여 서로 다른 노드에 호스팅된 가상 머신과 포드가 서로 통신할 수 있도록 합니다. 3계층 토폴로지는 각 도메인을 특정 노드에 할당하여 대규모 브로드캐스트 도메인을 효과적으로 관리할 수 있으므로 브로드캐스트 트래픽의 범위가 줄어듭니다. 3계층 토폴로지를 구성하려면 cidr 및 hostSubnet 매개변수를 구성해야 합니다.
3.1.5. ClusterUserDefinedNetwork CR에 대하여 링크 복사링크가 클립보드에 복사되었습니다!
CUDN( ClusterUserDefinedNetwork ) 사용자 정의 리소스(CR)는 OpenShift Container Platform에서 클러스터 범위의 네트워크 분할과 관리자만 격리를 제공합니다. 이 리소스를 정의하면 네트워크 트래픽이 전체 클러스터에서 안전하게 분할됩니다.
다음 다이어그램에서는 클러스터 관리자가 CUDN CR을 사용하여 테넌트 간에 네트워크 격리를 생성하는 방법을 보여줍니다. 이 네트워크 구성을 사용하면 네트워크를 여러 네임스페이스에 걸쳐 확장할 수 있습니다. 다이어그램에서 네트워크 격리는 두 개의 사용자 정의 네트워크 udn-1 및 udn-2 를 생성함으로써 달성됩니다. 이러한 네트워크는 연결되어 있지 않으며 spec.namespaceSelector.matchLabels 필드는 다른 네임스페이스를 선택하는 데 사용됩니다. 예를 들어 udn-1 은 namespace-1 및 namespace-2 에 대한 통신을 구성하고 격리하는 반면, udn-2 는 namespace-3 및 namespace-4 에 대한 통신을 구성하고 격리합니다. 격리된 테넌트(테넌트 1과 테넌트 2)는 네임스페이스를 분리하는 동시에 동일한 네임스페이스에 있는 포드가 통신할 수 있도록 허용하여 생성됩니다.
그림 3.3. ClusterUserDefinedNetwork CR을 사용한 테넌트 격리
3.1.5.1. ClusterUserDefinedNetwork CR에 대한 모범 사례 링크 복사링크가 클립보드에 복사되었습니다!
CUDN( ClusterUserDefinedNetwork ) CR의 성공적인 인스턴스를 생성 및 배포하려면 관리자가 기본값 및 openshift-* 네임스페이스를 피하고 적절한 네임스페이스 선택기 구성을 사용하고 물리적 네트워크 매개변수 일치를 확인하는 등의 모범 사례를 따라야 합니다.
다음 세부 정보는 관리자에게 CUDN CR을 설계하기 위한 모범 사례를 제공합니다.
-
ClusterUserDefinedNetworkCR은 클러스터 관리자가 사용하도록 의도되었으며 관리자가 아닌 사용자는 사용하면 안 됩니다. 잘못 사용하면 배포 시 보안 문제가 발생하거나 중단이 발생하거나 클러스터 네트워크가 끊어질 수 있습니다. -
ClusterUserDefinedNetworkCR은기본네임스페이스를 선택해서는 안 됩니다. 이로 인해 격리가 이루어지지 않을 수 있으며, 결과적으로 클러스터에 보안 위험이 발생할 수 있습니다. -
ClusterUserDefinedNetworkCR은openshift-*네임스페이스를 선택해서는 안 됩니다. OpenShift Container Platform 관리자는 다음 조건 중 하나가 충족되면 클러스터의 모든 네임스페이스가 선택된다는 사실을 알고 있어야 합니다.
-
matchLabels선택자는 비어 있습니다. -
matchExpressions선택자는 비어 있습니다. -
namespaceSelector는 초기화되었지만matchExpressions또는matchLabel을지정하지 않습니다. 예를 들어:namespaceSelector: {}.
-
기본 네트워크의 경우
ClusterUserDefinedNetworkCR에 사용되는 네임스페이스에는k8s.ovn.org/primary-user-defined-network레이블이 포함되어야 합니다. 이 레이블은 업데이트할 수 없으며, 네임스페이스가 생성될 때만 추가할 수 있습니다. 다음 조건은k8s.ovn.org/primary-user-defined-network네임스페이스 레이블에 적용됩니다.-
네임스페이스에
k8s.ovn.org/primary-user-defined-network레이블이 없고 포드가 생성되면 포드는 기본 네트워크에 연결됩니다. -
네임스페이스에
k8s.ovn.org/primary-user-defined-network레이블이 없고 네임스페이스와 일치하는 기본ClusterUserDefinedNetworkCR이 생성되면 오류가 보고되고 네트워크가 생성되지 않습니다. -
네임스페이스에
k8s.ovn.org/primary-user-defined-network레이블이 없고 기본ClusterUserDefinedNetworkCR이 이미 존재하는 경우 네임스페이스에 포드가 생성되어 기본 네트워크에 연결됩니다. -
네임스페이스에 레이블이 있고 기본
ClusterUserDefinedNetworkCR이 없는 경우ClusterUserDefinedNetworkCR이 생성될 때까지 네임스페이스에 포드가 생성되지 않습니다.
-
네임스페이스에
ClusterUserDefinedNetworkCR을 사용하여로컬넷토폴로지를 생성할 때 관리자를 위한 모범 사례는 다음과 같습니다.-
CUDN CR을 생성할 때
spec.network.physicalNetworkName매개변수가 Open vSwitch(OVS) 브리지 매핑에서 구성한 매개변수와 일치하는지 확인해야 합니다. 이렇게 하면 물리적 네트워크의 의도된 세그먼트에 브리징이 이루어집니다. 동일한 브리지 매핑을 사용하여 여러 CUDN CR을 배포하려는 경우 동일한physicalNetworkName매개변수를 사용해야 합니다. -
물리적 네트워크와 다른 네트워크 인터페이스 사이에 서브넷이 겹치지 않도록 하세요. 중복되는 네트워크 서브넷은 라우팅 충돌과 네트워크 불안정을 초래할 수 있습니다.
spec.network.localnet.subnets매개변수를 사용할 때 충돌을 방지하려면spec.network.localnet.excludeSubnets매개변수를 사용할 수 있습니다. -
VLAN(가상 LAN)을 구성할 때는 기본 물리적 인프라(스위치, 라우터 등)와 노드가 모두 VLAN ID(VID)를 허용하도록 올바르게 구성되었는지 확인해야 합니다. 즉, 예를 들어
eth1과 같은 물리적 네트워크 인터페이스를 물리적 스위치를 통해 연결하는 VLAN(예:20)에 대한 액세스 포트로 구성한다는 의미입니다. 또한, 물리적 인터페이스가 OVN-Kubernetes에 올바르게 연결되었는지 확인하려면 노드에 OVS 브리지 매핑(예:eth1)이 있는지 확인해야 합니다.
-
CUDN CR을 생성할 때
3.1.5.2. CLI를 사용하여 ClusterUserDefinedNetwork CR 만들기 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 계층 2 또는 계층 3을 지원하는 여러 네임스페이스에서 클러스터 전체 네트워크 분할 및 격리를 구현하려면 CLI를 사용하여 ClusterUserDefinedNetwork CR을 생성합니다. 이 리소스를 정의하면 네트워크 트래픽이 클러스터 전체에서 안전하게 분할됩니다.
사용 사례에 따라 Layer2 토폴로지 유형에 대한 cluster-layer-two-udn.yaml 예제 또는 Layer3 토폴로지 유형에 대한 cluster-layer-three-udn.yaml 예제를 사용하여 요청을 생성합니다.
-
ClusterUserDefinedNetworkCR은 클러스터 관리자가 사용하도록 의도되었으며 관리자가 아닌 사용자는 사용하면 안 됩니다. 잘못 사용하면 배포 시 보안 문제가 발생하거나 중단이 발생하거나 클러스터 네트워크가 끊어질 수 있습니다. -
OpenShift Virtualization은
Layer2및Localnet토폴로지만 지원합니다.
사전 요구 사항
-
cluster-admin권한이 있는 사용자로 로그인했습니다.
프로세스
선택 사항: 기본 네트워크를 사용하는
ClusterUserDefinedNetworkCR의 경우 다음 명령을 입력하여k8s.ovn.org/primary-user-defined-network레이블이 있는 네임스페이스를 만듭니다.$ cat << EOF | oc apply -f - apiVersion: v1 kind: Namespace metadata: name: <cudn_namespace_name> labels: k8s.ovn.org/primary-user-defined-network: "" EOFLayer2또는Layer3토폴로지 유형에 대한 클러스터 전체 사용자 정의 네트워크를 만듭니다.다음 예와 같이
Layer2토폴로지에 대한 요청을 정의하려면cluster-layer-two-udn.yaml과 같은 YAML 파일을 만듭니다.apiVersion: k8s.ovn.org/v1 kind: ClusterUserDefinedNetwork metadata: name: <cudn_name> spec: namespaceSelector: matchLabels: "<label_1_key>": "<label_1_value>" "<label_2_key>": "<label_2_value>" network: topology: Layer2 layer2: role: Primary subnets: - "2001:db8::/64" - "10.100.0.0/16"다음과 같습니다.
이름-
ClusterUserDefinedNetworkCR의 이름을 지정합니다. namespaceSelector-
CUDN CR이 적용되는 네임스페이스 집합에 대한 레이블 쿼리를 지정합니다. 표준 Kubernetes
MatchLabel선택기를 사용합니다.default또는openshift-*네임스페이스를 가리켜서는 안 됩니다. matchLabels-
AND관계로 용어를 평가하는matchLabels선택기 유형을 사용합니다. 이 예에서 CUDN CR은 <label_1_key>=<label_1_value> 및 <label_2_key>=<label_2_value> 라벨이 모두 포함된 네임스페이스에 배포됩니다. network- 네트워크 구성을 설명합니다.
- 토폴로지
-
이 필드는 네트워크 구성을 설명합니다. 허용되는 값은
Layer2및Layer3입니다.Layer2토폴로지 유형을 지정하면 모든 노드에서 공유하는 하나의 논리 스위치가 생성됩니다. 이 필드는 토폴로지 구성을 지정합니다.layer2또는layer3일 수 있습니다. role-
기본또는보조를지정합니다.Primary는4.19에서 지원되는 유일한역할사양입니다. subnetsLayer2토폴로지 유형의 경우 다음은 필드에 대한 구성 세부 정보를 지정합니다.- 서브넷 필드는 선택 사항입니다.
-
서브넷 필드는
문자열유형이며 IPv4와 IPv6 모두에 대한 표준 CIDR 형식을 허용합니다. -
서브넷 필드에는 1~2개의 항목이 허용됩니다. 두 품목은 서로 다른 계열에 속해야 합니다. 예를 들어, 서브넷 값은
10.100.0.0/16및2001:db8::/64입니다. -
Layer2서브넷은 생략될 수 있습니다. 생략하면 사용자는 포드에 대한 정적 IP 주소를 구성해야 합니다. 결과적으로 포트 보안은 MAC 스푸핑만 방지합니다. 자세한 내용은 "정적 IP 주소로 Pod 구성"을 참조하세요.
다음 예와 같이
Layer3토폴로지에 대한 요청을 정의하려면cluster-layer-three-udn.yaml과 같은 YAML 파일을 만듭니다.apiVersion: k8s.ovn.org/v1 kind: ClusterUserDefinedNetwork metadata: name: <cudn_name> spec: namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: ["<example_namespace_one>", "<example_namespace_two>"] network: topology: Layer3 layer3: role: Primary subnets: - cidr: 10.100.0.0/16 hostSubnet: 24다음과 같습니다.
이름-
ClusterUserDefinedNetworkCR의 이름을 지정합니다. namespaceSelector-
CUDN CR이 적용되는 네임스페이스 집합에 대한 레이블 쿼리를 지정합니다. 표준 Kubernetes
MatchLabel선택기를 사용합니다.default또는openshift-*네임스페이스를 가리켜서는 안 됩니다. terms는OR관계로 평가되는matchExpressions선택기 유형을 사용합니다. 키-
일치시킬 레이블 키를 지정합니다. 연산자 값을 사용합니다. 유효한 값은 다음과 같습니다. ,
Not,InExists및DoesNotExist.matchExpressions유형이 사용되므로 또는<example_namespace_two>와 일치하는<example_namespace_one>네임스페이스를 프로비저닝합니다. network- 네트워크 구성을 설명합니다.
- 토폴로지
-
토폴로지필드는 네트워크 구성을 설명합니다. 허용되는 값은Layer2와Layer3입니다.Layer3토폴로지 유형을 지정하면 노드당 다른 서브넷을 갖는 Layer 2 세그먼트가 생성됩니다. 3계층 라우팅은 노드 서브넷을 상호 연결하는 데 사용됩니다. role-
기본또는보조를지정합니다.Primary는4.19에서 지원되는 유일한역할사양입니다. subnetsLayer3토폴로지 유형의 경우 다음은서브넷필드에 대한 구성 세부 정보를 지정합니다.-
서브넷필드는 필수입니다. 서브넷필드의 유형은cidr및hostSubnet입니다.-
cidr은 클러스터 서브넷이며 문자열 값을 허용합니다. -
hostSubnet은클러스터 서브넷이 분할되는 노드 서브넷 접두사를 지정합니다. -
IPv6의 경우
hostSubnet에 대해/64길이만 지원됩니다.
-
-
다음 명령을 실행하여 요청을 적용하세요.
$ oc create --validate=true -f <example_cluster_udn>.yaml여기서
<example_cluster_udn>.yaml은Layer2또는Layer3구성 파일의 이름입니다.다음 명령을 실행하여 요청이 성공했는지 확인하세요.
$ oc get clusteruserdefinednetwork <cudn_name> -o yaml여기서
<cudn_name>은 클러스터 전체 사용자 정의 네트워크에 대해 생성한 이름입니다.출력 예
apiVersion: k8s.ovn.org/v1 kind: ClusterUserDefinedNetwork metadata: creationTimestamp: "2024-12-05T15:53:00Z" finalizers: - k8s.ovn.org/user-defined-network-protection generation: 1 name: my-cudn resourceVersion: "47985" uid: 16ee0fcf-74d1-4826-a6b7-25c737c1a634 spec: namespaceSelector: matchExpressions: - key: custom.network.selector operator: In values: - example-namespace-1 - example-namespace-2 - example-namespace-3 network: layer3: role: Primary subnets: - cidr: 10.100.0.0/16 topology: Layer3 status: conditions: - lastTransitionTime: "2024-11-19T16:46:34Z" message: 'NetworkAttachmentDefinition has been created in following namespaces: [example-namespace-1, example-namespace-2, example-namespace-3]' reason: NetworkAttachmentDefinitionReady status: "True" type: NetworkCreated
3.1.5.3. Localnet 토폴로지에 대한 ClusterUserDefinedNetwork CR 생성 링크 복사링크가 클립보드에 복사되었습니다!
Localnet 토폴로지를 배포하여 보조 네트워크를 물리적 오버레이에 연결합니다. 이를 통해 동서 클러스터 트래픽과 클러스터 외부에서 실행되는 서비스에 대한 액세스가 모두 가능해집니다. 이 토폴로지 유형에는 클러스터 노드에서 기본 Open vSwitch(OVS) 시스템의 추가 구성이 필요합니다.
사전 요구 사항
-
cluster-admin권한이 있는 사용자로 로그인했습니다. - OVS 브리지를 통해 논리적 OVN-Kubernetes 네트워크를 물리적 노드 네트워크와 연결하기 위해 Open vSwitch(OVS) 브리지 매핑을 만들고 구성했습니다. 자세한 내용은 "로컬넷 스위치 토폴로지 구성"을 참조하세요.
프로세스
Localnet토폴로지를 사용하여 클러스터 전체 사용자 정의 네트워크를 만듭니다.다음 예와 같이
Localnet토폴로지에 대한 요청을 정의하려면cluster-udn-localnet.yaml과 같은 YAML 파일을 만듭니다.apiVersion: k8s.ovn.org/v1 kind: ClusterUserDefinedNetwork metadata: name: <cudn_name> spec: namespaceSelector: matchLabels: "<label_1_key>": "<label_1_value>" "<label_2_key>": "<label_2_value>" network: topology: Localnet localnet: role: Secondary physicalNetworkName: test ipam: {lifecycle: Persistent} subnets: ["192.168.0.0/16", "2001:dbb::/64"]다음과 같습니다.
이름-
ClusterUserDefinedNetworkCR의 이름을 지정합니다. namespaceSelector-
CUDN CR이 적용되는 네임스페이스 집합에 대한 레이블 쿼리를 지정합니다. 표준 Kubernetes
MatchLabel선택기를 사용합니다.default또는openshift-*네임스페이스를 가리켜서는 안 됩니다. matchLabels-
AND관계로 용어를 평가하는matchLabels선택기 유형을 사용합니다. 이 예에서 CUDN CR은 <label_1_key>=<alabel_1_value> 및 <label_2_key>=<label_2_value> 라벨이 모두 포함된 네임스페이스에 배포됩니다. network- 네트워크 구성을 설명합니다.
- 토폴로지
-
Localnet토폴로지 유형을 지정하면 하나의 공급자 네트워크에 직접 연결되는 하나의 논리적 스위치가 생성됩니다. role-
네트워크 구성에 대한
역할을지정합니다.보조 역할은로컬넷토폴로지에 지원되는 유일한역할사양입니다. subnets로컬넷토폴로지 유형의 경우 다음은서브넷필드에 대한 구성 세부 정보를 지정합니다.- 서브넷 필드는 선택 사항입니다.
-
서브넷 필드는
문자열유형이며 IPv4와 IPv6 모두에 대한 표준 CIDR 형식을 허용합니다. -
서브넷 필드에는 1~2개의 항목이 허용됩니다. 두 항목은 서로 다른 IP 패밀리에 속해야 합니다. 예를 들어, 서브넷 값은
10.100.0.0/16및2001:db8::/64입니다. -
localnet서브넷은 생략될 수 있습니다. 생략하면 사용자는 포드에 대한 정적 IP 주소를 구성해야 합니다. 결과적으로 포트 보안은 MAC 스푸핑만 방지합니다. 자세한 내용은 "정적 IP 주소로 Pod 구성"을 참조하세요.
다음 명령을 실행하여 요청을 적용하세요.
$ oc create --validate=true -f <example_cluster_udn>.yaml다음과 같습니다.
<example_cluster_udn>.yaml-
Localnet구성 파일의 이름입니다.
다음 명령을 실행하여 요청이 성공했는지 확인하세요.
$ oc get clusteruserdefinednetwork <cudn_name> -o yaml다음과 같습니다.
<cudn_name>- 클러스터 전체 사용자 정의 네트워크에 대해 만든 이름입니다.
예 3.1. 출력 예
apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
creationTimestamp: "2025-05-28T19:30:38Z"
finalizers:
- k8s.ovn.org/user-defined-network-protection
generation: 1
name: cudn-test
resourceVersion: "140936"
uid: 7ff185fa-d852-4196-858a-8903b58f6890
spec:
namespaceSelector:
matchLabels:
"1": "1"
"2": "2"
network:
localnet:
ipam:
lifecycle: Persistent
physicalNetworkName: test
role: Secondary
subnets:
- 192.168.0.0/16
- 2001:dbb::/64
topology: Localnet
status:
conditions:
- lastTransitionTime: "2025-05-28T19:30:38Z"
message: 'NetworkAttachmentDefinition has been created in following namespaces:
[test1, test2]'
reason: NetworkAttachmentDefinitionCreated
status: "True"
type: NetworkCreated
3.1.5.4. 웹 콘솔을 사용하여 ClusterUserDefinedNetwork CR 만들기 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 계층 2 연결을 사용하여 격리된 네트워크 세그먼트를 구현하려면 웹 콘솔을 사용하여 ClusterUserDefinedNetwork CR(사용자 정의 리소스)을 생성합니다. 이 리소스를 정의하면 클러스터 워크로드가 데이터 링크 계층에서 직접 통신할 수 있습니다.
현재 OpenShift Container Platform 웹 콘솔을 사용하는 경우 Layer3 토폴로지를 사용한 ClusterUserDefinedNetwork CR 생성은 지원되지 않습니다.
사전 요구 사항
-
OpenShift Container Platform 웹 콘솔에
cluster-admin권한이 있는 사용자로 로그인합니다. -
네임스페이스를 생성하고
k8s.ovn.org/primary-user-defined-network라벨을 적용했습니다.
프로세스
- 관리자 관점에서 네트워킹 → 사용자 정의 네트워크를 클릭합니다.
- ClusterUserDefinedNetwork를 클릭합니다.
- 이름 필드에서 클러스터 범위 UDN의 이름을 지정합니다.
- 서브넷 필드에 값을 지정합니다.
- 프로젝트 일치 레이블 필드에서 클러스터 UDN이 적용되는 네임스페이스를 선택하기 위해 적절한 레이블을 추가합니다.
- 생성을 클릭합니다. 클러스터 범위 UDN은 5단계에서 지정한 레이블이 포함된 네임스페이스에 있는 포드의 기본 기본 네트워크 역할을 합니다.
3.1.6. UserDefinedNetwork CR에 대하여 링크 복사링크가 클립보드에 복사되었습니다!
고급 네트워크 분할 및 격리를 생성하기 위해 사용자와 관리자는 UDN( UserDefinedNetwork ) CR(사용자 정의 리소스)을 생성합니다. UDN은 특정 네임스페이스 내에서 네트워크 트래픽에 대한 세분화된 제어를 제공합니다.
다음 다이어그램은 4개의 클러스터 네임스페이스를 보여줍니다. 각 네임스페이스에는 하나의 사용자 정의 네트워크(UDN)가 할당되어 있고, 각 UDN에는 해당 Pod IP 할당을 위한 사용자 정의 서브넷이 할당되어 있습니다. OVN-Kubernetes는 중복되는 UDN 서브넷을 처리합니다. Kubernetes 네트워크 정책을 사용하지 않으면 UDN에 연결된 Pod가 해당 UDN의 다른 Pod와 통신할 수 있습니다. 기본적으로 이러한 포드는 다른 UDN에 있는 포드와의 통신이 차단됩니다. 마이크로세그먼테이션의 경우 UDN 내에서 네트워크 정책을 적용할 수 있습니다. 네임스페이스에 하나 이상의 UDN을 할당할 수 있지만, 네임스페이스에는 기본 UDN을 하나만 할당하고, UDN에는 하나 이상의 네임스페이스를 할당할 수 있습니다.
그림 3.4. UserDefinedNetwork CR을 사용한 네임스페이스 격리
3.1.6.1. UserDefinedNetwork CR에 대한 모범 사례 링크 복사링크가 클립보드에 복사되었습니다!
UDN( UserDefinedNetwork ) CR의 성공적인 인스턴스를 배포하려면 가상 IP 주소 요구 사항을 따르고, 기본 및 openshift-* 네임스페이스를 피하고, 적절한 네임스페이스 선택기 구성을 설정하고, 물리적 네트워크 매개변수와 일치하는지 확인해야 합니다.
다음 세부 사항은 UDN CR을 설계하기 위한 모범 사례를 제공합니다.
-
openshift-*네임스페이스는UserDefinedNetworkCR을 설정하는 데 사용해서는 안 됩니다. -
UserDefinedNetworkCR은 기본 네임스페이스에 생성되어서는 안 됩니다. 이로 인해 격리가 이루어지지 않을 수 있으며, 결과적으로 클러스터에 보안 위험이 발생할 수 있습니다. 기본 네트워크의 경우
UserDefinedNetworkCR에 사용되는 네임스페이스에는k8s.ovn.org/primary-user-defined-network레이블이 포함되어야 합니다. 이 레이블은 업데이트할 수 없으며, 네임스페이스가 생성될 때만 추가할 수 있습니다. 다음 조건은k8s.ovn.org/primary-user-defined-network네임스페이스 레이블에 적용됩니다.-
네임스페이스에
k8s.ovn.org/primary-user-defined-network레이블이 없고 포드가 생성되면 포드는 기본 네트워크에 연결됩니다. -
네임스페이스에
k8s.ovn.org/primary-user-defined-network레이블이 없고 네임스페이스와 일치하는 기본UserDefinedNetworkCR이 생성되면 상태 오류가 보고되고 네트워크가 생성되지 않습니다. -
네임스페이스에
k8s.ovn.org/primary-user-defined-network레이블이 없고 기본UserDefinedNetworkCR이 이미 존재하는 경우 네임스페이스에 포드가 생성되어 기본 네트워크에 연결됩니다. -
네임스페이스에 레이블이 있고 기본
UserDefinedNetworkCR이 없는 경우,UserDefinedNetworkCR이 생성될 때까지 네임스페이스에 포드가 생성되지 않습니다.
-
네임스페이스에
사용자 정의 네트워크에는 2개의 가면 IP 주소가 필요합니다. 필요한 수의 네트워크를 수용할 만큼 충분히 크게 매스커레이드 서브넷을 재구성해야 합니다.
중요-
OpenShift Container Platform 4.17 이상에서는 클러스터가 IPv4의 경우
169.254.0.0/17을, IPv6의 경우fd69::/112를기본 마스커레이드 서브넷으로 사용합니다. 사용자는 이러한 범위를 피해야 합니다. 업데이트된 클러스터의 경우 기본 마스커레이드 서브넷에는 변경 사항이 없습니다. -
프로젝트에 대해 사용자 정의 네트워크가 구성된 후에는 클러스터의 마스커레이드 서브넷을 변경하는 것이 지원되지 않습니다.
UserDefinedNetworkCR이 설정된 후에 마스커레이드 서브넷을 수정하려고 하면 네트워크 연결이 중단되고 구성 문제가 발생할 수 있습니다.
-
OpenShift Container Platform 4.17 이상에서는 클러스터가 IPv4의 경우
-
테넌트가
NetworkAttachmentDefinition(NAD) CR이 아닌UserDefinedNetwork리소스를 사용하고 있는지 확인하세요. 이로 인해 세입자 간에 보안 위험이 발생할 수 있습니다. -
네트워크 세분화를 생성할 때
UserDefinedNetworkCR을 사용하여 사용자 정의 네트워크 세분화를 완료할 수 없는 경우에만NetworkAttachmentDefinitionCR을 사용해야 합니다. -
UserDefinedNetworkCR에 대한 클러스터 서브넷 및 서비스 CIDR은 기본 클러스터 서브넷 CIDR과 겹칠 수 없습니다. OVN-Kubernetes 네트워크 플러그인은 네트워크의 기본 조인 서브넷으로100.64.0.0/16을사용합니다. 해당 값을 사용하여UserDefinedNetworkCR의joinSubnets필드를 구성해서는 안 됩니다. 클러스터의 네트워크 어디에서나 기본 주소 값이 사용되는 경우joinSubnets필드를 설정하여 기본값을 재정의해야 합니다. 자세한 내용은 "사용자 정의 네트워크에 대한 추가 구성 세부 정보"를 참조하세요.
3.1.6.2. CLI를 사용하여 UserDefinedNetwork CR 만들기 링크 복사링크가 클립보드에 복사되었습니다!
CLI를 사용하여 네임스페이스 범위 네트워크 분할 및 격리를 활성화하여 특정 네임스페이스 내에서 Pod에 대한 사용자 정의 계층 2 또는 계층 3 네트워크 토폴로지를 정의할 수 있습니다.
다음 절차에서는 네임스페이스 범위가 지정된 UserDefinedNetwork CR을 만듭니다. 사용 사례에 따라 Layer2 토폴로지 유형의 경우 my-layer-two-udn.yaml 예제를 사용하거나 Layer3 토폴로지 유형의 경우 my-layer-three-udn.yaml 예제를 사용하여 요청을 만듭니다.
사전 요구 사항
클러스터 관리자는 네임스페이스를 생성했습니다.
-
네임스페이스를 생성하는 동안
k8s.ovn.org/primary-user-defined-network레이블도 네임스페이스에 적용해야 합니다. -
네임스페이스를 생성한 후
view및edit역할 기반 액세스 제어(RBAC) 권한이 있는 사용자는 네임스페이스에UserDefinedNetworkCR을 생성할 수 있습니다.
-
네임스페이스를 생성하는 동안
프로세스
선택 사항: 기본 네트워크를 사용하는
UserDefinedNetworkCR의 경우 다음 명령을 입력하여k8s.ovn.org/primary-user-defined-network레이블이 있는 네임스페이스를 만듭니다.$ cat << EOF | oc apply -f - apiVersion: v1 kind: Namespace metadata: name: <udn_namespace_name> labels: k8s.ovn.org/primary-user-defined-network: "" EOFLayer2또는Layer3토폴로지 유형에 대한 사용자 정의 네트워크를 만듭니다.다음 예와 같이
Layer2토폴로지에 대한 요청을 정의하려면my-layer-two-udn.yaml과 같은 YAML 파일을 만듭니다.apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: name: udn-1 namespace: <some_custom_namespace> spec: topology: Layer2 layer2:1 role: Primary subnets: - "10.0.0.0/24" - "2001:db8::/60"다음과 같습니다.
name-
UserDefinedNetwork리소스의 이름입니다. 이는기본값이어서는 안 되며 클러스터 네트워크 운영자(CNO)가 생성한 글로벌 네임스페이스와 중복되어서는 안 됩니다. - 토폴로지
-
네트워크 구성을 지정합니다. 허용되는 값은
Layer2및Layer3입니다.Layer2토폴로지 유형을 지정하면 모든 노드에서 공유하는 하나의 논리 스위치가 생성됩니다. role-
기본또는보조역할을 지정합니다. subnetsLayer2토폴로지 유형의 경우 다음은서브넷필드에 대한 구성 세부 정보를 지정합니다.- 서브넷 필드는 선택 사항입니다.
-
서브넷 필드는
문자열유형이며 IPv4와 IPv6 모두에 대한 표준 CIDR 형식을 허용합니다. -
서브넷 필드에는 1~2개의 항목이 허용됩니다. 두 품목은 서로 다른 계열에 속해야 합니다. 예를 들어, 서브넷 값은
10.100.0.0/16및2001:db8::/64입니다. -
Layer2서브넷은 생략될 수 있습니다. 생략하면 사용자는 포드에 대한 IP 주소를 구성해야 합니다. 결과적으로 포트 보안은 MAC 스푸핑만 방지합니다. -
ipamLifecycle필드가 지정된 경우Layer2서브넷필드는 필수입니다.
다음 예와 같이
Layer3토폴로지에 대한 요청을 정의하려면my-layer-three-udn.yaml과 같은 YAML 파일을 만듭니다.apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: name: udn-2-primary namespace: <some_custom_namespace> spec: topology: Layer3 layer3: role: Primary subnets: - cidr: 10.150.0.0/16 hostSubnet: 24 - cidr: 2001:db8::/60 hostSubnet: 64 # ...다음과 같습니다.
name-
UserDefinedNetwork리소스의 이름입니다. 이는기본값이어서는 안 되며 클러스터 네트워크 운영자(CNO)가 생성한 글로벌 네임스페이스와 중복되어서는 안 됩니다. - 토폴로지
-
네트워크 구성을 지정합니다. 허용되는 값은
Layer2및Layer3입니다.Layer2토폴로지 유형을 지정하면 모든 노드에서 공유하는 하나의 논리 스위치가 생성됩니다. role-
기본또는보조역할을 지정합니다. subnetsLayer3토폴로지 유형의 경우 다음은서브넷필드에 대한 구성 세부 정보를 지정합니다.-
서브넷필드는 필수입니다. 서브넷필드의 유형은cidr및hostSubnet입니다.-
cidr은클러스터의clusterNetwork구성 설정과 동일합니다. CIDR의 IP 주소는 사용자 정의 네트워크의 포드에 배포됩니다. 이 매개변수는 문자열 값을 허용합니다. -
hostSubnet은노드별 서브넷 접두사를 정의합니다. -
IPv6의 경우
hostSubnet에 대해/64길이만 지원됩니다.
-
-
다음 명령을 실행하여 요청을 적용하세요.
$ oc apply -f <my_layer_two_udn>.yaml여기서
<my_layer_two_udn>.yaml은Layer2또는Layer3구성 파일의 이름입니다.다음 명령을 실행하여 요청이 성공했는지 확인하세요.
$ oc get userdefinednetworks udn-1 -n <some_custom_namespace> -o yaml여기서
some_custom_namespace는 사용자 정의 네트워크에 대해 생성한 네임스페이스입니다.출력 예
apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: creationTimestamp: "2024-08-28T17:18:47Z" finalizers: - k8s.ovn.org/user-defined-network-protection generation: 1 name: udn-1 namespace: some-custom-namespace resourceVersion: "53313" uid: f483626d-6846-48a1-b88e-6bbeb8bcde8c spec: layer2: role: Primary subnets: - 10.0.0.0/24 - 2001:db8::/60 topology: Layer2 status: conditions: - lastTransitionTime: "2024-08-28T17:18:47Z" message: NetworkAttachmentDefinition has been created reason: NetworkAttachmentDefinitionReady status: "True" type: NetworkCreated
3.1.6.3. 웹 콘솔을 사용하여 UserDefinedNetwork 만들기 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 계층 2 연결을 사용하여 격리된 네트워크 세그먼트를 구현하려면 웹 콘솔을 사용하여 UserDefinedNetwork CR(사용자 정의 리소스)을 생성합니다. 이 리소스를 정의하면 클러스터 워크로드가 데이터 링크 계층에서 직접 통신할 수 있습니다.
현재 OpenShift Container Platform 웹 콘솔을 사용하는 경우 Layer3 토폴로지 또는 보조 역할이 있는 UserDefinedNetwork CR을 생성하는 것은 지원되지 않습니다.
사전 요구 사항
클러스터 관리자는 네임스페이스를 생성했습니다.
-
네임스페이스를 생성하는 동안
k8s.ovn.org/primary-user-defined-network레이블도 네임스페이스에 적용해야 합니다. -
네임스페이스를 생성한 후
view및edit역할 기반 액세스 제어(RBAC) 권한이 있는 사용자는 네임스페이스에UserDefinedNetworkCR을 생성할 수 있습니다.
-
네임스페이스를 생성하는 동안
프로세스
- 관리자 관점에서 네트워킹 → 사용자 정의 네트워크를 클릭합니다.
- 사용자 정의 네트워크 만들기를 클릭합니다.
- 프로젝트 이름 목록에서 이전에 만든 네임스페이스를 선택합니다.
- 서브넷 필드에 값을 지정합니다.
- 생성을 클릭합니다. 사용자 정의 네트워크는 이 네임스페이스에서 생성하는 포드의 기본 기본 네트워크 역할을 합니다.
3.1.7. 사용자 정의 네트워크에 대한 추가 구성 세부 정보 링크 복사링크가 클립보드에 복사되었습니다!
기본값이 네트워크 토폴로지와 충돌하거나 영구 IP 주소, 사용자 지정 게이트웨이 또는 특정 서브넷 구성이 필요한 경우 Cluster CR에 대한 선택적 고급 설정을 구성합니다.
UserDefinedNetwork
OVN-Kubernetes 네트워크 토폴로지에 대한 명확한 필요성과 이해가 없이 이러한 필드를 설정하는 것은 권장되지 않습니다.
- 사용자 정의 네트워크에 대한 선택적 구성
| CUDN 필드 | UDN 필드 | 유형 | 설명 |
|
|
| object |
생략하면 플랫폼은 IPv4의 경우
|
|
|
| string |
|
|
|
| object |
Persistent 값을 설정하는 것은 |
|
|
| object |
|
|
|
| integer |
최대 전송 단위(MTU). 기본값은 |
|
| 해당 없음 | object | 이 필드는 선택 사항이며 가상 LAN(Local Area Network) 태그를 구성하고 물리적 네트워크를 여러 개의 독립적인 브로드캐스트 도메인으로 분할할 수 있습니다. |
|
| 해당 없음 | object |
허용되는 값은 |
|
| 해당 없음 | string |
물리적 네트워크 인터페이스의 이름을 지정합니다. 지정하는 값은 Open vSwitch(OVS) 브리지 매핑에서 제공한 |
다음과 같습니다.
<topology>-
UserDefinedNetworkCR의 경우layer2또는layer3이될 수 있습니다.ClusterUserDefinedNetworkCR의 경우 토폴로지는Localnet이될 수도 있습니다.
3.1.8. 사용자 정의 네트워크 상태 조건 유형 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 네트워크 배포의 문제를 해결하려면 Cluster 및 CR(사용자 정의 리소스)에 대해 반환된 상태 조건 유형을 평가합니다. 이러한 조건을 검토하면 구성 오류를 식별하고 해결할 수 있습니다.
UserDefinedNetwork
| 조건 유형 | 상태 | 이유와 메시지 | |
|---|---|---|---|
|
|
|
| |
| 이유 | 메시지 | ||
|
| 'NetworkAttachmentDefinition이 다음 네임스페이스에 생성되었습니다: [example-namespace-1, example-namespace-2, example-namespace-3]' | ||
|
|
|
| |
| 이유 | 메시지 | ||
|
|
| ||
|
|
| ||
|
|
| ||
|
|
| ||
|
|
| ||
|
|
| ||
|
|
| ||
| 조건 유형 | 상태 | 이유와 메시지 | |
|---|---|---|---|
|
|
|
| |
| 이유 | 메시지 | ||
|
|
| ||
|
|
|
| |
| 이유 | 메시지 | ||
|
|
| ||
| 조건 유형 | 이유, 메시지, 해결책 | ||
|---|---|---|---|
|
|
| ||
| 이유 | 메시지 | 해결 | |
|
|
본문의 |
| |
|
|
본문의 |
| |
|
IPv6 서브넷을 사용하는 경우 |
|
사용자 정의 네트워크 구성에 IPv6 서브넷이 정의된 경우 | |
| 조건 유형 | 이유, 메시지, 해결책 | ||
|---|---|---|---|
|
|
| ||
| 이유 | 메시지 | 해결 | |
| 물리적 네트워크의 이름이 설정되지 않았습니다. |
|
| |
| 물리적 네트워크의 이름이 최소 길이 요구 사항을 충족하지 않습니다. |
| 실제 네트워크 이름은 최소 1자 이상으로 설정해야 합니다. | |
| 물리적 네트워크 이름이 최대 문자 수인 253자를 초과했습니다. |
| 물리적 네트워크 이름은 253자를 넘지 않도록 설정해야 합니다. | |
|
물리적 네트워크의 이름에는 |
|
물리적 네트워크 이름에서 | |
| 조건 유형 | 이유, 메시지, 해결책 | ||
|---|---|---|---|
|
|
| ||
| 이유 | 메시지 | 해결 | |
|
로컬넷 토폴로지에 대한 |
|
| |
|
|
|
Localnet 토폴로지의 | |
| 조건 유형 | 이유, 메시지, 해결책 | ||
|---|---|---|---|
|
|
| ||
| 이유 | 메시지 | 해결 | |
|
선택 필드인 |
|
| |
|
이 선택적 필드를 사용할 때 |
|
| |
|
선택적 |
|
| |
|
|
|
| |
| CIDR 범위가 잘못되었습니다. |
|
| |
|
|
|
| |
|
|
| CIDR 범위 중 하나를 다른 IP 패밀리로 변경해야 합니다. | |
|
|
|
선택적 필드 | |
| 조건 유형 | 이유, 메시지, 해결책 | ||
|---|---|---|---|
|
|
| ||
| 이유 | 메시지 | 해결 | |
|
|
|
| |
|
|
|
| |
|
|
|
| |
|
|
|
| |
|
|
|
| |
3.1.9. 사용자 정의 네트워크 포드에서 기본 네트워크 포트 열기 링크 복사링크가 클립보드에 복사되었습니다!
기본 네트워크 포드가 사용자 정의 네트워크 포드에 연결되도록 하려면 k8s.ovn.org/open-default-ports 주석을 사용하면 됩니다. 이 주석은 기본 네트워크에서 액세스할 수 있도록 사용자 정의 네트워크 포드의 특정 포트를 엽니다.
기본적으로 사용자 정의 네트워크(UDN)의 포드는 기본 네트워크와 격리됩니다. 즉, Prometheus 또는 Alertmanager와 같은 모니터링 서비스나 OpenShift Container Platform 이미지 레지스트리를 실행하는 기본 네트워크 포드는 UDN 포드에 대한 연결을 시작할 수 없습니다.
다음 Pod 사양은 기본 네트워크에서 포트 80 에서 들어오는 TCP 연결과 포트 53 에서 UDP 트래픽을 허용합니다.
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.ovn.org/open-default-ports: |
- protocol: tcp
port: 80
- protocol: udp
port: 53
# ...
열려 있는 포트는 UDN 네트워크 IP가 아닌 포드의 기본 네트워크 IP에서 접근할 수 있습니다.
3.2. NetworkAttachmentDefinition을 사용하여 기본 네트워크 만들기 링크 복사링크가 클립보드에 복사되었습니다!
NetworkAttachmentDefinition (NAD) 리소스를 사용하여 OVN-Kubernetes 이외의 CNI 플러그인(예: IPVLAN 또는 MACVLAN)을 사용해야 하거나 고급 네트워킹 시나리오에 대해 CNI(Container Network Interface) 구성을 직접 제어해야 하는 경우 기본 네트워크를 생성합니다.
3.2.1. 1차 네트워크 관리 접근 방식 링크 복사링크가 클립보드에 복사되었습니다!
CNO(Cluster Network Operator) 또는 YAML 매니페스트를 통해 sendD CR에서 생성한 기본 네트워크의 라이프 사이클을 관리할 수 있습니다. CNO를 사용하면 네트워크 리소스를 자동으로 관리하는 동안 YAML 매니페스트를 적용하여 네트워크 구성을 직접 제어할 수 있습니다.
- CNO(Cluster Network Operator) 구성 수정
-
이 방법을 사용하면 CNO가
NetworkAttachmentDefinition객체를 자동으로 생성하고 관리합니다. CNO는 개체 수명 주기를 관리하는 것 외에도 DHCP가 할당된 IP 주소를 사용하는 기본 네트워크에서 DHCP를 사용할 수 있는지 확인합니다. - YAML 매니페스트 적용
-
이 방법을 사용하면
NetworkAttachmentDefinition객체를 생성하여 기본 네트워크를 직접 관리할 수 있습니다. 이 접근 방식을 사용하면 포드에 기본 네트워크 인터페이스를 연결하기 위해 여러 CNI 플러그인을 호출할 수 있습니다.
각 접근 방식은 상호 배타적이며 한 번에 하나의 기본 네트워크를 관리하는 데 하나의 접근 방식만 사용할 수 있습니다. 두 가지 접근 방식 모두 기본 네트워크는 사용자가 구성하는 CNI(컨테이너 네트워크 인터페이스) 플러그인을 통해 관리됩니다.
OVN SDN을 사용하여 Red Hat OpenStack Platform(RHOSP)에 여러 네트워크 인터페이스가 있는 OpenShift Container Platform 노드를 배포하는 경우, 보조 인터페이스의 DNS 구성이 기본 인터페이스의 DNS 구성보다 우선할 수 있습니다. 이 경우 다음 명령을 실행하여 보조 인터페이스에 연결된 서브넷 ID에 대한 DNS 네임 서버를 제거합니다.
$ openstack subnet set --dns-nameserver 0.0.0.0 <subnet_id>
3.2.2. 클러스터 네트워크 운영자를 사용하여 기본 네트워크 연결 만들기 링크 복사링크가 클립보드에 복사되었습니다!
CNO(Cluster Network Operator)를 사용하여 생성할 기본 네트워크를 지정하면 (CNO) NetworkAttachmentDefinition CRD(사용자 정의 리소스 정의)를 자동으로 생성하고 관리합니다.
CNO가 관리하는 NetworkAttachmentDefinition CR을 편집하지 마십시오. 그렇게 하면 기본 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 로그인합니다.
프로세스
선택 사항: 기본 네트워크에 대한 네임스페이스를 만듭니다.
$ oc create namespace <namespace_name>구성을 편집하려면 다음 명령을 입력합니다.
$ oc edit networks.operator.openshift.io cluster아래의 예제 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" } ] } }- 변경 사항을 저장하고 텍스트 편집기를 종료하여 변경 사항을 커밋합니다.
검증
CNO가 다음 명령을 실행하여
NetworkAttachmentDefinitionCR을 생성했는지 확인합니다. CNO가 CRD를 생성하기 전에 지연이 발생할 수 있습니다. 예상되는 출력에는 NAD CRD의 이름과 생성 시간(분)이 표시됩니다.$ oc get network-attachment-definitions -n <namespace>다음과 같습니다.
<namespace>- CNO 구성에 추가한 네트워크 연결에 대한 네임스페이스를 지정합니다.
3.2.3. 기본 네트워크 연결을 위한 구성 링크 복사링크가 클립보드에 복사되었습니다!
k8s.cni.cncf.io API 그룹에서 NetworkAttachmentDefinition API를 사용하여 기본 네트워크를 구성합니다.
API 구성은 다음 표에 설명되어 있습니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
| 기본 네트워크의 이름입니다. |
|
|
| 오브젝트와 연결된 네임스페이스입니다. |
|
|
| JSON 형식의 CNI 플러그인 구성입니다. |
3.2.4. YAML 매니페스트를 적용하여 기본 네트워크 연결 만들기 링크 복사링크가 클립보드에 복사되었습니다!
NetworkAttachmentDefinition YAML 매니페스트를 직접 적용하여 기본 네트워크 연결을 생성합니다. 그러면 Cluster Network Operator에 의존하지 않고 네트워크 구성을 완전히 제어하여 리소스를 자동으로 관리할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. -
cluster-admin권한이 있는 사용자로 로그인했습니다. - NAD가 배포될 네임스페이스에서 작업하고 있습니다.
프로세스
다음 예와 같이 기본 네트워크 구성을 포함하는 YAML 파일을 만듭니다.
apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: next-net spec: config: |- { "cniVersion": "0.3.1", "name": "work-network", "namespace": "namespace2", "type": "host-device", "device": "eth1", "ipam": { "type": "dhcp" } }-
선택 사항: NAD가 적용되는 네임스페이스를 지정할 수 있습니다. CryostatD를 배포해야 하는 네임스페이스에서 작업하는 경우
네임스페이스사양이 필요하지 않습니다.
-
선택 사항: NAD가 적용되는 네임스페이스를 지정할 수 있습니다. CryostatD를 배포해야 하는 네임스페이스에서 작업하는 경우
기본 네트워크를 생성하려면 다음 명령을 입력하세요.
$ oc apply -f <file>.yaml다음과 같습니다.
<file>- YAML 매니페스트가 포함된 파일의 이름을 지정합니다.
4장. 2차 네트워크 링크 복사링크가 클립보드에 복사되었습니다!
4.1. OVN-Kubernetes에서 보조 네트워크 생성 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 NetworkAttachmentDefinition (NAD) 리소스를 사용하여 클러스터에 대한 보조 네트워크를 구성할 수 있습니다.
4.1.1. OVN-Kubernetes 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenShift Networking OVN-Kubernetes 네트워크 플러그인을 사용하면 포드에 대한 보조 네트워크 인터페이스를 구성할 수 있습니다. 보조 네트워크 인터페이스를 구성하려면 NetworkAttachmentDefinition 사용자 정의 리소스 정의(CRD)에서 구성을 정의해야 합니다.
Pod 및 다중 네트워크 정책 생성은 노드의 OVN-Kubernetes 제어 평면 에이전트가 연관된 네트워크 연결 정의 CRD를 처리할 때까지 보류 상태로 유지될 수 있습니다.
OVN-Kubernetes 보조 네트워크를 2계층, 3계층 또는 로컬넷 토폴로지로 구성할 수 있습니다. 이러한 토폴로지에서 지원되는 기능에 대한 자세한 내용은 "UserDefinedNetwork 및 NetworkAttachmentDefinition 지원 매트릭스"를 참조하세요.
다음 섹션에서는 OVN-Kubernetes가 현재 보조 네트워크에 허용하는 각 토폴로지에 대한 구성 예를 제공합니다.
네트워크 이름은 고유해야 합니다. 예를 들어, 동일한 네트워크를 참조하는 서로 다른 구성을 가진 여러 NetworkAttachmentDefinition CRD를 만드는 것은 지원되지 않습니다.
4.1.1.1. OVN-Kubernetes 보조 네트워크에 지원되는 플랫폼 링크 복사링크가 클립보드에 복사되었습니다!
다음 지원 플랫폼에서 OVN-Kubernetes 보조 네트워크를 사용할 수 있습니다.
- 베어 메탈
- IBM Power®
- IBM Z®
- IBM® LinuxONE
- VMware vSphere
- Red Hat OpenStack Platform (RHOSP)
4.1.1.2. OVN-Kubernetes 네트워크 플러그인 JSON 구성 테이블 링크 복사링크가 클립보드에 복사되었습니다!
OVN-Kubernetes 네트워크 플러그인 JSON 구성 객체는 OVN-Kubernetes CNI 네트워크 플러그인에 대한 구성 매개변수를 설명합니다. 다음 표에서는 이러한 매개변수에 대한 자세한 내용을 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 필요한 값은 |
|
|
|
네트워크의 이름. 이러한 네트워크는 네임스페이스가 없습니다. 예를 들어, |
|
|
|
구성할 CNI 플러그인의 이름입니다. 이 값은 |
| 토폴로지 |
|
네트워크의 토폴로지 구성. |
|
|
| 클러스터 전반의 네트워크에 사용할 서브넷입니다.
생략하면 네트워크를 구현하는 논리적 스위치는 2계층 통신만 제공하고 사용자는 포드에 대한 IP 주소를 구성해야 합니다. 포트 보안은 MAC 스푸핑만 방지합니다. |
|
|
| 최대 전송 단위(MTU) 값을 설정하지 않으면 클러스터 네트워크 운영자(CNO)가 기본 네트워크 인터페이스의 언더레이 MTU, Geneve(일반 네트워크 가상화 캡슐화)와 같은 Pod 네트워크의 오버레이 MTU, IPsec과 같은 활성화된 기능의 바이트 용량의 차이를 계산하여 기본 MTU 값을 설정합니다. |
|
|
|
이 구성이 포함되는 네트워크 연결 정의 CRD의 메타데이터 |
|
|
| CIDR과 IP 주소를 쉼표로 구분한 목록입니다. IP 주소는 할당 가능한 IP 주소 풀에서 제거되며 결코 포드에 전달되지 않습니다. |
|
|
|
토폴로지가 |
|
|
|
토폴로지가 |
4.1.1.3. 다중 네트워크 정책과의 호환성 링크 복사링크가 클립보드에 복사되었습니다!
네트워크 정책을 정의할 때 사용할 수 있는 네트워크 정책 규칙은 OVN-Kubernetes 보조 네트워크에서 서브넷 필드를 정의하는지 여부에 따라 달라집니다.
k8s.cni.cncf.io API 그룹의 MultiNetworkPolicy 사용자 정의 리소스 정의(CRD)가 제공하는 다중 네트워크 정책 API는 OVN-Kubernetes 보조 네트워크와 호환됩니다.
서브넷 CNI 구성을 기반으로 지원되는 다중 네트워크 정책 선택기에 대한 자세한 내용은 다음 표를 참조하세요.
서브넷 필드가 지정됨 | 허용된 다중 네트워크 정책 선택기 |
|---|---|
| 제공됨 |
|
| 없음 |
|
MultiNetworkPolicy 객체에서 k8s.v1.cni.cncf.io/policy-for 주석을 사용하여 NetworkAttachmentDefinition (NAD) 사용자 정의 리소스(CR)를 가리킬 수 있습니다. NAD CR은 정책이 적용되는 네트워크를 정의합니다. 포드 선택기를 사용하는 다음 예제 다중 네트워크 정책은 blue2 라는 보조 네트워크에 대한 보조 네트워크 CNI 구성에서 서브넷 필드가 정의된 경우에만 유효합니다.
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
4.1.1.4. 로컬넷 스위치 토폴로지에 대한 구성 링크 복사링크가 클립보드에 복사되었습니다!
스위치드 로컬 넷 토폴로지는 클러스터 전체의 논리적 스위치를 통해 네트워크 연결 정의(NAD)로 생성된 작업 부하를 물리적 네트워크로 상호 연결합니다.
여러 CryostatD를 만들 때 각 CryostatD가 고유한 VLAN ID 번호를 참조하는지 확인합니다. 두 구현이 동일한 VLAN ID를 참조하는 경우 OVN-Kubernetes 네트워크 플러그인에 네트워킹 문제가 발생합니다.
OVN-Kubernetes 보조 네트워크로 사용하려면 보조 네트워크를 OVS 브리지에 매핑해야 합니다. 브리지 매핑을 통해 네트워크 트래픽이 물리적 네트워크에 도달할 수 있습니다. 브리지 매핑은 인터페이스 레이블이라고도 하는 물리적 네트워크 이름을 Open vSwitch(OVS)로 생성된 브리지에 연결합니다.
nmstate.io/v1 API 그룹의 일부인 NodeNetworkConfigurationPolicy (NNCP) 객체를 생성하여 매핑을 선언적으로 생성할 수 있습니다. 이 API는 NMState Operator가 제공합니다. 이 API를 사용하면 지정한 nodeSelector 표현식(예: node-role.kubernetes.io/worker: '' ) 과 일치하는 노드에 브리지 매핑을 적용할 수 있습니다. 이러한 선언적 접근 방식을 통해 NMState 연산자는 노드 선택기에서 지정한 모든 노드에 보조 네트워크 구성을 자동적이고 투명하게 적용합니다.
보조 네트워크를 연결할 때 기존 br-ex 브리지를 사용하거나 새 브리지를 만들 수 있습니다. 어떤 접근 방식을 사용할지는 사용자의 특정 네트워크 인프라에 따라 달라집니다. 다음 접근 방식을 고려해보세요.
-
노드에 네트워크 인터페이스가 하나만 있는 경우 기존 브리지를 사용해야 합니다. 이 네트워크 인터페이스는 OVN-Kubernetes가 소유 및 관리하며,
br-ex브리지에서 제거하거나 인터페이스 구성을 변경해서는 안 됩니다. 네트워크 인터페이스를 제거하거나 변경하면 클러스터 네트워크가 제대로 작동하지 않습니다. - 노드에 여러 개의 네트워크 인터페이스가 포함되어 있는 경우 다른 네트워크 인터페이스를 새 브리지에 연결하고 이를 보조 네트워크에 사용할 수 있습니다. 이 접근 방식은 기본 클러스터 네트워크로부터 트래픽을 격리합니다.
NodeNetworkConfigurationPolicy (NNCP) 리소스의 br-ex 브리지 또는 해당 기본 인터페이스를 설치 후 작업으로 변경할 수 없습니다. 이 문제를 해결하려면 호스트 또는 스위치에 연결된 보조 네트워크 인터페이스를 사용합니다.
다음의 공유 브리지 예제에서는 localnet1 네트워크가 br-ex 브리지에 매핑됩니다.
apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
name: mapping
spec:
nodeSelector:
node-role.kubernetes.io/worker: ''
desiredState:
ovn:
bridge-mappings:
- localnet: localnet1
bridge: br-ex
state: present
다음과 같습니다.
metadata.name- 구성 객체의 이름입니다.
spec.nodeSelector.node-role.kubernetes.io/worker- 노드 네트워크 구성 정책을 적용할 노드를 지정하는 노드 선택기입니다.
spec.desiredState.ovn.bridge-mappings.localnet-
트래픽이 OVS 브리지로 전달되는 보조 네트워크의 이름입니다. 이 보조 네트워크는 OVN-Kubernetes 보조 네트워크를 정의하는
NetworkAttachmentDefinitionCRD의spec.config.name필드 이름과 일치해야 합니다. spec.desiredState.ovn.bridge-mappings.bridge-
노드에 있는 OVS 브리지의 이름입니다. 이 값은
state: present를지정한 경우에만 필요합니다. spec.desiredState.ovn.bridge-mappings.state-
매핑에 대한 상태입니다. 브리지를 추가하려면
존재해야 하고, 브리지를 제거하려면없어야 합니다. 기본값은present입니다.
다음 JSON 예제는 localnet1 이라는 이름의 localnet 보조 네트워크를 구성합니다. mtu 매개변수 값은 br-ex 브리지 인터페이스에 매핑된 보조 네트워크 인터페이스에 설정된 MTU 값과 일치해야 합니다.
{
"cniVersion": "0.3.1",
"name": "localnet1",
"type": "ovn-k8s-cni-overlay",
"topology":"localnet",
"physicalNetworkName": "localnet1",
"subnets": "202.10.130.112/28",
"vlanID": 33,
"mtu": 1500,
"netAttachDefName": "ns1/localnet-network",
"excludeSubnets": "10.100.200.0/29"
}
다음의 다중 인터페이스 예에서 localnet2 네트워크 인터페이스는 ovs-br1 브리지에 연결됩니다. 이 첨부 파일을 통해 네트워크 인터페이스를 OVN-Kubernetes 네트워크 플러그인에서 보조 네트워크로 사용할 수 있습니다.
apiVersion: nmstate.io/v1
kind: NodeNetworkConfigurationPolicy
metadata:
name: ovs-br1-multiple-networks
spec:
nodeSelector:
node-role.kubernetes.io/worker: ''
desiredState:
interfaces:
- name: ovs-br1
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
mcast-snooping-enable: true
port:
- name: eth1
ovn:
bridge-mappings:
- localnet: localnet2
bridge: ovs-br1
state: present
다음과 같습니다.
metadata.name- 구성 개체의 이름을 지정합니다.
node-role.kubernetes.io/worker- 노드 네트워크 구성 정책이 적용되는 노드를 식별하는 노드 선택기를 지정합니다.
desiredState.interfaces.name- OVN-Kubernetes에서 클러스터 트래픽에 사용하는 기본 브리지와 별도로 작동하는 새로운 OVS 브리지를 지정합니다.
options.mcast-snooping-enable-
멀티캐스트 스누핑을 활성화할지 여부를 지정합니다. 멀티캐스트 스누핑을 활성화하면 네트워크 장치가 모든 네트워크 구성원에게 멀티캐스트 트래픽을 플러딩하는 것을 방지할 수 있습니다. 기본적으로 OVS 브리지는 멀티캐스트 스누핑을 활성화하지 않습니다. 기본값은
false입니다. bridge.port.name- 새로운 OVS 브리지와 연결할 호스트 시스템의 네트워크 장치를 지정합니다.
ovn.bridge-mappings.localnet-
OVS 브리지로 트래픽을 전달하는 보조 네트워크의 이름을 지정합니다. 이 이름은 OVN-Kubernetes 보조 네트워크를 정의하는
NetworkAttachmentDefinitionCRD의spec.config.name필드 값과 일치해야 합니다. ovn.bridge-mappings.bridge-
노드의 OVS 브리지 이름을 지정합니다. 이 값은
state: present가설정된 경우에만 필요합니다. ovn.bridge-mappings.state-
매핑 상태를 지정합니다. 브리지를 추가하려면 유효한 값이
존재하고, 브리지를 제거하려면 유효한 값이 없습니다. 기본값은present입니다.
다음 JSON 예제는 localnet2 라는 이름의 localnet 보조 네트워크를 구성합니다. mtu 매개변수 값은 eth1 보조 네트워크 인터페이스에 설정된 MTU 값과 일치해야 합니다.
{
"cniVersion": "0.3.1",
"name": "localnet2",
"type": "ovn-k8s-cni-overlay",
"topology":"localnet",
"physicalNetworkName": "localnet2",
"subnets": "202.10.130.112/28",
"vlanID": 33,
"mtu": 1500,
"netAttachDefName": "ns1/localnet-network",
"excludeSubnets": "10.100.200.0/29"
}
4.1.1.4.1. 2계층 스위치 토폴로지에 대한 구성 링크 복사링크가 클립보드에 복사되었습니다!
스위치드(2계층) 토폴로지 네트워크는 클러스터 전체의 논리적 스위치를 통해 작업 부하를 상호 연결합니다. 이 구성은 IPv6 및 듀얼 스택 배포에 사용할 수 있습니다.
2계층 스위치 토폴로지 네트워크는 클러스터 내의 포드 간 데이터 패킷 전송만 허용합니다.
다음 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"
}
4.1.1.5. 보조 네트워크에 대한 포드 구성 링크 복사링크가 클립보드에 복사되었습니다!
k8s.v1.cni.cncf.io/networks 주석을 통해 보조 네트워크 연결을 지정해야 합니다.
다음 예제에서는 이 가이드에 제시된 각 부착 구성에 대해 하나씩, 두 개의 보조 부착물이 있는 포드를 제공합니다.
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
4.1.1.6. 고정 IP 주소로 포드 구성 링크 복사링크가 클립보드에 복사되었습니다!
정적 IP 주소로 포드를 구성할 수 있습니다. 절차의 예에서는 정적 IP 주소가 있는 포드를 제공합니다.
- 네임스페이스 범위 객체인 보조 네트워크 연결이 레이어 2 또는 로컬넷 토폴로지를 사용하는 경우에만 포드의 보조 네트워크 연결에 대한 IP 주소를 지정할 수 있습니다.
- 포드에 대한 정적 IP 주소를 지정하는 것은 첨부 파일 구성에 서브넷이 없는 경우에만 가능합니다.
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.v1.cni.cncf.io/networks: '[
{
"name": "l2-network",
"mac": "02:03:04:05:06:07",
"interface": "myiface1",
"ips": [
"192.0.2.20/24"
]
}
]'
name: tinypod
namespace: ns1
spec:
containers:
- args:
- pause
image: k8s.gcr.io/e2e-test-images/agnhost:2.36
imagePullPolicy: IfNotPresent
name: agnhost-container
다음과 같습니다.
k8s.v1.cni.cncf.io/networks.name-
네트워크의 이름. 이 값은 모든
NetworkAttachmentDefinitionCRD에서 고유해야 합니다. k8s.v1.cni.cncf.io/networks.mac- 인터페이스에 할당할 MAC 주소입니다.
k8s.v1.cni.cncf.io/networks.interface- Pod에 대해 생성될 네트워크 인터페이스의 이름입니다.
k8s.v1.cni.cncf.io/networks.ips- 네트워크 인터페이스에 할당할 IP 주소입니다.
4.2. 다른 CNI 플러그인을 사용하여 보조 네트워크 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 보조 네트워크의 구체적인 구성 필드에 대해 설명합니다.
4.2.1. 브리지 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
브리지 CNI 플러그인 JSON 구성 오브젝트는 브리지 CNI 플러그인의 구성 매개변수를 설명합니다.
다음 표에서는 구성 매개변수에 대한 자세한 내용을 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 최소 |
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
구성할 CNI 플러그인의 이름: |
|
|
| IPAM CNI 플러그인에 대한 구성 개체입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다. |
| Bridge |
|
선택 사항: 사용할 가상 브리지의 이름을 지정합니다. 호스트에 브리지 인터페이스가 없으면 브리지 인터페이스가 생성됩니다. 기본값은 |
|
|
|
가상 네트워크에서 전송되는 트래픽에 IP 마스커레이딩을 사용하려면 |
|
|
|
선택 사항: 컨테이너 인터페이스( |
|
|
|
선택 사항: 브리지에 IP 주소를 할당하려면 |
|
|
|
브릿지를 가상 네트워크의 기본 게이트웨이로 구성하려면 |
|
|
|
이전에 할당된 IP 주소를 가상 브리지에 할당할 수 있도록 하려면 |
|
|
|
가상 브릿지가 수신한 가상 포트를 통해 이더넷 프레임을 다시 보낼 수 있도록 하려면 |
|
|
|
브릿지에서 무차별 모드를 사용하려면 |
|
|
| 선택 사항: 가상 LAN(VLAN) 태그를 정수 값으로 지정합니다. 기본적으로 VLAN 태그는 할당되지 않습니다. |
|
|
|
선택 사항: 브리지에 연결된 |
|
|
|
선택 사항: |
|
|
|
선택 사항: VLAN 트렁크 태그를 할당합니다. 기본값은 |
|
|
| 최대 전송 단위(MTU)를 지정된 값으로 설정합니다. 기본값은 커널에 의해 자동으로 설정됩니다. |
|
|
|
선택 사항: 컨테이너 측 |
|
|
|
선택 사항: Mac 스푸핑 검사를 활성화하여 컨테이너에서 발생하는 트래픽을 인터페이스의 MAC 주소로 제한합니다. 기본값은 |
VLAN 매개변수는 veth 의 호스트 측에서 VLAN 태그를 구성하고 브리지 인터페이스에서 vlan_filtering 기능도 활성화합니다.
L2 네트워크에 대한 업링크를 구성하려면 다음 명령을 사용하여 업링크 인터페이스에서 VLAN을 허용해야 합니다.
$ bridge vlan add vid VLAN_ID dev DEV
4.2.1.1. Bridge CNI 플러그인 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 bridge-net 이라는 보조 네트워크를 구성합니다.
{
"cniVersion": "0.3.1",
"name": "bridge-net",
"type": "bridge",
"isGateway": true,
"vlan": 2,
"ipam": {
"type": "dhcp"
}
}
4.2.2. Bond CNI 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
Bond Container Network Interface(Bond CNI)를 사용하면 컨테이너 내에서 여러 네트워크 인터페이스를 단일 논리적 본딩 인터페이스로 집계할 수 있어 네트워크 중복성과 내결함성이 향상됩니다. 이 플러그인을 사용하면 SR-IOV 가상 함수(VF)만 본딩할 수 있습니다.
다음 표에서는 Bond CNI 플러그인의 구성 매개변수를 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
CNI 사양 버전. 최소 |
|
|
|
구성할 CNI 플러그인의 이름을 지정합니다: |
|
|
| ARP(주소 확인 프로토콜) 링크 모니터링 빈도를 밀리초 단위로 지정합니다. 이 매개변수는 본드 인터페이스가 집계된 인터페이스의 가용성을 확인하기 위해 ARP 요청을 얼마나 자주 보내는지 정의합니다. |
|
|
|
선택 사항: 본드의 최대 전송 단위(MTU)를 지정합니다. 기본값은 |
|
|
|
선택 사항: 본드에 대한 |
|
|
| 결속 정책을 지정합니다. |
|
|
|
선택 사항: 본딩이 시작될 때 본딩을 위한 네트워크 인터페이스가 컨테이너의 네트워크 네임스페이스 내에서 직접 생성되어 사용할 수 있는지 여부를 지정합니다. 기본값이 |
|
|
| 본딩할 인터페이스를 지정합니다. |
|
|
| IPAM CNI 플러그인에 대한 구성 개체입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다. |
4.2.2.1. Bond CNI 플러그인 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 bond-net1 이라는 이름의 보조 네트워크를 구성합니다.
{
"type": "bond",
"cniVersion": "0.3.1",
"name": "bond-net1",
"mode": "active-backup",
"failOverMac": 1,
"linksInContainer": true,
"miimon": "100",
"mtu": 1500,
"links": [
{"name": "net1"},
{"name": "net2"}
],
"ipam": {
"type": "host-local",
"subnet": "10.56.217.0/24",
"routes": [{
"dst": "0.0.0.0/0"
}],
"gateway": "10.56.217.1"
}
}
4.2.3. 호스트 장치 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
호스트 장치 CNI 플러그인 JSON 구성 개체는 호스트 장치 CNI 플러그인의 구성 매개변수를 설명합니다.
device, hwaddr, kernelpath 또는 pciBusID 매개변수 중 하나만 설정하여 네트워크 장치를 지정합니다.
다음 표에서는 구성 매개변수에 대한 자세한 내용을 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 최소 |
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
구성할 CNI 플러그인의 이름: |
|
|
|
선택 사항: |
|
|
| 선택 사항: 장치 하드웨어 MAC 주소. |
|
|
|
Linux 커널 장치 경로(예: |
|
|
|
네트워크 장치의 PCI 주소를 지정합니다(예: |
4.2.3.1. 호스트 장치 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 hostdev-net 이라는 보조 네트워크를 구성합니다.
{
"cniVersion": "0.3.1",
"name": "hostdev-net",
"type": "host-device",
"device": "eth1"
}
4.2.4. 더미 장치 추가 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
더미 CNI 플러그인은 루프백 장치처럼 작동합니다. 이 플러그인은 가상 인터페이스이며, 플러그인을 사용하여 패킷을 지정된 IP 주소로 라우팅할 수 있습니다. 루프백 장치와 달리 IP 주소는 임의적이며 127.0.0.0/8 주소 범위로 제한되지 않습니다.
더미 장치 CNI 플러그인 JSON 구성 개체는 더미 CNI 플러그인의 구성 매개변수를 설명합니다. 다음 표에서는 이러한 매개변수에 대한 자세한 내용을 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 최소 |
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
구성하려는 CNI 플러그인의 이름입니다. 필수 값은 |
|
|
| IPAM CNI 플러그인에 대한 구성 개체입니다. 이 플러그인은 첨부 정의에 대한 IP 주소 할당을 관리합니다. |
4.2.4.1. 더미 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제는 이름이 hostdev-net인 추가 네트워크를 구성합니다.
{
"cniVersion": "0.3.1",
"name": "dummy-net",
"type": "dummy",
"ipam": {
"type": "host-local",
"subnet": "10.1.1.0/24"
}
}
4.2.5. VLAN 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
VLAN CNI 플러그인 JSON 구성 개체는 VLAN, vlan , CNI 플러그인에 대한 구성 매개변수를 설명합니다. 다음 표에서는 이러한 매개변수에 대한 자세한 내용을 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 최소 |
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
구성할 CNI 플러그인의 이름: |
|
|
|
네트워크 연결과 연결할 이더넷 인터페이스를 지정합니다. |
|
|
|
|
|
|
| IPAM CNI 플러그인에 대한 구성 개체입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다. |
|
|
| 최대 전송 단위(MTU)를 지정된 값으로 설정합니다. 기본값은 커널에 의해 자동으로 설정됩니다. |
|
|
| 선택 사항: 반환할 DNS 정보입니다. 예를 들어, DNS 네임서버의 우선순위 목록입니다. |
|
|
|
선택 사항: |
VLAN 구성이 포함된 NetworkAttachmentDefinition 사용자 정의 리소스 정의(CRD)는 노드의 단일 포드에서만 사용할 수 있습니다. CNI 플러그인은 동일한 마스터 인터페이스에서 동일한 VLAN ID를 가진 여러 VLAN 하위 인터페이스를 생성할 수 없기 때문입니다.
4.2.5.1. ipvlan 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 vlan-net 이라는 보조 네트워크가 있는 VLAN 구성을 보여줍니다.
{
"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" ]
}
}
-
ipam.type.host-local: 지정된 주소 범위 집합에서 IPv4 및 IPv6 IP 주소를 할당합니다. IPAM 플러그인은 IP 주소를 호스트 파일 시스템에 로컬로 저장하므로 주소가 호스트에서만 고유하게 유지됩니다.
4.2.6. IPVLAN 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
IPVLAN CNI 플러그인 JSON 구성 개체는 IPVLAN, ipvlan , CNI 플러그인에 대한 구성 매개변수를 설명합니다. 다음 표에서는 이러한 매개변수에 대한 자세한 내용을 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 최소 |
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
구성할 CNI 플러그인의 이름: |
|
|
| IPAM CNI 플러그인에 대한 구성 개체입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다. 플러그인이 체인되어 있지 않으면 이 작업이 필요합니다. |
|
|
|
선택 사항: 가상 네트워크의 작동 모드입니다. 값은 |
|
|
|
네트워크 연결과 연결할 이더넷 인터페이스를 지정합니다. |
|
|
| 최대 전송 단위(MTU)를 지정된 값으로 설정합니다. 기본값은 커널에 의해 자동으로 설정됩니다. |
|
|
|
선택 사항: |
-
ipvlan객체는 가상 인터페이스가마스터인터페이스와 통신하는 것을 허용하지 않습니다. 따라서 컨테이너는ipvlan인터페이스를 사용하여 호스트에 도달할 수 없습니다. 컨테이너가PTP(Precision Time Protocol)를 지원하는 네트워크와 같이 호스트에 연결을 제공하는 네트워크에 가입되어 있는지 확인하세요. -
단일
마스터인터페이스는macvlan과ipvlan을동시에 사용하도록 구성할 수 없습니다. -
인터페이스에 구애받지 않는 IP 할당 방식의 경우,
ipvlan플러그인을 이 논리를 처리하는 이전 플러그인과 연결할 수 있습니다.마스터가생략되면 이전 결과에는 슬레이브로 설정할ipvlan플러그인에 대한 단일 인터페이스 이름이 포함되어야 합니다.ipam을생략하면 이전 결과가ipvlan인터페이스를 구성하는 데 사용됩니다.
4.2.6.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"
}
]
}
}
4.2.7. MACVLAN 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
MACVLAN CNI 플러그인 JSON 구성 개체는 MAC 가상 LAN(MACVLAN) 컨테이너 네트워크 인터페이스(CNI) 플러그인에 대한 구성 매개변수를 설명합니다. 다음 표에서는 이러한 매개변수를 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 최소 |
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
구성할 CNI 플러그인의 이름: |
|
|
| IPAM CNI 플러그인에 대한 구성 개체입니다. 플러그인은 연결 정의에 대한 IP 주소 할당을 관리합니다. |
|
|
|
가상 네트워크에서 트래픽 가시성을 구성합니다. |
|
|
| 선택 사항: 새로 생성된 macvlan 인터페이스와 연결할 호스트 네트워크 인터페이스입니다. 값이 지정되지 않으면 기본 경로 인터페이스가 사용됩니다. |
|
|
| 최대 전송 단위(MTU)를 지정된 값으로 설정합니다. 기본값은 커널에 의해 자동으로 설정됩니다. |
|
|
|
선택 사항: |
플러그인 구성에 대한 마스터 키를 지정하는 경우, 충돌 가능성을 피하기 위해 기본 네트워크 플러그인과 연결된 것과 다른 물리적 네트워크 인터페이스를 사용하세요.
4.2.7.1. MACVLAN CNI 플러그인 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 macvlan-net 이라는 보조 네트워크를 구성합니다.
{
"cniVersion": "0.3.1",
"name": "macvlan-net",
"type": "macvlan",
"master": "eth1",
"linkInContainer": false,
"mode": "bridge",
"ipam": {
"type": "dhcp"
}
}
4.2.8. TAP 보조 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
TAP CNI 플러그인 JSON 구성 개체는 TAP CNI 플러그인의 구성 매개변수를 설명합니다. 다음 표에서는 이러한 매개변수를 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CNI 사양 버전. 최소 |
|
|
| 이 CNI 네트워크 연결 정의에 할당된 필수 고유 식별자입니다. 컨테이너 런타임에서 올바른 네트워크 구성을 선택하는 데 사용되며 IP 주소 할당과 같은 영구 리소스 상태 관리의 키 역할을 합니다. |
|
|
|
구성할 CNI 플러그인의 이름: |
|
|
| 선택 사항: 인터페이스에 대해 지정된 MAC 주소를 요청합니다. |
|
|
| 최대 전송 단위(MTU)를 지정된 값으로 설정합니다. 기본값은 커널에 의해 자동으로 설정됩니다. |
|
|
| 선택 사항: 탭 장치와 연결할 SELinux 컨텍스트입니다. 참고
OpenShift Container Platform에는 |
|
|
|
선택 사항: 다중 대기열을 활성화하려면 |
| 소유자 |
| 선택 사항: 탭 장치를 소유한 사용자입니다. |
|
|
| 선택 사항: 탭 장치를 소유한 그룹입니다. |
| Bridge |
| 선택 사항: 탭 장치를 이미 존재하는 브리지의 포트로 설정합니다. |
4.2.8.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"
}
4.2.9. TAP CNI 플러그인에 대한 SELinux 부울 설정 링크 복사링크가 클립보드에 복사되었습니다!
container_t SELinux 컨텍스트로 탭 장치를 생성하려면 Machine Config Operator(MCO)를 사용하여 호스트에서 container_use_devices 부울 값을 활성화합니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다.
프로세스
다음 세부 정보를 사용하여 새 YAML 파일을 만듭니다.
예시
setsebool-container-use-devices.yamlapiVersion: 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다음 명령을 실행하여 새로운
MachineConfig객체를 만듭니다.$ oc apply -f setsebool-container-use-devices.yaml참고MachineConfig개체에 변경 사항을 적용하면 변경 사항이 적용된 후 영향을 받는 모든 노드가 정상적으로 재부팅됩니다. MCO가 업데이트를 적용하는 데 시간이 걸릴 수 있습니다.
검증
다음 명령을 실행하여 변경 사항이 적용되었는지 확인하세요.
$ oc get machineconfigpoolsNAME 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참고모든 노드는
업데이트및준비상태여야 합니다.
4.2.10. 보조 네트워크에서 route-override 플러그인을 사용하여 경로 구성 링크 복사링크가 클립보드에 복사되었습니다!
Route override CNI 플러그인 JSON 구성 개체는 route-override CNI 플러그인에 대한 구성 매개변수를 설명합니다. 다음 표에서는 이러한 매개변수에 대한 자세한 내용을 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
구성할 CNI 플러그인의 이름: |
|
|
|
선택 사항: 기존 경로를 모두 플러시하려면 |
|
|
|
선택 사항: 기본 경로, 즉 게이트웨이 경로를 플러시하려면 |
|
|
| 선택 사항: 컨테이너 네임스페이스에서 삭제할 경로 목록을 지정합니다. |
|
|
|
선택 사항: 컨테이너 네임스페이스에 추가할 경로 목록을 지정합니다. 각 경로는 |
|
|
|
선택 사항: 확인 명령을 건너뛰려면 이 값을 |
4.2.10.1. Route-override 플러그인 구성 예 링크 복사링크가 클립보드에 복사되었습니다!
경로 재정의 CNI는 부모 CNI와 연결하여 사용하도록 설계된 CNI 유형입니다. CNI 유형은 독립적으로 작동하지 않지만, CNI 유형이 라우팅 규칙을 수정하기 전에 먼저 네트워크 인터페이스를 만들고 IP 주소를 할당하기 위해 상위 CNI에 의존합니다.
다음 예제에서는 mymacvlan 이라는 보조 네트워크를 구성합니다. 부모 CNI는 eth1 에 연결된 네트워크 인터페이스를 생성하고 호스트 로컬 IPAM을 사용하여 192.168.1.0/24 범위의 IP 주소를 할당합니다. 그런 다음 경로 재정의 CNI가 부모 CNI에 연결되어 기존 경로를 플러시하고, 192.168.0.0/24 에 대한 경로를 삭제하고, 사용자 지정 게이트웨이를 사용하여 192.168.0.0/24 에 대한 새 경로를 추가하여 라우팅 규칙을 수정합니다.
{
"cniVersion": "0.3.0",
"name": "mymacvlan",
"plugins": [
{
"type": "macvlan",
"master": "eth1",
"mode": "bridge",
"ipam": {
"type": "host-local",
"subnet": "192.168.1.0/24"
}
},
{
"type": "route-override",
"flushroutes": true,
"delroutes": [
{
"dst": "192.168.0.0/24"
}
],
"addroutes": [
{
"dst": "192.168.0.0/24",
"gw": "10.1.254.254"
}
]
}
]
}
다음과 같습니다.
"type": "macvlan"-
부모 CNI는
eth1에 연결된 네트워크 인터페이스를 생성합니다. "type": "route-override"-
체인
형 경로 재정의CNI는 라우팅 규칙을 수정합니다.
4.3. 보조 네트워크에 포드 연결 링크 복사링크가 클립보드에 복사되었습니다!
Pod에서 OpenShift Container Platform의 기본 클러스터 네트워크 이외의 추가 네트워크 인터페이스를 사용하려면 Pod를 보조 네트워크에 연결할 수 있습니다. 보조 네트워크는 워크로드에 대한 추가 연결 옵션을 제공합니다.
4.3.1. 보조 네트워크에 포드 추가 링크 복사링크가 클립보드에 복사되었습니다!
Pod에서 OpenShift Container Platform에서 추가 네트워크 인터페이스를 사용하도록 설정하려면 Pod를 보조 네트워크에 연결할 수 있습니다. Pod는 기본 네트워크를 통해 정상적인 클러스터 관련 네트워크 트래픽을 계속 전송합니다.
Pod가 생성되면 보조 네트워크가 포드에 연결됩니다. 하지만 포드가 이미 존재하는 경우 보조 네트워크를 연결할 수 없습니다.
포드는 보조 네트워크와 동일한 네임스페이스에 있어야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. - 클러스터에 로그인합니다.
프로세스
Pod오브젝트에 주석을 추가합니다. 다음 주석 형식 중 하나만 사용할 수 있습니다.별도의 설정 없이 보조 네트워크를 연결하려면 다음 형식의 주석을 추가하십시오.
metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]다음과 같습니다.
k8s.v1.cni.cncf.io/networks- Pod와 연결할 보조 네트워크의 이름을 지정합니다. 두 개 이상의 보조 네트워크를 지정하려면 각 네트워크를 쉼표로 구분하세요. 쉼표 사이에 공백을 포함하지 마십시오. 동일한 추가 네트워크를 여러 번 지정하면 Pod에 해당 네트워크에 대한 인터페이스가 여러 개 연결됩니다.
사용자 정의를 사용하여 보조 네트워크를 연결하려면 다음 형식으로 주석을 추가하세요.
metadata: annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "<network>", "namespace": "<namespace>", "default-route": ["<default_route>"] } ]다음과 같습니다.
<network>-
NetworkAttachmentDefinition객체로 정의된 보조 네트워크의 이름을 지정합니다. <namespace>-
NetworkAttachmentDefinition객체가 정의된 네임스페이스를 지정합니다. <default-route>-
선택적 매개변수
192.168.17.1과 같은 기본 경로에 대한 재정의를 지정합니다.
다음 명령어를 입력하여 Pod를 생성하세요.
$ oc create -f <name>.yaml<name>을 Pod 이름으로 교체합니다.(선택 사항): 다음 명령어를 입력하여
podCR에 어노테이션이 존재하는지 확인하십시오.<name>을 Pod 이름으로 교체합니다.$ oc get pod <name> -o yaml다음 예에서
example-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: ...다음과 같습니다.
k8s.v1.cni.cncf.io/network-status- 객체로 구성된 JSON 배열을 지정합니다. 각 객체는 포드에 연결된 보조 네트워크의 상태를 설명합니다. 주석 값은 일반 텍스트 값으로 저장됩니다.
4.3.1.1. Pod별 주소 지정 및 라우팅 옵션 지정 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 Pod의 고정 IP 주소, MAC 주소 및 기본 경로를 설정하려면 JSON 형식의 주석을 사용하여 Pod별 주소 지정 및 라우팅 옵션을 구성할 수 있습니다. 이러한 주석을 사용하면 보조 네트워크에서 개별 Pod의 네트워크 동작을 사용자 지정할 수 있습니다.
사전 요구 사항
- 포드는 보조 네트워크와 동일한 네임스페이스에 있어야 합니다.
-
OpenShift CLI(
oc)를 설치합니다. - 클러스터에 로그인해야 합니다.
프로세스
Pod리소스 정의를 편집합니다. 기존Pod리소스를 편집하는 경우 다음 명령을 실행하여 기본 편집기에서 정의를 편집합니다.<name>을 편집할Pod리소스의 이름으로 교체합니다.$ oc edit pod <name>Pod리소스 정의에서k8s.v1.cni.cncf.io/networks매개변수를 Podmetadata매핑에 추가합니다.k8s.v1.cni.cncf.io/networks는 추가 특성을 지정하는 것 외에도NetworkAttachmentDefinitionCustom Resource(CR) 이름을 참조하는 오브젝트 목록의 JSON 문자열을 허용합니다.metadata: annotations: k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]' # ...다음과 같습니다.
<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다음과 같습니다.
net1,net2-
Pod와 연결할 보조 네트워크를 정의하는
NetworkAttachmentDefinition리소스의 이름을 지정합니다. 192.0.2.1-
라우팅 테이블에 다른 라우팅 항목이 없는 경우 트래픽이 라우팅될 게이트웨이 값을 지정합니다.
default-route키가 두 개 이상 지정되면 Pod가 활성화되지 않습니다.
기본 경로는 다른 경로에 지정되지 않은 모든 트래픽이 게이트웨이로 라우팅되도록 합니다.
중요OpenShift Container Platform의 기본 네트워크 인터페이스 이외의 인터페이스로 기본 경로를 설정하면 Pod 사이에서 트래픽이 라우팅될 것으로 예상되는 트래픽이 다른 인터페이스를 통해 라우팅될 수 있습니다.
Pod의 라우팅 속성을 확인하려면
oc명령을 사용하여 Pod에서ip명령을 실행하십시오.$ oc exec -it <pod_name> -- ip route참고JSON 형식의 오브젝트 목록에
default-route키가 있으면 Pod의k8s.v1.cni.cncf.io/networks-status를 참조하여 어떤 추가 네트워크에 기본 경로가 할당되었는지를 확인할 수도 있습니다.Pod의 고정 IP 주소 또는 MAC 주소를 설정하려면 JSON 형식의 주석을 사용하면 됩니다. 이를 위해서는 이러한 기능을 특별하게 허용하는 네트워크를 생성해야 합니다. 이는 다음과 같이 CNO의 rawCNIConfig에서 지정할 수 있습니다.
다음 명령을 실행하여 CNO CR을 편집합니다.
$ oc edit networks.operator.openshift.io cluster다음 YAML은 CNO의 구성 매개변수를 설명합니다.
CNO(Cluster Network Operator) YAML 구성
name: <name> namespace: <namespace> rawCNIConfig: '{ ... }' type: Raw다음과 같습니다.
name-
생성할 보조 네트워크 연결의 이름을 지정합니다. 이름은 지정된
namespace내에서 고유해야 합니다. 네임스페이스-
네트워크 연결을 생성할 네임스페이스를 지정합니다. 값을 지정하지 않으면
default네임스페이스가 사용됩니다. 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" }] }다음과 같습니다.
name-
생성할 보조 네트워크 연결의 이름을 지정합니다. 이름은 지정된
namespace내에서 고유해야 합니다. plugins- CNI 플러그인 구성의 배열을 지정합니다. 첫 번째 오브젝트는 macvlan 플러그인 구성을 지정하고, 두 번째 오브젝트는 튜닝 플러그인 구성을 지정합니다.
ips- CNI 플러그인 런타임 구성 기능의 고정 IP 주소 기능 사용을 요청하도록 지정합니다.
master- macvlan 플러그인이 사용하는 인터페이스를 지정합니다.
mac- CNI 플러그인의 정적 MAC 주소 기능을 활성화하기 위한 요청이 이루어지도록 지정합니다.
그런 다음 위의 네트워크 연결을 키와 함께 JSON 형식 주석에서 참조하여 지정된 Pod에 할당할 고정 IP 및 MAC 주소를 지정할 수 있습니다.
다음 명령어를 입력하여 Pod를 편집하세요.
$ oc edit pod <name>고정 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" } ]'다음과 같습니다.
metadata.name-
생성할 보조 네트워크 연결의 이름을 지정합니다. 이름은 지정된
namespace내에서 고유해야 합니다. metadata.annotations.k8s.v1.cni.cncf.io/ips- 서브넷 마스크를 포함한 IP 주소를 지정합니다.
metadata.annotations.k8s.v1.cni.cncf.io/mac- MAC 주소를 지정합니다.
참고고정 IP 주소와 MAC 주소를 동시에 사용할 필요는 없습니다. 개별적으로 사용하거나 함께 사용할 수 있습니다.
4.4. 다중 네트워크 정책 구성 링크 복사링크가 클립보드에 복사되었습니다!
관리자는 MultiNetworkPolicy API를 사용하여 보조 네트워크에 연결된 포드의 트래픽을 관리하는 여러 네트워크 정책을 만들 수 있습니다. 예를 들어, 특정 포트, IP 및 범위 또는 레이블을 기준으로 트래픽을 허용하거나 거부하는 정책을 만들 수 있습니다.
다중 네트워크 정책은 클러스터 내의 보조 네트워크의 트래픽을 관리하는 데 사용될 수 있습니다. 이러한 정책은 기본 클러스터 네트워크나 사용자 정의 네트워크의 기본 네트워크를 관리할 수 없습니다.
클러스터 관리자는 다음 네트워크 유형에 대해 다중 네트워크 정책을 구성할 수 있습니다.
- 단일 루트 I/O 가상화(SR-IOV)
- MAC 가상 로컬 영역 네트워크(MacVLAN)
- IP 가상 로컬 영역 네트워크(IPVLAN)
- SR-IOV를 통한 본드 컨테이너 네트워크 인터페이스(CNI)
- OVN-Kubernetes 보조 네트워크
SR-IOV 보조 네트워크에 대한 다중 네트워크 정책 구성 지원은 커널 네트워크 인터페이스 컨트롤러(NIC)에서만 지원됩니다. SR-IOV는 DPDK(Data Plane Development Kit) 애플리케이션에서 지원되지 않습니다.
4.4.1. 다중 네트워크 정책과 네트워크 정책의 차이점 링크 복사링크가 클립보드에 복사되었습니다!
MultiNetworkPolicy API는 NetworkPolicy API를 구현하지만 두 정책 간의 다음과 같은 주요 차이점을 이해해야 합니다.
다음 예제 구성에서 보여준 것처럼
MultiNetworkPolicyAPI를 사용해야 합니다.apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy # ...-
CLI를 사용하여 다중 네트워크 정책과 상호 작용할 때
multi-networkpolicy리소스 이름을 사용해야 합니다. 예를 들어oc get multi-networkpolicy <name>명령을 사용하여 다중 네트워크 정책 오브젝트를 볼 수 있습니다. 여기서<name>은 다중 네트워크 정책의 이름입니다. MultiNetworkPolicy객체에서k8s.v1.cni.cncf.io/policy-for주석을 사용하여NetworkAttachmentDefinition(NAD) 사용자 정의 리소스(CR)를 가리킬 수 있습니다. NAD CR은 정책이 적용되는 네트워크를 정의합니다. 다음 예시 다중 네트워크 정책에는k8s.v1.cni.cncf.io/policy-for주석이 포함되어 있습니다.apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> # ...다음과 같습니다.
<namespace_name>- 네임스페이스 이름을 지정합니다.
<network_name>- 네트워크 연결 정의의 이름을 지정합니다.
4.4.2. 클러스터의 다중 네트워크 정책 활성화 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 클러스터에서 다중 네트워크 정책 지원을 활성화할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다.
프로세스
다음 YAML을 사용하여
multinetwork-enable-patch.yaml파일을 생성합니다.apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: useMultiNetworkPolicy: true # ...다중 네트워크 정책을 활성화하도록 클러스터를 구성합니다. 성공적인 출력에는 정책 개체의 이름과
패치상태가 나열됩니다.$ oc patch network.operator.openshift.io cluster --type=merge --patch-file=multinetwork-enable-patch.yaml
4.4.3. IPv6 네트워크에서 다중 네트워크 정책 지원 링크 복사링크가 클립보드에 복사되었습니다!
ICMPv6 Neighbor Discovery Protocol(NDP)은 장치가 이웃 노드에 대한 정보를 검색하고 유지 관리할 수 있도록 하는 메시지와 프로세스 집합입니다. NDP는 IPv6 네트워크에서 중요한 역할을 하며, 동일한 링크에 있는 장치 간의 상호 작용을 원활하게 해줍니다.
CNO(클러스터 네트워크 운영자)는 useMultiNetworkPolicy 매개변수가 true 로 설정된 경우 다중 네트워크 정책의 iptables 구현을 배포합니다.
IPv6 네트워크에서 다중 네트워크 정책을 지원하기 위해 클러스터 네트워크 운영자는 다중 네트워크 정책의 영향을 받는 모든 포드에 다음과 같은 사용자 정의 규칙 세트를 배포합니다.
kind: ConfigMap
apiVersion: v1
metadata:
name: multi-networkpolicy-custom-rules
namespace: openshift-multus
data:
custom-v6-rules.txt: |
# accept NDP
-p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
-p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
# accept RA/RS
-p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
-p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
다음과 같습니다.
icmpv6 유형 이웃 요청- 이 규칙은 이웃 검색 프로토콜(NDP)의 일부인 수신 ICMPv6 이웃 요청 메시지를 허용합니다. 이러한 메시지는 이웃 노드의 링크 계층 주소를 결정하는 데 도움이 됩니다.
icmpv6-type neighbor-advertisement- 이 규칙은 NDP의 일부이며 발신자의 링크 계층 주소에 대한 정보를 제공하는 수신 ICMPv6 이웃 광고 메시지를 허용합니다.
icmpv6 유형 라우터 요청- 이 규칙은 들어오는 ICMPv6 라우터 요청 메시지를 허용합니다. 호스트는 이러한 메시지를 사용하여 라우터 구성 정보를 요청합니다.
icmpv6-type router-advertisement- 이 규칙은 호스트에 구성 정보를 제공하는 수신 ICMPv6 라우터 광고 메시지를 허용합니다.
미리 정의된 규칙은 편집할 수 없습니다.
이러한 규칙은 IPv6 환경에서 주소 확인 및 라우터 통신을 포함하여 올바른 네트워크 기능을 위해 필수적인 ICMPv6 트래픽을 활성화합니다. 이러한 규칙이 적용되고 트래픽을 거부하는 다중 네트워크 정책이 있으면 애플리케이션에서 연결 문제가 발생할 가능성은 없습니다.
4.4.4. 다중 네트워크 정책 작업 링크 복사링크가 클립보드에 복사되었습니다!
보조 네트워크에서 포드의 네트워크 트래픽 격리 및 보안을 관리하려면 다중 네트워크 정책을 생성, 편집, 보기 및 삭제할 수 있습니다. 다중 네트워크 정책을 사용하기 전에 클러스터에 대한 다중 네트워크 정책 지원을 활성화해야 합니다.
4.4.4.1. CLI를 사용하여 다중 네트워크 정책 만들기 링크 복사링크가 클립보드에 복사되었습니다!
클러스터의 네임스페이스에서 허용된 수신 또는 송신 네트워크 트래픽을 설명하는 세분화된 규칙을 정의하기 위해 다중 네트워크 정책을 생성할 수 있습니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
정책 규칙을 만듭니다.
<policy_name>.yaml파일을 생성합니다.$ touch <policy_name>.yaml다음과 같습니다.
<policy_name>- 다중 네트워크 정책 파일 이름을 지정합니다.
생성된 파일에서 다중 네트워크 정책을 정의합니다. 다음 예제에서는 모든 네임스페이스의 모든 포드에서 들어오는 트래픽을 거부합니다. 이는 다른 네트워크 정책의 구성에 의해 허용되는 크로스 포드 트래픽 외의 모든 크로스 포드 네트워킹을 차단하는 기본 정책입니다.
apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy endif:: multi[] metadata: name: deny-by-default annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: podSelector: {} policyTypes: - Ingress ingress: []다음과 같습니다.
<network_name>네트워크 연결 정의의 이름을 지정합니다.
다음 예제 구성은 동일한 네임스페이스에 있는 모든 포드에서 수신 트래픽을 허용합니다.
apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: name: allow-same-namespace annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: podSelector: ingress: - from: - podSelector: {} # ...다음과 같습니다.
<network_name>네트워크 연결 정의의 이름을 지정합니다.
다음 예제에서는 특정 네임스페이스에서 하나의 포드로의 수신 트래픽을 허용합니다. 이 정책을 사용하면
namespace-y에서 실행되는 Pod의pod-a레이블이 있는 Pod로의 트래픽을 허용합니다.apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: name: allow-traffic-pod annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: podSelector: matchLabels: pod: pod-a policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: namespace-y # ...다음과 같습니다.
<network_name>네트워크 연결 정의의 이름을 지정합니다.
다음 예제 구성은 서비스에 대한 트래픽을 제한합니다. 이 정책을 적용하면
app=bookstore및role=api레이블이 모두 있는 모든 Pod는app=bookstore레이블이 있는 Pod에서만 액세스할 수 있습니다. 이 예에서 애플리케이션은app=bookstore및role=api레이블이 있는 REST API 서버일 수 있습니다.이 예제 구성은 다음과 같은 사용 사례를 다룹니다.
- 특정 서비스의 트래픽을 해당 서비스를 사용해야 하는 다른 마이크로서비스로만 제한합니다.
해당 애플리케이션에서만 데이터베이스를 사용할 수 있도록 연결을 제한합니다.
apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: name: api-allow annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: podSelector: matchLabels: app: bookstore role: api ingress: - from: - podSelector: matchLabels: app: bookstore # ...다음과 같습니다.
<network_name>- 네트워크 연결 정의의 이름을 지정합니다.
다음 명령을 실행하여 다중 네트워크 정책 오브젝트를 생성합니다. 성공적인 출력에는 정책 오브젝트의 이름과
생성된상태가 나열됩니다.$ oc apply -f <policy_name>.yaml -n <namespace>다음과 같습니다.
<policy_name>- 다중 네트워크 정책 파일 이름을 지정합니다.
<namespace>- 선택적 매개변수 현재 네임스페이스와 다른 네임스페이스에 객체를 정의한 경우 매개변수는 네임스페이스를 지정합니다.
성공적인 출력에는 정책 오브젝트의 이름과
생성된상태가 나열됩니다.참고cluster-admin권한을 사용하여 웹 콘솔에 로그인하는 경우 클러스터의 모든 네임스페이스에서 직접 또는 웹 콘솔의 양식에서 네트워크 정책을 생성할 수 있습니다.
4.4.4.2. 다중 네트워크 정책 편집 링크 복사링크가 클립보드에 복사되었습니다!
기존 정책 구성을 수정하려면 네임스페이스에서 다중 네트워크 정책을 편집할 수 있습니다. 정책 파일을 수정하고 oc apply 를 사용하거나 oc edit 명령을 직접 사용하여 정책을 편집합니다.
cluster-admin 권한으로 로그인하면 클러스터의 모든 네임스페이스에서 네트워크 정책을 편집할 수 있습니다. 웹 콘솔에서 YAML 또는 Actions 메뉴를 사용하여 정책을 직접 편집할 수 있습니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
선택 사항: 네임스페이스의 다중 네트워크 정책 오브젝트를 나열하려면 다음 명령을 입력합니다.
$ oc get multi-network policy -n <namespace>다음과 같습니다.
<namespace>- 선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.
다중 네트워크 정책 오브젝트를 편집합니다.
다중 네트워크 정책 정의를 파일에 저장한 경우 파일을 편집하고 필요한 사항을 변경한 후 다음 명령을 입력합니다.
$ oc apply -n <namespace> -f <policy_file>.yaml다음과 같습니다.
<namespace>- 선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.
<policy_file>- 네트워크 정책이 포함된 파일의 이름을 지정합니다.
다중 네트워크 정책 오브젝트를 직접 업데이트해야 하는 경우 다음 명령을 입력합니다.
$ oc edit multi-network policy <policy_name> -n <namespace>다음과 같습니다.
<policy_name>- 네트워크 정책의 이름을 지정합니다.
<namespace>- 선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.
다중 네트워크 정책 오브젝트가 업데이트되었는지 확인합니다.
$ oc describe multi-networkpolicy <policy_name> -n <namespace>다음과 같습니다.
<policy_name>- 다중 네트워크 정책의 이름을 지정합니다.
<namespace>- 선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.
4.4.4.3. CLI를 사용하여 다중 네트워크 정책 보기 링크 복사링크가 클립보드에 복사되었습니다!
네임스페이스에서 다중 네트워크 정책을 검사할 수 있습니다.
cluster-admin 권한으로 로그인하면 클러스터의 모든 네임스페이스에서 네트워크 정책을 편집할 수 있습니다. 웹 콘솔에서 YAML 또는 Actions 메뉴를 사용하여 정책을 직접 편집할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
네임스페이스에 있는 다중 네트워크 정책을 나열합니다.
네임스페이스에 정의된 다중 네트워크 정책 객체를 보려면 다음 명령을 입력하세요.
$ oc get multi-networkpolicy선택 사항: 특정 다중 네트워크 정책을 조사하려면 다음 명령을 입력하세요.
$ oc describe multi-networkpolicy <policy_name> -n <namespace>다음과 같습니다.
<policy_name>- 검사할 다중 네트워크 정책의 이름을 지정합니다.
<namespace>- 선택 사항: 오브젝트가 현재 네임스페이스와 다른 네임스페이스에 정의된 경우 이를 사용하여 네임스페이스를 지정합니다.
4.4.4.4. CLI를 사용하여 다중 네트워크 정책 삭제 링크 복사링크가 클립보드에 복사되었습니다!
네임스페이스에서 다중 네트워크 정책을 삭제할 수 있습니다.
cluster-admin 권한으로 로그인하면 클러스터의 모든 네임스페이스에서 네트워크 정책을 삭제할 수 있습니다. 웹 콘솔에서는 YAML에서 직접 또는 Actions 메뉴를 사용하여 정책을 삭제할 수 있습니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
다중 네트워크 정책 오브젝트를 삭제하려면 다음 명령을 입력합니다. 성공적인 출력에는 정책 오브젝트의 이름과
삭제된상태가 나열됩니다.$ oc delete multi-networkpolicy <policy_name> -n <namespace>다음과 같습니다.
<policy_name>- 다중 네트워크 정책의 이름을 지정합니다.
<namespace>- 선택적 매개변수 현재 네임스페이스와 다른 네임스페이스에 객체를 정의한 경우 매개변수는 네임스페이스를 지정합니다.
4.4.4.5. 모든 다중 네트워크 거부 기본 정책 만들기 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 모든 다중 네트워크 차단 정책은 다른 배포된 네트워크 정책의 구성에서 허용하는 네트워크 트래픽과 호스트 네트워크 포드 간 트래픽을 제외한 모든 크로스 포드 네트워킹을 차단합니다. 이 절차에서는 my 정책을 적용합니다.
-project 네임스페이스에 기본 거부 정책을 적용하여 강력한 거부
트래픽 통신을 허용하는 NetworkPolicy CR(사용자 정의 리소스)을 구성하지 않으면 다음 정책으로 클러스터 전체에서 통신 문제가 발생할 수 있습니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
모든 네임스페이스의 모든 포드의 수신을
거부하도록 기본거부 정책을 정의하는 다음 YAML을 생성합니다. YAML을deny-by-default.yaml파일에 저장합니다.apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: name: deny-by-default namespace: my-project annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: podSelector: {} policyTypes: - Ingress ingress: []다음과 같습니다.
네임스페이스-
정책을 배포할 네임스페이스를 지정합니다. 예를 들어
my-project네임스페이스는 다음과 같습니다. annotations- 네임스페이스 프로젝트 이름 뒤에 네트워크 연결 정의 이름을 지정합니다.
podSelector-
이 필드가 비어 있으면 구성이 모든 포드와 일치합니다. 따라서 정책은
my-project네임스페이스의 모든 pod에 적용됩니다. policyTypes-
NetworkPolicy와 관련된 규칙 유형 목록을 지정합니다. - Ingress-
Ingress는policyTypes만 지정합니다. Ingress- 수신 규칙을 지정합니다. 지정하지 않으면 모든 포드에 대한 모든 수신 트래픽이 삭제됩니다.
다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과
생성된상태가 나열됩니다.$ oc apply -f deny-by-default.yaml
4.4.4.6. 외부 클라이언트의 트래픽을 허용하기 위한 다중 네트워크 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
기본 거부 정책을 배치하면 app=web 레이블이 있는 외부 클라이언트에서 Pod로의 트래픽을 허용하는 정책을 구성할 수 있습니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
공용 인터넷에서 직접 또는 로드 밸런서를 사용하여 포드에 액세스하는 외부 서비스를 허용하는 정책을 구성하려면 다음 절차를 따르세요. app=web 레이블이 있는 Pod에만 트래픽이 허용됩니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
퍼블릭 인터넷에서 직접 또는 로드 밸런서를 사용하여 트래픽이 포드에 액세스할 수 있도록 허용하는 정책을 만듭니다. YAML을
web-allow-external.yaml파일에 저장합니다.apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: name: web-allow-external namespace: default annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: policyTypes: - Ingress podSelector: matchLabels: app: web ingress: - {}다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과
생성된상태가 나열됩니다.$ oc apply -f web-allow-external.yaml이 정책은 다음 다이어그램에 표시된 것처럼 외부 트래픽을 포함한 모든 리소스의 트래픽을 허용합니다.
4.4.4.7. 모든 네임스페이스에서 애플리케이션으로의 트래픽을 허용하는 다중 네트워크 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
모든 네임스페이스의 모든 포드에서 특정 애플리케이션으로의 트래픽을 허용하는 정책을 구성할 수 있습니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
프로세스
모든 네임스페이스의 모든 포드에서 특정 애플리케이션으로의 트래픽을 허용하는 정책을 만듭니다. YAML을
web-allow-all-namespaces.yaml파일에 저장합니다.apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: name: web-allow-all-namespaces namespace: default annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: podSelector: matchLabels: app: web policyTypes: - Ingress ingress: - from: - namespaceSelector: {}다음과 같습니다.
app-
기본 네임스페이스의
app:webpod에만 정책을 적용합니다. namespaceSelector모든 네임스페이스의 모든 포드를 선택합니다.
참고기본적으로 정책 오브젝트에
namespaceSelector매개변수를 지정하지 않으면 네임스페이스를 선택하지 않습니다. 즉, 정책은 네트워크 정책이 배포된 네임스페이스에서만 트래픽을 허용합니다.
다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과
생성된상태가 나열됩니다.$ oc apply -f web-allow-all-namespaces.yaml
검증
다음 명령을 입력하여
기본네임스페이스에서 웹 서비스를 시작합니다.$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80다음 명령을 실행하여
보조네임스페이스에alpine이미지를 배포하고 쉘을 시작합니다.$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh셸에서 다음 명령을 실행하고 서비스가 요청을 허용하는지 확인합니다.
# wget -qO- --timeout=2 http://web.default<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
4.4.4.8. 네임스페이스에서 애플리케이션으로의 트래픽을 허용하는 다중 네트워크 정책 생성 링크 복사링크가 클립보드에 복사되었습니다!
특정 네임스페이스의 app=web 레이블을 사용하여 Pod로의 트래픽을 허용하는 정책을 구성할 수 있습니다. 이 구성은 다음과 같은 사용 사례에 유용합니다.
- 프로덕션 워크로드가 배포된 네임스페이스에만 프로덕션 데이터베이스로의 트래픽을 제한합니다.
- 특정 네임스페이스에 배포된 모니터링 도구를 활성화하여 현재 네임스페이스에서 메트릭을 스크래핑합니다.
cluster-admin 역할로 사용자로 로그인하는 경우 클러스터의 모든 네임스페이스에서 네트워크 정책을 생성할 수 있습니다.
사전 요구 사항
-
클러스터는
mode:로 설정된 OVN-Kubernetes 네트워크 플러그인과 같은 NetworkPolicy 오브젝트를 지원하는 네트워크 플러그인을 사용합니다.NetworkPolicy -
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인했습니다. - 다중 네트워크 정책이 적용되는 네임스페이스에서 작업하고 있습니다.
network.openshift.io/policy-group: ingress 레이블을 사용자 지정 네임스페이스 또는 프로젝트에 적용하지 마십시오. 이 레이블은 Operator가 관리하며 OpenShift Container Platform 네트워킹 기능을 위해 예약되어 있습니다. 시스템에서 생성한 네임스페이스에서 변경할 수 없습니다.
이 레이블을 사용하면 Operator가 상태를 조정하려고 할 때 간헐적인 네트워크 연결, 시스템 NetworkPolicies 리소스의 의도하지 않은 애플리케이션 또는 구성 드리프트가 발생할 수 있습니다. 사용자 정의 트래픽 그룹화의 경우 다음 절차에 표시된 대로 항상 고유한 사용자 정의 레이블을 사용합니다.
프로세스
purpose=production레이블이 있는 특정 네임스페이스의 모든 Pod의 트래픽을 허용하는 정책을 생성합니다. YAML을web-allow-prod.yaml파일에 저장합니다.apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: name: web-allow-prod namespace: default annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name> spec: podSelector: matchLabels: app: web policyTypes: - Ingress ingress: - from: - namespaceSelector: matchLabels: purpose: production다음과 같습니다.
app-
기본 네임스페이스의
app:webpod에만 정책을 적용합니다. 목적-
purpose=production레이블이 있는 네임스페이스의 Pod로만 트래픽을 제한합니다.
다음 명령을 입력하여 정책을 적용합니다. 성공적인 출력에는 정책 오브젝트의 이름과
생성된상태가 나열됩니다.$ oc apply -f web-allow-prod.yaml
검증
다음 명령을 입력하여
기본네임스페이스에서 웹 서비스를 시작합니다.$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80다음 명령을 실행하여
prod네임스페이스를 생성합니다.$ oc create namespace prod다음 명령을 실행하여
prod네임스페이스에 레이블을 지정합니다.$ oc label namespace/prod purpose=production다음 명령을 실행하여
dev네임스페이스를 생성합니다.$ oc create namespace dev다음 명령을 실행하여
dev네임스페이스에 레이블을 지정합니다.$ oc label namespace/dev purpose=testing다음 명령을 실행하여
dev네임스페이스에alpine이미지를 배포하고 쉘을 시작합니다.$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh셸에서 다음 명령을 실행하고 요청이 차단된 이유를 살펴보세요. 예를 들어 예상되는 출력 상태는
wget: download timed out입니다.# wget -qO- --timeout=2 http://web.default다음 명령을 실행하여
prod네임스페이스에alpine이미지를 배포하고 쉘을 시작합니다.$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh셸에서 다음 명령을 실행하고 요청이 허용되는지 확인하세요.
# wget -qO- --timeout=2 http://web.default<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
4.5. 보조 네트워크에서 포드 제거 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform의 특정 네트워크 구성에서 Pod의 연결을 해제하려면 보조 네트워크에서 Pod를 제거할 수 있습니다. 포드를 삭제하여 보조 네트워크에 대한 연결을 제거합니다.
4.5.1. 보조 네트워크에서 포드 제거 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform의 특정 네트워크 구성에서 Pod의 연결을 해제하려면 보조 네트워크에서 Pod를 제거할 수 있습니다. oc delete pod 명령을 사용하여 포드를 삭제하여 보조 네트워크에 대한 연결을 제거합니다.
사전 요구 사항
- 보조 네트워크가 포드에 연결됩니다.
-
OpenShift CLI(
oc)를 설치합니다. - 클러스터에 로그인합니다.
프로세스
다음 명령을 입력하여 Pod를 삭제합니다.
$ oc delete pod <name> -n <namespace>다음과 같습니다.
<name>- pod 이름을 지정합니다.
<namespace>- 파드가 포함된 네임스페이스를 지정합니다.
4.6. 보조 네트워크 편집 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 네트워크 설정을 업데이트하거나 보조 네트워크의 네트워크 매개변수를 변경하려면 기존 보조 네트워크의 구성을 수정할 수 있습니다. NetworkAttachmentDefinition 사용자 정의 리소스를 편집하여 변경 사항을 적용합니다.
4.6.1. NetworkAttachmentDefinition 사용자 정의 리소스 수정 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 네트워크 설정을 업데이트하거나 보조 네트워크의 네트워크 매개변수를 변경하려면 NetworkAttachmentDefinition 사용자 정의 리소스를 수정할 수 있습니다. Cluster Network Operator CR을 편집하여 변경 사항을 적용합니다.
사전 요구 사항
- 클러스터에 대한 보조 네트워크를 구성했습니다.
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 로그인합니다.
프로세스
기본 텍스트 편집기에서 다음 명령을 실행하여 클러스터 네트워크 운영자(CNO) CR을 편집하십시오.
$ oc edit networks.operator.openshift.io cluster-
additionalNetworks컬렉션에서 변경 사항을 적용하여 보조 네트워크를 업데이트합니다. - 변경 사항을 저장하고 텍스트 편집기를 종료하여 변경 사항을 커밋합니다.
선택 사항: CNO에서 다음 명령을 실행하여
NetworkAttachmentDefinition오브젝트를 업데이트했는지 확인합니다.<network_name>을표시할 보조 네트워크의 이름으로 바꾸십시오. CNO가 변경 사항을 반영하기 위해서NetworkAttachmentDefinition오브젝트를 업데이트하기 전에 지연이 발생할 수 있습니다.$ oc get network-attachment-definitions <network_name> -o yaml예를 들어, 다음 콘솔 출력은
net1이라는NetworkAttachmentDefinition오브젝트를 표시합니다.$ oc get network-attachment-definitions net1 -o go-template='{{printf "%s\n" .spec.config}}' { "cniVersion": "0.3.1", "type": "macvlan", "master": "ens5", "mode": "bridge", "ipam": {"type":"static","routes":[{"dst":"0.0.0.0/0","gw":"10.128.2.1"}],"addresses":[{"address":"10.128.2.100/23","gateway":"10.128.2.1"}],"dns":{"nameservers":["172.30.0.10"],"domain":"us-west-2.compute.internal","search":["us-west-2.compute.internal"]}} }
4.6.2. OVN-Kubernetes localnet 토폴로지를 사용하여 VLAN을 보조 인터페이스에 매핑 링크 복사링크가 클립보드에 복사되었습니다!
NetworkAttachmentDefinition (NAD)에서 OVN-Kubernetes localnet 토폴로지를 사용하여 물리적 네트워크의 특정 VLAN ID를 Pod의 보조 인터페이스에 매핑할 수 있습니다.
OpenShift Container Platform에서 클러스터 워크로드에 대한 여러 VLAN을 제공하려면 NetworkAttachmentDefinition CR(사용자 정의 리소스)에서 추가 VLAN을 정의합니다. 트렁크 포트를 구성하면 물리적 네트워크가 가상 인프라와 올바르게 연결하여 안정적인 트래픽 관리를 수행할 수 있습니다.
절차의 예제에서는 다음 구성을 보여줍니다.
- 물리적 스위치 포트는 VLAN 트렁킹을 사용하여 OpenShift Container Platform 노드에 연결합니다. 트렁크는 controlPlaneDs에서 정의한 VLAN에 대해 태그된 트래픽을 전송합니다.
-
br-ex는 가상 워크로드를 물리적 워크로드에 연결하는 OVS 브리지 역할을 합니다. -
특정 VLAN 태그가 있는 여러 CryostatD는
localnet토폴로지를 사용하여 생성됩니다. 이 구성은 트래픽 격리를 위한 특정 VLAN ID를 정의합니다. - Pod 또는 VM(가상 머신)은 네트워크 연결 개선을 위해 CryostatD CR에 연결합니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 로그인했습니다. - NMState Operator가 설치되어 있어야 합니다.
-
클러스터 설치 중에
br-ex브리지 인터페이스를 구성했습니다.
프로세스
nad-cvlan100.yaml과 같은 각 VLAN에 대해NetworkAttachmentDefinitionCR을 생성합니다. OVN-Kubernetes는 CryostatD 파일을 사용하여 Pod 또는 VM의 이더넷 프레임을 태그 지정 및 태그 해제합니다.설정 예
apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: vlan-100 namespace: default spec: config: |- { "cniVersion": "0.4.0", "name": "localnet-vlan-100", "type": "ovn-k8s-cni-overlay", "physicalNetworkName": "physnet", "topology": "localnet", "vlanID": 100, "mtu": 1500, "netAttachDefName": "default/vlan-100" } # ...Pod 또는 VM의 구성에서 CryostatD를 참조하여 Pod 또는 VM을 VLAN에 연결합니다.
Pod 구성 예
apiVersion: v1 kind: Pod metadata: annotations: k8s.v1.cni.cncf.io/networks: vlan-100 # ...VM 구성 예
apiVersion: kubevirt.io/v1 kind: VirtualMachine spec: template: spec: networks: - multus: networkName: vlan-100 name: secondary-vlan # ...
4.7. 보조 네트워크에서 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
보조 네트워크에 대한 IP 주소 할당을 구성하여 포드가 보조 네트워크에 연결할 수 있습니다.
4.7.1. 네트워크 연결을 위한 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
2차 네트워크의 경우 다양한 할당 방법(DHCP(동적 호스트 구성 프로토콜) 및 정적 할당 포함)을 지원하는 IP 주소 관리(IPAM) CNI 플러그인을 사용하여 IP 주소를 할당할 수 있습니다.
IP 주소의 동적 할당을 담당하는 DHCP IPAM CNI 플러그인은 두 가지 고유한 구성 요소로 작동합니다.
- CNI 플러그인: IP 주소를 요청하고 해제하기 위해 Kubernetes 네트워킹 스택과 통합하는 역할을 합니다.
- DHCP IPAM CNI 데몬: 환경 내 기존 DHCP 서버와 협력하여 IP 주소 할당 요청을 처리하는 DHCP 이벤트 리스너입니다. 이 데몬 자체는 DHCP 서버가 아닙니다.
IPAM 구성에서 dhcp 유형이 필요한 네트워크의 경우 DHCP 서버가 다음 조건을 충족하는지 확인하세요.
- DHCP 서버가 사용 가능하고 환경에서 실행 중입니다.
- DHCP 서버는 클러스터 외부에 있으며, 해당 서버가 고객을 위한 기존 네트워크 인프라의 일부를 형성할 것으로 예상합니다.
- DHCP 서버는 노드에 IP 주소를 제공하도록 적절하게 구성됩니다.
환경에서 DHCP 서버를 사용할 수 없는 경우 Whereabouts IPAM CNI 플러그인을 사용하는 것을 고려하세요. Whereabouts CNI는 외부 DHCP 서버가 필요 없이 유사한 IP 주소 관리 기능을 제공합니다.
외부 DHCP 서버가 없거나 정적 IP 주소 관리가 선호되는 경우 Whereabouts CNI 플러그인을 사용하세요. Whereabouts 플러그인에는 오래된 IP 주소 할당을 관리하는 조정자 데몬이 포함되어 있습니다.
DHCP IPAM CNI 데몬이라는 별도의 데몬을 포함하여 컨테이너의 수명 동안 DHCP 임대를 주기적으로 갱신합니다. DHCP IPAM CNI 데몬을 배포하려면 클러스터 네트워크 운영자(CNO) 구성을 변경하여 이 데몬이 보조 네트워크 설정의 일부로 배포되도록 합니다.
4.7.1.1. 고정 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 JSON은 고정 IP 주소 할당 구성에 대해 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
IPAM 주소 유형. |
|
|
| 가상 인터페이스에 할당할 IP 주소를 지정하는 객체의 배열입니다. IPv4 및 IPv6 IP 주소가 모두 지원됩니다. |
|
|
| 포드 내부에서 구성할 경로를 지정하는 객체 배열입니다. |
|
|
| 선택 사항: DNS 구성을 지정하는 객체 배열입니다. |
주소 배열에는 다음 필드가 있는 객체가 필요합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
지정하는 IP 주소 및 네트워크 접두사입니다. 예를 들어, |
|
|
| 송신 네트워크 트래픽을 라우팅할 기본 게이트웨이입니다. |
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
CIDR 형식의 IP 주소 범위(예: |
|
|
| 네트워크 트래픽을 라우팅하는 게이트웨이. |
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
| DNS 쿼리가 전송되는 하나 이상의 IP 주소 배열입니다. |
|
|
|
호스트 이름에 추가할 기본 도메인입니다. 예를 들어 도메인이 |
|
|
|
DNS 조회 쿼리 중에 규정되지 않은 호스트 이름(예: |
고정 IP 주소 할당 구성 예
{
"ipam": {
"type": "static",
"addresses": [
{
"address": "191.168.1.7/24"
}
]
}
}
4.7.1.2. 동적 IP 주소(DHCP) 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
포드는 생성될 때 원래의 DHCP 임대권을 얻습니다. 리스는 클러스터에서 실행되는 최소 DHCP 서버 배포를 통해 주기적으로 갱신되어야 합니다.
이더넷 네트워크 연결의 경우, SR-IOV 네트워크 운영자는 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"
}
}
# ...
다음과 같습니다.
type- 클러스터에 대한 동적 IP 주소 할당을 지정합니다.
4.7.1.3. Whereabouts를 사용한 동적 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
Whereabouts CNI 플러그인은 DHCP 서버를 사용하지 않고 보조 네트워크에 IP 주소를 동적으로 할당하는 데 도움이 됩니다.
Whereabouts CNI 플러그인은 또한 중복되는 IP 주소 범위와 별도의 NetworkAttachmentDefinition CRD 내에서 동일한 CIDR 범위를 여러 번 구성하는 것을 지원합니다. 이를 통해 멀티테넌트 환경에서 더 큰 유연성과 관리 기능이 제공됩니다.
4.7.1.3.1. 동적 IP 주소 구성 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에서는 Whereabouts를 사용한 동적 IP 주소 할당을 위한 구성 개체를 설명합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
|
|
|
IPAM 주소 유형. |
| 범위 |
| CIDR 표기법으로 나타낸 IP 주소와 범위입니다. IP 주소는 이 주소 범위 내에서 할당됩니다. |
|
|
| 선택 사항: CIDR 표기법으로 나타낸 0개 이상의 IP 주소 및 범위 목록입니다. 제외된 주소 범위 내의 IP 주소는 할당되지 않습니다. |
|
|
| 선택 사항: 동일한 IP 주소 범위를 공유하더라도 각 포드 그룹 또는 도메인이 고유한 IP 주소 세트를 갖도록 보장하는 데 도움이 됩니다. 이 필드를 설정하는 것은 네트워크를 분리하고 체계적으로 유지하는 데 중요하며, 특히 다중 테넌트 환경에서 중요합니다. |
4.7.1.3.2. IP 주소 범위를 제외한 Whereabouts를 사용한 동적 IP 주소 할당 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 예에서는 Whereabouts를 사용하는 NAD 파일의 동적 주소 할당 구성을 보여줍니다.
특정 IP 주소 범위를 제외하는 동적 IP 주소 할당 위치
{
"ipam": {
"type": "whereabouts",
"range": "192.0.2.192/27",
"exclude": [
"192.0.2.192/30",
"192.0.2.196/32"
]
}
}
4.7.1.3.3. IP 주소 범위가 겹치는 Whereabouts를 사용하는 동적 IP 주소 할당 링크 복사링크가 클립보드에 복사되었습니다!
다음 예에서는 다중 테넌트 네트워크에 대해 중복되는 IP 주소 범위를 사용하는 동적 IP 주소 할당을 보여줍니다.
NetworkAttachmentDefinition 1
{
"ipam": {
"type": "whereabouts",
"range": "192.0.2.192/29",
"network_name": "example_net_common",
}
}
다음과 같습니다.
network_name-
선택적 매개변수 설정된 경우
NetworkAttachmentDefinition 2의network_name과 일치해야 합니다.
NetworkAttachmentDefinition 2
{
"ipam": {
"type": "whereabouts",
"range": "192.0.2.192/24",
"network_name": "example_net_common",
}
}
다음과 같습니다.
network_name-
선택적 매개변수 설정된 경우
NetworkAttachmentDefinition 1의network_name과 일치해야 합니다.
4.7.1.4. 위치 조정자 데몬 세트 생성 링크 복사링크가 클립보드에 복사되었습니다!
Whereabouts 조정자는 Whereabouts IP 주소 관리(IPAM) 솔루션을 사용하여 클러스터 내의 포드에 대한 동적 IP 주소 할당을 관리하는 역할을 합니다. Whereabouts 조정자는 각 포드가 지정된 IP 주소 범위에서 고유한 IP 주소를 얻도록 보장합니다. Whereabouts 조정자는 포드가 삭제되거나 축소될 때 IP 주소 해제도 처리합니다.
동적 IP 주소 할당을 위해 NetworkAttachmentDefinition 사용자 정의 리소스 정의(CRD)를 사용할 수도 있습니다.
클러스터 네트워크 운영자를 통해 보조 네트워크를 구성하면 whereabouts-reconciler 데몬 세트가 자동으로 생성됩니다. YAML 매니페스트에서 보조 네트워크를 구성할 때 whereabouts-reconciler DaemonSet은 자동으로 생성되지 않습니다.
whereabouts-reconciler 데몬 세트의 배포를 트리거하려면 Cluster Network Operator 사용자 정의 리소스(CR) 파일을 편집하여 whereabouts-shim 네트워크 연결을 수동으로 만들어야 합니다.
프로세스
다음 명령을 실행하여
Network.operator.openshift.ioCR을 편집합니다.$ oc edit network.operator.openshift.io cluster이 예제 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 # ...- 파일을 저장하고 텍스트 편집기를 종료합니다.
다음 명령을 실행하여
whereabouts-reconciler데몬 세트가 성공적으로 배포되었는지 확인하세요.$ oc get all -n openshift-multus | grep whereabouts-reconcilerpod/whereabouts-reconciler-jnp6g 1/1 Running 0 6s pod/whereabouts-reconciler-k76gg 1/1 Running 0 6s daemonset.apps/whereabouts-reconciler 6 6 6 6 6 kubernetes.io/os=linux 6s
4.7.1.5. Whereabouts IP 조정자 일정 구성 링크 복사링크가 클립보드에 복사되었습니다!
Whereabouts IPAM CNI 플러그인은 IP 주소 조정기를 매일 실행합니다. 이 프로세스는 IP 주소 고갈로 이어질 수 있는 고립된 IP 주소 할당을 정리하여 새로운 포드에 고립된 IP 주소가 할당되는 것을 방지합니다.
이 절차를 사용하여 IP 조정기가 실행되는 빈도를 변경합니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
whereabouts-reconciler데몬 세트를 배포했고,whereabouts-reconciler포드가 작동하여 실행 중입니다.
프로세스
IP 조정자에 대한 특정 Cron 표현식을 사용하여
openshift-multus네임스페이스에whereabouts-config라는이름의ConfigMap객체를 생성하려면 다음 명령을 실행하세요.$ oc create configmap whereabouts-config -n openshift-multus --from-literal=reconciler_cron_expression="*/15 * * * *"이 cron 표현식은 IP 조정자가 15분마다 실행됨을 나타냅니다. 귀하의 구체적인 요구 사항에 맞게 표현을 조정하세요.
참고위치 조정자데몬 세트는 별표 5개가 포함된 cron 표현식 패턴만 사용할 수 있습니다. Red Hat은 초를 나타내는 여섯 번째 별표를 지원하지 않습니다.다음 명령을 실행하여
openshift-multus네임스페이스 내의whereabouts-reconciler데몬 세트 및 포드와 관련된 리소스에 대한 정보를 검색합니다.$ oc get all -n openshift-multus | grep whereabouts-reconcilerpod/whereabouts-reconciler-2p7hw 1/1 Running 0 4m14s pod/whereabouts-reconciler-76jk7 1/1 Running 0 4m14s daemonset.apps/whereabouts-reconciler 6 6 6 6 6 kubernetes.io/os=linux 4m16s다음 명령을 실행하여
whereabouts-reconciler포드가 구성된 간격으로 IP 조정기를 실행하는지 확인합니다.$ oc -n openshift-multus logs whereabouts-reconciler-2p7hw2024-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
4.7.1.6. Whereabouts IPAM CNI 플러그인을 위한 빠른 IPAM 구성 링크 복사링크가 클립보드에 복사되었습니다!
Wherabouts는 클러스터 전체 수준에서 IP 주소를 할당하는 IP 주소 관리(IPAM) 컨테이너 네트워크 인터페이스(CNI) 플러그인입니다. Whereabouts에는 DHCP(동적 호스트 구성 프로토콜) 서버가 필요하지 않습니다.
일반적인 Wherabouts 워크플로는 다음과 같습니다.
-
Whereabouts는
192.168.2.0/24와 같은 CIDR(Classless Inter-Domain Routing) 표기법의 주소 범위를 사용하고192.168.2.1~192.168.2.254와 같이 해당 범위 내의 IP 주소를 할당합니다. - Whereabouts는 CIDR 범위에서 가장 낮은 값의 주소인 IP 주소를 Pod에 할당하고 해당 Pod의 수명 동안 데이터 저장소에서 IP 주소를 추적합니다.
- 포드가 제거되면 Whereabouts는 포드에서 주소를 해제하여 주소를 할당에 사용할 수 있도록 합니다.
특히 클러스터의 노드가 많은 수의 Pod를 실행하는 경우 Whereabouts의 성능을 개선하려면 Fast IPAM 기능을 활성화할 수 있습니다.
Fast IPAM은 기술 미리보기 기능일 뿐입니다. 기술 미리 보기 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
Fast IPAM 기능은 Whereabouts Controller에서 관리하는 nodeslicepools를 사용하여 노드의 IP 할당을 최적화합니다.
사전 요구 사항
-
Network.operator.openshift.io사용자 정의 리소스(CR)에whereabouts-shim구성을 추가하여 클러스터 네트워크 운영자(CNO)가 Whereabouts Controller를 배포할 수 있도록 했습니다. "Whereabouts 조정자 데몬 세트 만들기"를 참조하세요. -
Fast IPAM 기능을 작동시키려면
NetworkAttachmentDefinition(NAD)과 Pod가 동일한openshift-multus네임스페이스에 있는지 확인하세요.
프로세스
다음 명령을 입력하여 Whereabouts Controller가 실행 중인지 확인하세요.
$ oc get pods -n openshift-multus | grep whereabouts-controllerwhereabouts-controller-5cbfd6c475-fr7d7 1/1 Running 0 22s ...중요Whereabouts Controller가 실행 중이 아니면 Fast IPAM이 작동하지 않습니다.
다음 예제 구성에서 보여준 것처럼 클러스터에 대한 NAD 파일을 만들고 Fast IPAM 세부 정보를 파일에 추가합니다.
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: wb-ipam namespace: openshift-multus spec: config: '{ "cniVersion": "0.3.0", "name": "wb-ipam-cni-name", "type": "bridge", "bridge": "cni0", "ipam": { "type": "whereabouts", "range": "10.5.0.0/20", "node_slice_size": "/24" } }' # ...다음과 같습니다.
네임스페이스- CNO가 NAD를 배포하는 네임스페이스입니다.
name- Whereabouts IPAM CNI 플러그인의 이름입니다.
type-
IPAM CNI 플러그인의 유형(예:
whereabouts) - 범위
- Whereabouts IPAM CNI 플러그인이 Pod에 IP 주소를 할당하는 데 사용하는 IP 풀의 IP 주소 범위입니다.
node_slice_size- 각 노드에서 사용할 수 있는 IP 주소의 슬라이스 크기를 설정합니다.
포드의 YAML 파일에 Whereabouts IPAM CNI 플러그인 주석 세부 정보를 추가합니다.
apiVersion: v1 kind: Pod metadata: name: samplepod annotations: k8s.v1.cni.cncf.io/networks: openshift-multus/wb-ipam spec: containers: - name: samplecontainer command: ["/bin/bash", "-c", "trap : TERM INT; sleep infinity & wait"] image: registry.redhat.io/ubi9/ubi-minimal # ...다음과 같습니다.
name- Pod의 이름입니다.
k8s.v1.cni.cncf.io/networks-
openshift-multus네임스페이스에 있는 Whereabouts IPAM CNI 플러그인 이름을 참조하는 주석 세부 정보입니다. - 이름- 포드의 컨테이너 이름입니다.
command- 컨테이너의 진입점을 정의하고 Whereabouts IPAM CNI 플러그인에서 컨테이너의 동작을 제어합니다.
클러스터에서 실행되는 노드에 있는 Pod에 NAD 파일 구성을 적용합니다.
$ oc create -f <NAD_file_name>.yaml
검증
다음 명령을 입력하여 포드의 IP 주소 세부 정보를 표시합니다.
$ oc describe pod <pod_name>... k8s.v1.cni.cncf.io/network-status: [{ "name": "ovn-kubernetes", "interface": "eth0", "ips": [ "10.128.3.174" ], "mac": "0a:58:0a:80:03:ae", "default": true, "dns": {} },{ "name": "openshift-multus/wb-ipam", "interface": "net1", "ips": [ "10.5.0.1" ], "mac": "1a:04:6f:a4:15:3c", "dns": {} }] k8s.v1.cni.cncf.io/networks: openshift-multus/wb-ipam ...다음 명령을 입력하여 포드에 액세스하고 해당 인터페이스를 확인하세요.
$ oc exec <pod_name> -- ip a... 3: net1@if439: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 1a:04:6f:a4:15:3c brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.5.0.1/20 brd 10.5.15.255 scope global net1 valid_lft forever preferred_lft forever inet6 fe80::1804:6fff:fea4:153c/64 scope link valid_lft forever preferred_lft forever ...다음과 같습니다.
inet: Pod가net1인터페이스의10.5.0.1IP 주소에 예상대로 연결되어 있습니다.다음 명령을 입력하여
openshift-multus네임스페이스에 노드 선택기 풀이 있는지 확인합니다. 예상되는 출력에는nodeslicepool과 같은 노드 선택기 풀의 이름과 `32m과 같은 생성 시간(분)이표시됩니다.$ oc get nodeslicepool -n openshift-multus출력 예
NAME AGE wb-ipam-cni-name 32m
4.7.1.7. 듀얼 스택 IP 주소를 동적으로 할당하기 위한 구성 생성 링크 복사링크가 클립보드에 복사되었습니다!
보조 네트워크에 듀얼 스택 IP 주소를 동적으로 할당하면 포드가 IPv4 및 IPv6 주소 모두를 통해 통신할 수 있습니다.
ipRanges 매개변수에서 다음 IP 주소 할당 유형을 구성할 수 있습니다.
- IPv4 주소
- IPv6 주소
- 다중 IP 주소 할당
프로세스
-
유형을whereabouts로 설정합니다. 다음 예와 같이
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"} ] } }- 보조 네트워크를 포드에 연결합니다. 자세한 내용은 "보조 네트워크에 포드 추가"를 참조하세요.
검증
다음 명령을 입력하여 Pod의 네트워크 네임스페이스 내 네트워크 인터페이스에 모든 IP 주소가 할당되었는지 확인하세요.
$ oc exec -it <pod_name> -- ip a다음과 같습니다.
<podname>- Pod의 이름입니다.
4.8. 컨테이너 네트워크 네임스페이스에서 마스터 인터페이스 구성 링크 복사링크가 클립보드에 복사되었습니다!
마스터 인터페이스를 기반으로 MAC-VLAN, IP-VLAN 및 VLAN 하위 인터페이스를 생성하고 관리할 수 있습니다.
4.8.1. 컨테이너 네트워크 네임스페이스에서 마스터 인터페이스 구성에 관하여 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너 네임스페이스에 있는 마스터 인터페이스를 기반으로 MAC-VLAN, IP-VLAN 또는 VLAN 하위 인터페이스를 만들 수 있습니다. 별도의 네트워크 연결 정의 CRD에서 포드 네트워크 구성의 일부로 마스터 인터페이스를 생성할 수도 있습니다.
컨테이너 네임스페이스 마스터 인터페이스를 사용하려면 NetworkAttachmentDefinition CRD의 하위 인터페이스 구성에 있는 linkInContainer 매개변수에 대해 true를 지정해야 합니다.
4.8.1.1. SR-IOV VF에 여러 VLAN 생성 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV VF를 기반으로 여러 개의 VLAN을 생성할 수 있습니다. 이 구성의 경우 SR-IOV 네트워크를 만든 다음 VLAN 인터페이스에 대한 네트워크 연결을 정의합니다.
다음 다이어그램은 SR-IOV VF에서 여러 VLAN을 생성하기 위한 설정 프로세스를 보여줍니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. - SR-IOV Network Operator가 설치되어 있습니다.
프로세스
다음 명령을 사용하여 Pod를 배포할 전용 컨테이너 네임스페이스를 만듭니다.
$ oc new-project test-namespaceSR-IOV 노드 정책을 생성합니다.
SriovNetworkNodePolicy오브젝트를 생성한 후 YAML을<name>-sriov-node-network.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" deviceID: "101b" rootDevices: ["00:05.0"] numVfs: 10 priority: 99 resourceName: sriovnic nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true"다음과 같습니다.
vendor-
선택 사항: SR-IOV 네트워크 장치의 벤더 16진수 코드입니다. 값
15b3은Mellanox NIC와 연관됩니다. deviceID선택사항: SR-IOV 네트워크 장치의 장치 16진수 코드입니다.
참고deviceType: netdevice설정을 사용한 SR-IOV 네트워크 노드 정책 구성 예는 Mellanox 네트워크 인터페이스 카드(NIC)에 맞게 특별히 제작되었습니다.
다음 명령을 실행하여 YAML 구성을 적용합니다.
$ oc apply -f sriov-node-network-policy.yaml참고노드 재부팅 작업으로 인해 YAML 구성을 적용하는 데 시간이 걸릴 수 있습니다.
SR-IOV 네트워크를 생성합니다.
다음 예제 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"다음 명령을 실행하여 YAML을 적용합니다.
$ oc apply -f sriov-network-attachment.yaml
VLAN 보조 네트워크를 생성합니다.
다음 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", "mtu": 1500, "vlanId": 100, "linkInContainer": true, "ipam": {"type": "whereabouts", "ipRanges": [{"range": "1.1.1.0/24"}]} } ] }다음과 같습니다.
master-
VLAN 구성에서는
마스터이름을 지정해야 합니다. Pod의 네트워크 주석에 이름을 지정할 수 있습니다. linkInContainer-
linkInContainer매개변수를 지정해야 합니다.
다음 명령을 실행하여 YAML 파일을 적용합니다.
$ oc apply -f vlan100-additional-network-configuration.yaml
이전에 지정한 네트워크를 사용하여 포드 정의를 만듭니다.
다음 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" }, { "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"다음과 같습니다.
interface-
VLAN 인터페이스의
마스터인터페이스로 사용될 이름입니다.
다음 명령을 실행하여 YAML 파일을 적용합니다.
$ oc apply -f pod-a.yaml
다음 명령을 실행하여
test-namespace내의nginx-pod에 대한 자세한 정보를 얻으세요.$ oc describe pods nginx-pod -n test-namespaceName: 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
4.8.1.2. 컨테이너 네임스페이스에서 브리지 마스터 인터페이스를 기반으로 하위 인터페이스 생성 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너 네임스페이스에 있는 브리지 마스터 인터페이스를 기반으로 하위 인터페이스를 만들 수 있습니다. 하위 인터페이스를 만드는 것은 다른 유형의 인터페이스에도 적용될 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. - cluster-admin 역할의 사용자로 OpenShift Container Platform 클러스터에 로그인합니다.
프로세스
다음 명령을 입력하여 Pod를 배포할 전용 컨테이너 네임스페이스를 만듭니다.
$ oc new-project test-namespace다음 YAML 구성 예를 사용하여
bridge-nad.yaml이라는 브리지NetworkAttachmentDefinition사용자 정의 리소스 정의(CRD) 파일을 만듭니다.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"}] } }'다음 명령을 실행하여
NetworkAttachmentDefinitionCRD를 OpenShift Container Platform 클러스터에 적용합니다.$ oc apply -f bridge-nad.yaml다음 명령을 입력하여
NetworkAttachmentDefinitionCRD가 성공적으로 생성되었는지 확인하세요. 예상되는 출력에는 NAD CRD의 이름과 생성 시간(분)이 표시됩니다.$ oc get network-attachment-definitions다음 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": "net1", "mode": "l3", "linkInContainer": true, "ipam": {"type": "whereabouts", "ipRanges": [{"range": "10.0.0.0/24"}]} }'다음과 같습니다.
master- 네트워크 연결과 연결할 이더넷 인터페이스를 지정합니다. 이더넷 인터페이스는 이후 Pod 네트워크 주석에서 구성됩니다.
linkInContainer-
컨테이너 네트워크 네임스페이스에
마스터인터페이스가 존재함을 지정합니다.
다음 명령을 실행하여 YAML 파일을 적용합니다.
$ oc apply -f ipvlan-additional-network-configuration.yaml다음 명령을 실행하여
NetworkAttachmentDefinitionCRD가 성공적으로 생성되었는지 확인하세요. 예상되는 출력에는 NAD CRD의 이름과 생성 시간(분)이 표시됩니다.$ oc get network-attachment-definitions다음 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": "net1"1 }, { "name": "ipvlan-net", "interface": "net2" } ]' 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]다음과 같습니다.
k8s.v1.cni.cncf.io/networks,interface-
IPVLAN 인터페이스의
마스터로 사용될 이름을 지정합니다.
다음 명령을 실행하여 YAML 파일을 적용합니다.
$ oc apply -f pod-a.yaml
검증
다음 명령을 사용하여 Pod가 실행 중인지 확인하세요.
$ oc get pod -n test-namespaceNAME READY STATUS RESTARTS AGE pod-a 1/1 Running 0 2m36s다음 명령을 실행하여
test-namespace내의pod-a리소스에 대한 네트워크 인터페이스 정보를 표시합니다.$ oc exec -n test-namespace pod-a -- ip a1: 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: net1@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 net1 valid_lft forever preferred_lft forever inet6 fe80::bcda:bdff:fe7e:f437/64 scope link valid_lft forever preferred_lft forever 5: net2@net1: <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 net2 valid_lft forever preferred_lft forever inet6 fe80::beda:bd00:17e:f437/64 scope link valid_lft forever preferred_lft forever이 출력은 네트워크 인터페이스
net2가물리적 인터페이스net1과 연결됨을 보여줍니다.
4.9. 추가 네트워크 제거 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 사용되지 않는 네트워크 구성을 정리하거나 네트워크 리소스를 확보하려면 추가 네트워크 연결을 제거할 수 있습니다. NetworkAttachmentDefinition 사용자 지정 리소스를 삭제하여 클러스터에서 보조 네트워크를 제거합니다.
4.9.1. 보조 NetworkAttachmentDefinition 사용자 정의 리소스 제거 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 사용되지 않는 네트워크 구성을 정리하거나 네트워크 리소스를 확보하기 위해 보조 NetworkAttachmentDefinition CR을 제거할 수 있습니다. Cluster Network Operator CR을 편집하고 NetworkAttachmentDefinition CR을 삭제하여 클러스터에서 보조 네트워크를 제거합니다.
보조 네트워크가 클러스터에서 제거되면 연결된 Pod에서 제거되지 않습니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 로그인합니다.
프로세스
다음 명령을 실행하여 기본 텍스트 편집기에서 CNO(Cluster Network Operator)를 편집합니다.
$ oc edit networks.operator.openshift.io cluster제거하려는 보조 네트워크의
additionalNetworks컬렉션에서 CNO가 생성한 구성을 제거하여 CR(사용자 정의 리소스)을 수정합니다.apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: additionalNetworks: []다음과 같습니다.
spec.additionalNetworks-
additionalNetworks컬렉션에서 제거할 보조 네트워크 연결 정의를 지정합니다.additionalNetworks컬렉션에 있는 유일한 보조 네트워크 연결 정의에 대한 구성 매핑을 제거하려면 빈 컬렉션을 지정해야 합니다.
다음 명령을 입력하여 클러스터 네트워크에서
NetworkAttachmentDefinitionCR을 제거합니다.$ oc delete net-attach-def <name_of_network_attachment_definition>&
lt;name_of_network_attachment_definition>을 삭제하려는NetworkAttachmentDefinitionCR의 이름으로 바꿉니다.- 변경 사항을 저장하고 텍스트 편집기를 종료하여 변경 사항을 커밋합니다.
선택 사항: 다음 명령을 실행하여 보조 네트워크 CR이 삭제되었는지 확인하세요.
$ oc get network-attachment-definition --all-namespaces
4.10. CNI 플러그인 연결로 고급 사용 사례에 대한 다중 네트워킹 활성화 링크 복사링크가 클립보드에 복사되었습니다!
CNI(Container Network Interface) 플러그인 체인을 사용하여 Pod에 대한 고급 다중 네트워킹 사용 사례를 활성화할 수 있습니다.
4.10.1. CNI 체인 정보 링크 복사링크가 클립보드에 복사되었습니다!
CNI 플러그인 체인을 사용하면 Pod에서 여러 네트워크 인터페이스를 사용할 수 있습니다. 이를 통해 트래픽 격리와 같은 고급 구성 및 세분화된 트래픽 정책을 통해 우선 순위가 지정된 라우팅이 가능합니다.
CNI 플러그인 체인을 사용하면 성능, 보안 및 규정 준수 요구 사항을 충족하도록 다양한 유형의 트래픽을 분리하여 네트워크 설계 및 트래픽 관리의 유연성을 높일 수 있습니다.
이 기능이 유용할 수 있는 몇 가지 시나리오는 다음과 같습니다.
- 다중 네트워크 토폴로지: 각각 관련 트래픽 정책이 있는 여러 네트워크에 Pod를 연결할 수 있습니다.
- 트래픽 격리: 각각에 적절한 보안 및 QoS 설정이 있는지 확인하기 위해 관리, 스토리지 및 애플리케이션 트래픽을 위한 별도의 네트워크를 제공합니다.
- 사용자 지정 라우팅 규칙: 특정 트래픽(예: Cryostat 트래픽)이 항상 지정된 네트워크 인터페이스를 사용하고 다른 트래픽은 기본 네트워크를 따르는지 확인합니다.
- 향상된 네트워크 성능: 특정 트래픽 유형의 우선 순위를 지정하거나 전용 네트워크 인터페이스를 통해 이를 지시하여 혼잡을 관리할 수 있습니다.
4.10.2. route-override CNI 플러그인으로 플러그인 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
플러그인 체인을 사용하면 동일한 네트워크 인터페이스에 순차적으로 여러 CNI 플러그인을 구성할 수 있으며 체인의 각 플러그인은 인터페이스를 순서대로 처리합니다.
플러그인 배열을 사용하여 은 인터페이스를 생성할 수 있으며, 두 번째 플러그인은 라우팅 구성을 수정할 수 있습니다.
NetworkAttachmentDefinition (NAD)을 정의할 때 첫 번째 플러그인
route-override CNI 플러그인은 일반적으로 첫 번째 플러그인에서 생성한 인터페이스의 라우팅 구성을 수정하기 위해 체인에서 두 번째 플러그인으로 사용됩니다. 다음 작업을 지원합니다.
-
addroutes:정적 경로를 추가하여 인터페이스를 통해 특정 대상 네트워크의 트래픽을 보냅니다. -
delroutes:인터페이스에서 특정 경로를 제거합니다. -
flushroutes:인터페이스에서 모든 경로를 제거합니다. -
flushgateway:인터페이스에서 기본 게이트웨이 경로를 제거합니다.
다음 예제에서는 각각 사용자 지정 라우팅을 사용하여 별도의 VLAN에서 두 개의 추가 네트워크 인터페이스를 사용하여 pod를 구성하여 플러그인 체인을 보여줍니다.
-
192.168.100.0/24네트워크(VLAN 100)의eth1과 이 인터페이스를 통해10.0.0.0/8트래픽을 지시하는 정적 경로가 있습니다. -
이 인터페이스를 통해
172.16.0.0/12트래픽을 지시하는 정적 경로가 있는192.168.200.0/24네트워크(VLAN 200)의eth2입니다.
각 인터페이스는 두 개의 플러그인 체인을 사용합니다. macvlan 를 사용하여 VLAN에서 인터페이스를 생성하고 route-override 를 사용하여 해당 인터페이스를 통해 특정 트래픽을 전달하는 정적 경로를 추가합니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 계정.
프로세스
다음 명령을 실행하여 예제의 네임스페이스를 생성합니다.
$ oc create namespace chain-example연결된 플러그인 구성을 사용하여 첫 번째 NetworkAttachmentDefinition(NAD)을 생성합니다.
management.yaml과 같은 YAML 파일을 생성하여 다음 구성을 사용하여 VLAN 100에서 새 인터페이스eth1을 구성하는 CryostatD를 정의합니다.apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: management-net namespace: chain-example spec: config: '{ "cniVersion": "1.0.0", "name": "management-net", "plugins": [ { "type": "macvlan", "master": "br-ex", "vlan": 100, "mode": "bridge", "ipam": { "type": "static", "addresses": [ { "address": "192.168.100.10/24", "gateway": "192.168.100.1" } ] } }, { "type": "route-override", "addroutes": [ { "dst": "10.0.0.0/8", "gw": "192.168.100.1" } ] } ] }'
다음 명령을 실행하여 CryostatD를 생성합니다.
$ oc apply -f management.yaml체인된 플러그인 구성을 사용하여 두 번째 CryostatD를 생성합니다.
sip.yaml과 같은 YAML 파일을 생성하여 다음 구성을 사용하여 VLAN 200에서 새 인터페이스eth2를 구성하는 CryostatD를 정의합니다.apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: sip-net namespace: chain-example spec: config: '{ "cniVersion": "1.0.0", "name": "sip-net", "plugins": [ { "type": "macvlan", "master": "br-ex", "vlan": 200, "mode": "bridge", "ipam": { "type": "static", "addresses": [ { "address": "192.168.200.10/24", "gateway": "192.168.200.1" } ] } }, { "type": "route-override", "addroutes": [ { "dst": "172.16.0.0/12", "gw": "192.168.200.1" } ] } ] }'
다음 명령을 실행하여 CryostatD를 생성합니다.
$ oc apply -f sip.yaml다음 구성으로 pod 정의 파일(예:
pod.yaml)을 생성하여NetworkAttachmentDefinition리소스를 Pod에 연결합니다.apiVersion: v1 kind: Pod metadata: name: chain-test-pod namespace: chain-example labels: app: chain-test annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "management-net", "interface": "eth1" }, { "name": "sip-net", "interface": "eth2" } ]' spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: test-container image: registry.access.redhat.com/ubi9/ubi:latest command: ["sleep", "infinity"] securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"]다음 명령을 실행하여 Pod를 생성합니다.
$ oc apply -f pod.yaml다음 명령을 사용하여 Pod가 실행 중인지 확인합니다.
$ oc wait --for=condition=Ready pod/chain-test-pod -n chain-example --timeout=120s출력 예:
pod/chain-test-pod condition met
검증
다음 명령을 실행하여 포드 내부의 모든 네트워크 인터페이스와 할당된 IP 주소를 나열합니다. 이렇게 하면 Pod에 플러그인 체인으로 구성된 추가 인터페이스가 있는지 확인합니다.
$ oc exec chain-test-pod -n chain-example -- ip a출력 예:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 2: eth0@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8901 qdisc noqueue state UP link/ether 0a:58:0a:83:02:19 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 10.131.2.25/23 brd 10.131.3.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::858:aff:fe83:219/64 scope link valid_lft forever preferred_lft forever 3: eth1@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP qlen 1000 link/ether aa:25:73:ff:a7:00 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.100.10/24 brd 192.168.100.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::a825:73ff:feff:a700/64 scope link valid_lft forever preferred_lft forever 4: eth2@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP qlen 1000 link/ether aa:a4:6c:4e:e8:97 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.200.10/24 brd 192.168.200.255 scope global eth2 valid_lft forever preferred_lft forever inet6 fe80::a8a4:6cff:fe4e:e897/64 scope link valid_lft forever preferred_lft forever이 출력에서는 Pod에 세 개의 네트워크 인터페이스가 있음을 보여줍니다.
-
eth0:클러스터 네트워크에 연결된 기본 인터페이스입니다. -
eth1:management-net의 첫 번째 추가 인터페이스 IP192.168.100.10. -
eth2:sip-net의 두 번째 추가 인터페이스가 IP192.168.200.10인 .
-
다음 명령을 실행하여
route-override플러그인이 예상 정적 경로를 추가했는지 확인합니다.$ oc exec chain-test-pod -n chain-example -- ip route출력 예:
default via 10.132.0.1 dev eth0 10.0.0.0/8 via 192.168.100.1 dev eth1 10.132.0.0/23 dev eth0 proto kernel scope link src 10.132.1.97 10.132.0.0/14 via 10.132.0.1 dev eth0 100.64.0.0/16 via 10.132.0.1 dev eth0 169.254.0.5 via 10.132.0.1 dev eth0 172.16.0.0/12 via 192.168.200.1 dev eth2 172.30.0.0/16 via 10.132.0.1 dev eth0 192.168.100.0/24 dev eth1 proto kernel scope link src 192.168.100.10 192.168.200.0/24 dev eth2 proto kernel scope link src 192.168.200.10이 출력은 각 체인의
route-override플러그인이 예상되는 정적 경로를 추가했음을 확인합니다.-
10.0.0.0/8에서 192.168.100.1 dev eth1의 경우10.0.0.0/8로 향하는 트래픽은management-net게이트웨이를 통해eth1을 통해 라우팅됩니다. 이 경로는management-net체인의route-override플러그인에 의해 추가되었습니다. -
172.16.0.0/12 - 192.168.200.1 dev eth2의 경우172.16.0.0/12로 향하는 트래픽은sip-net게이트웨이를 통해eth2를 통해 라우팅됩니다. 이 경로는sip-net체인의route-override플러그인에 의해 추가되었습니다. -
연결된 서브넷 경로(
192.168.100.0/24및192.168.200.0/24)는macvlan플러그인에 의해 생성되었으며 기본 경로는 클러스터 네트워크 인터페이스인eth0을 사용합니다.
-
5장. 가상 라우팅 및 전달 링크 복사링크가 클립보드에 복사되었습니다!
5.1. 가상 라우팅 및 전달 정보 링크 복사링크가 클립보드에 복사되었습니다!
VRF(가상 라우팅 및 전달)를 사용하여 멀티 테넌시 기능을 제공할 수 있습니다. 예를 들어 각 테넌트에 고유한 라우팅 테이블이 있고 다른 기본 게이트웨이가 필요한 경우입니다.
VRF는 클라우드 네이티브 네트워크 기능(CNF)에 필요한 권한 수를 줄이고 보조 네트워크의 네트워크 토폴로지에 대한 가시성을 향상시킵니다. IP 주소 규칙과 결합된 VRF 장치는 가상 라우팅 및 전달 도메인을 생성하는 기능을 제공합니다.
프로세스는 소켓을 VRF 장치에 바인딩할 수 있습니다. 바인딩된 소켓을 통한 패킷은 VRF 장치와 연결된 라우팅 테이블을 사용합니다. VRF의 중요한 기능은 OSI 모델 레이어 3 트래픽 및 LLDP와 같은 L2 도구에만 영향을 미치지 않는다는 것입니다. 이를 통해 정책 기반 라우팅과 같은 우선 순위가 높은 IP 주소 규칙이 특정 트래픽을 지시하는 VRF 장치 규칙보다 우선합니다.
5.1.1. 통신 운영자의 포드에 대한 보조 네트워크 이점 링크 복사링크가 클립보드에 복사되었습니다!
CNI(Container Network Interface) 가상 라우팅 및 전달(VRF) 플러그인과 동일한 IP 주소를 사용하여 네트워크 기능을 다른 고객의 인프라에 연결할 수 있습니다. CNI VRF 플러그인을 사용하면 서로 다른 고객이 격리됩니다.
통신 사용 사례에서 각 CNF는 동일한 주소 공간을 공유하는 다양한 네트워크에 잠재적으로 연결할 수 있습니다. 이러한 보조 네트워크는 클러스터의 기본 네트워크 CIDR과 잠재적으로 충돌할 수 있습니다.
CNI VRF 플러그인을 사용하면 IP 주소가 OpenShift Container Platform IP 주소 공간과 겹칩니다. 또한 CNI VRF 플러그인은 CNF에 필요한 권한 수를 줄이고 보조 네트워크의 네트워크 토폴로지의 가시성을 높입니다.
6장. VRF에 보조 네트워크 할당 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 CNI VRF 플러그인을 사용하여 가상 라우팅 및 전달(VRF) 도메인에 대한 보조 네트워크를 구성할 수 있습니다. 이 플러그인이 만드는 가상 네트워크는 사용자가 지정한 물리적 인터페이스와 연결됩니다.
VRF 인스턴스와 함께 보조 네트워크를 사용하면 다음과 같은 이점이 있습니다.
- 작업 부하 격리
- 보조 네트워크에 대한 VRF 인스턴스를 구성하여 워크로드 트래픽을 격리합니다.
- 보안 강화
- VRF 도메인의 격리된 네트워크 경로를 통해 보안을 강화합니다.
- 멀티 테넌시 지원
- 각 테넌트에 대한 VRF 도메인의 고유한 라우팅 테이블을 사용하여 네트워크 분할을 통해 다중 테넌시를 지원합니다.
VRF를 사용하는 애플리케이션은 특정 장치에 바인딩해야 합니다. 일반적인 사용은 소켓에 SO_BINDTODEVICE 옵션을 사용하는 것입니다. SO_BINDTODEVICE 옵션은 소켓을 전달된 인터페이스 이름(예: eth1) 에 지정된 장치에 바인딩합니다. SO_BINDTODEVICE 옵션을 사용하려면 애플리케이션에 CAP_NET_RAW 기능이 있어야 합니다.
OpenShift Container Platform Pod에서는 ip vrf exec 명령을 통해 VRF를 사용할 수 없습니다. VRF를 사용하려면 애플리케이션을 VRF 인터페이스에 직접 바인딩합니다.
6.1. CNI VRF 플러그인을 사용하여 보조 네트워크 연결 만들기 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 네트워크 운영자(CNO)는 보조 네트워크 정의를 관리합니다. 클러스터 범위 네트워크 사용자 정의 리소스(CR)에서 보조 네트워크를 지정하면 CNO가 자동으로 NetworkAttachmentDefinition CR을 생성합니다.
CNO가 관리하는 NetworkAttachmentDefinition CR을 편집하지 마십시오. 그렇게 하면 보조 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc)를 설치합니다. -
cluster-admin권한이 있는 사용자로 클러스터에 로그인합니다.
프로세스
추가 네트워크 연결을 위한
네트워크CR을 만들고 보조 네트워크에 대한rawCNIConfig구성을 삽입합니다.additional-network-attachment.yaml파일로 저장합니다.apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: additionalNetworks: - name: test-network-1 namespace: additional-network-1 type: Raw rawCNIConfig: '{ "cniVersion": "0.3.1", "name": "macvlan-vrf", "plugins": [ { "type": "macvlan", "master": "eth1", "ipam": { "type": "static", "addresses": [ { "address": "191.168.1.23/24" } ] } }, { "type": "vrf", "vrfname": "vrf-1", "table": 1001 }] }'다음과 같습니다.
plugins- 목록을 지정해야 합니다. 목록의 첫 번째 항목은 VRF 네트워크를 기반으로 하는 보조 네트워크여야 합니다. 목록의 두 번째 항목은 VRF 플러그인 구성입니다.
type-
이 매개변수를
vrf로 설정해야 합니다. vrfname- 인터페이스가 할당된 VRF의 이름입니다. 포드에 VRF가 없으면 CNI가 VRF를 생성합니다.
테이블선택적 매개변수 라우팅 테이블 ID를 지정합니다. 기본적으로
tableid매개변수가 사용됩니다. 테이블 ID를 지정하지 않으면 CNI가 VRF에 사용 가능한 라우팅 테이블 ID를 할당합니다.참고VRF는 리소스의 유형이
netdevice인 경우에만 올바르게 작동합니다.
Network리소스를 생성합니다.$ oc create -f additional-network-attachment.yamlCNO가 다음 명령을 실행하여
NetworkAttachmentDefinitionCR을 생성했는지 확인합니다.<namespace>를 네트워크 연결을 구성할 때 지정한 네임스페이스(예:additional-network-1)로 바꿉니다. 예상되는 출력에는 NAD CR의 이름과 생성 시간(분)이 표시됩니다.$ oc get network-attachment-definitions -n <namespace>참고CNO가 CR을 생성하기 전에 지연이 발생할 수 있습니다.
검증
포드를 생성하고 VRF 플러그인 구성을 포함하는 보조 네트워크에 포드를 할당합니다.
다음
pod-additional-net.yaml파일에서 보여준 것처럼Pod리소스를 정의하는 YAML 파일을 만듭니다.apiVersion: v1 kind: Pod metadata: name: pod-additional-net annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "test-network-1"1 } ]' spec: containers: - name: example-pod-1 command: ["/bin/bash", "-c", "sleep 9000000"] image: centos:8다음과 같습니다.
name- VRF 플러그인 구성을 포함하는 보조 네트워크의 이름을 지정합니다.
다음 명령을 실행하여 리소스를 생성합니다. 예상되는 출력에는
Pod리소스의 이름과 생성 시간(분)이 표시됩니다.$ oc create -f pod-additional-net.yaml
Pod 네트워크 연결이 VRF 보조 네트워크에 연결되는지 확인하세요. Pod로 원격 세션을 시작하고 다음 명령을 실행합니다. 예상되는 출력에는 VRF 인터페이스의 이름과 라우팅 테이블에서의 고유 ID가 표시됩니다.
$ ip vrf show다음 명령을 입력하여 VRF 인터페이스가 보조 인터페이스의 컨트롤러인지 확인하세요.
$ ip link5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode