17.2. 기본 네트워크
17.2.1. 사용자 정의 네트워크 정보
UserDefinedNetwork
는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
UDN(사용자 정의 네트워크)을 구현하기 전에 OpenShift Container Platform의 OVN-Kubernetes CNI 플러그인은 기본 또는 기본 네트워크에서 계층 3 토폴로지만 지원했습니다. Kubernetes 설계 원칙으로 인해 모든 Pod는 기본 네트워크에 연결되어 있으며 모든 Pod는 IP 주소를 통해 서로 통신하며 Pod 간 트래픽은 네트워크 정책에 따라 제한됩니다.
UDN은 이러한 모든 세그먼트가 기본적으로 격리되는 사용자 지정 계층 2, 계층 3 및 localnet 네트워크 세그먼트를 활성화하여 Kubernetes Pod 네트워크에 대한 기본 계층 3 토폴로지의 유연성 및 분할 기능을 향상시킵니다. 이러한 세그먼트는 기본 OVN-Kubernetes CNI 플러그인을 사용하는 컨테이너 Pod 및 가상 머신의 기본 또는 보조 네트워크 역할을 합니다. UDN은 광범위한 네트워크 아키텍처 및 토폴로지를 지원하여 네트워크 유연성, 보안 및 성능을 향상시킵니다.
기본 네트워크와 보조 네트워크에서 Localnet 토폴로지에 대한 지원은 향후 OpenShift Container Platform 버전에 추가됩니다.
클러스터 관리자는 UDN을 사용하여 ClusterUserDefinedNetwork
CR(사용자 정의 리소스)을 활용하여 클러스터 수준에서 여러 네임스페이스에 걸쳐 있는 추가 네트워크를 생성하고 정의할 수 있습니다. 또한 클러스터 관리자 또는 클러스터 사용자는 UDN을 사용하여 UserDefinedNetwork
CR을 사용하여 네임스페이스 수준에서 추가 네트워크를 정의할 수 있습니다.
다음 다이어그램에서는 각 네임스페이스에 하나의 할당된 사용자 정의 네트워크(UDN)가 할당되고 각 UDN에는 Pod IP 할당에 대해 사용자 지정 서브넷이 할당되는 네 가지 클러스터 네임스페이스를 보여줍니다. OVN-Kubernetes는 겹치는 UDN 서브넷을 처리합니다. Kubernetes 네트워크 정책을 사용하지 않으면 UDN에 연결된 Pod는 해당 UDN의 다른 Pod와 통신할 수 있습니다. 기본적으로 이러한 Pod는 다른 UDN에 존재하는 Pod와 통신하지 않습니다. 마이크로 세분화의 경우 UDN 내에서 네트워크 정책을 적용할 수 있습니다. 네임스페이스에 하나의 기본 UDN만 제한하고 하나 이상의 네임스페이스를 UDN에 지정하여 하나 이상의 UDN을 네임스페이스에 할당할 수 있습니다.
그림 17.1. UserDefinedNetwork CR을 사용한 네임스페이스 격리

다음 섹션에서는 사용자 정의 네트워크의 이점 및 제한 사항, UserDefinedNetwork
사용자 지정 리소스를 생성할 때 모범 사례, 사용자 지정 리소스를 생성하는 방법 및 배포와 관련된 추가 구성 세부 정보를 강조합니다.
17.2.1.1. 사용자 정의 네트워크의 이점
사용자 정의 네트워크는 다음과 같은 이점을 제공합니다.
보안을 위한 네트워크 격리 개선
- 테넌트 격리: 네임스페이스는 RHOSP(Red Hat OpenStack Platform)에서 테넌트를 분리하는 방법과 유사하게 격리된 기본 네트워크를 보유할 수 있습니다. 이렇게 하면 교차 테넌트 트래픽의 위험을 줄임으로써 보안이 향상됩니다.
네트워크 유연성
- 계층 2 및 3 계층 지원: 클러스터 관리자는 기본 네트워크를 계층 2 또는 계층 3 네트워크 유형으로 구성할 수 있습니다.
간소화된 네트워크 관리
- 네트워크 구성 복잡성 감소: 사용자 정의 네트워크를 사용하면 서로 다른 네트워크의 워크로드를 그룹화하여 격리를 수행할 수 있으므로 복잡한 네트워크 정책의 필요성이 제거됩니다.
고급 기능
- 일관되고 선택 가능한 IP 주소 지정: 사용자는 다른 네임스페이스 및 클러스터에서 IP 서브넷을 지정 및 재사용할 수 있으므로 일관된 네트워킹 환경을 제공할 수 있습니다.
- 다중 네트워크 지원: 사용자 정의 네트워킹 기능을 사용하면 관리자가 여러 네임스페이스를 단일 네트워크에 연결하거나 네임스페이스 집합마다 별도의 네트워크를 만들 수 있습니다.
RHOSP(Red Hat OpenStack Platform)에서 애플리케이션 마이그레이션 간소화
- 네트워크 패리티: 사용자 정의 네트워킹을 사용하면 유사한 네트워크 격리 및 구성 옵션을 제공하여 OpenStack에서 OpenShift Container Platform으로 애플리케이션을 마이그레이션할 수 있습니다.
개발자와 관리자는 사용자 정의 리소스를 사용하여 네임스페이스 범위를 지정하는 사용자 정의 네트워크를 만들 수 있습니다. 프로세스의 개요는 다음과 같습니다.
-
관리자는
k8s.ovn.org/primary-user-defined-network
레이블을 사용하여 사용자 정의 네트워크의 네임스페이스를 생성합니다. -
UserDefinedNetwork
CR은 클러스터 관리자 또는 사용자가 생성합니다. - 사용자는 네임스페이스에 Pod를 생성합니다.
17.2.1.2. UserDefinedNetwork 사용자 정의 리소스에 대한 제한 사항
UDN(사용자 정의 네트워크)은 사용자 정의 네트워크 구성 옵션을 제공하지만 클러스터 관리자와 개발자는 이러한 네트워크를 구현하고 관리할 때 알고 있어야 하는 제한 사항이 있습니다. 사용자 정의 네트워크를 구현하기 전에 다음 제한 사항을 고려하십시오.
DNS 제한 사항:
- Pod의 DNS 조회는 클러스터 기본 네트워크의 Pod IP 주소로 확인됩니다. Pod가 사용자 정의 네트워크의 일부인 경우에도 DNS 조회는 해당 사용자 정의 네트워크에서 Pod의 IP 주소로 확인되지 않습니다. 그러나 서비스 및 외부 엔티티에 대한 DNS 조회가 예상대로 작동합니다.
- Pod가 기본 UDN에 할당되면 클러스터의 기본 네트워크의 Kubernetes API(KAPI) 및 DNS 서비스에 액세스할 수 있습니다.
- 초기 네트워크 할당: Pod를 생성하기 전에 네임스페이스와 네트워크를 생성해야 합니다. Pod가 포함된 네임스페이스를 새 네트워크에 할당하거나 기존 네임스페이스에서 UDN을 생성하는 것은 OVN-Kubernetes에서 허용되지 않습니다.
- 상태 점검 제한 사항: Kubelet 상태 점검은 Pod에서 기본 인터페이스의 네트워크 연결을 확인하지 않는 클러스터 기본 네트워크에서 수행됩니다. 결과적으로 기본 네트워크에서 pod가 정상으로 표시되지만 기본 인터페이스에서 연결이 끊어진 시나리오는 사용자 정의 네트워크를 사용할 수 있습니다.
- 네트워크 정책 제한: 다른 사용자 정의 기본 네트워크에 연결된 네임스페이스 간 트래픽을 활성화하는 네트워크 정책은 적용되지 않습니다. 이러한 트래픽 정책은 격리된 네트워크 간에 연결이 없기 때문에 적용되지 않습니다.
17.2.1.3. UserDefinedNetwork의 모범 사례
UDN( UserDefinedNetwork
) 리소스를 설정하기 전에 사용자는 다음 정보를 고려해야 합니다.
-
OpenShift-*
네임스페이스는 UDN을 설정하는 데 사용해서는 안 됩니다. 사용자 정의 네트워크에는 2개의 masquerade IP 주소가 필요합니다. 필요한 네트워크 수를 보유할 수 있을 만큼 충분히 커지도록 마스커레이드 서브넷을 재구성해야 합니다.
중요-
OpenShift Container Platform 4.17 이상의 경우 클러스터는 IPv4에
169.254.0.0/17
을 사용하고 IPv6의 경우fd69::/112
를 기본 masquerade 서브넷으로 사용합니다. 이러한 범위는 사용자가 피해야 합니다. 업데이트된 클러스터의 경우 기본 masquerade 서브넷이 변경되지 않습니다. - 프로젝트에 대해 사용자 정의 네트워크를 구성한 후에는 클러스터의 masquerade 서브넷을 변경할 수 없습니다. UDN을 설정한 후 masquerade 서브넷을 수정하면 네트워크 연결이 중단되고 구성 문제가 발생할 수 있습니다.
-
OpenShift Container Platform 4.17 이상의 경우 클러스터는 IPv4에
-
테넌트가
NetworkAttachmentDefinition
(NAD) 리소스가 아닌UserDefinedNetwork
리소스를 사용하고 있는지 확인합니다. 이렇게 하면 테넌트 간에 보안 위험이 발생할 수 있습니다. - 네트워크 분할을 생성할 때는 UDN 리소스를 사용하여 사용자 정의 네트워크 분할을 완료할 수 없는 경우에만 192.0.2.D 리소스를 사용해야 합니다.
-
UDN의 클러스터 서브넷 및 서비스 CIDR은 기본 클러스터 서브넷 CIDR과 중복될 수 없습니다. OVN-Kubernetes 네트워크 플러그인은
100.64.0.0/16
을 기본 네트워크의 조인 서브넷으로 사용하므로 해당 값을 사용하여 UDNjoinSubnets
필드를 구성해서는 안 됩니다. 기본 주소 값이 클러스터의 네트워크 어디에서나 사용되는 경우joinSubnets
필드를 설정하여 재정의해야 합니다. 자세한 내용은 "사용자 정의 네트워크 CR에 대한 추가 구성 세부 정보"를 참조하십시오. -
UDN의 클러스터 서브넷 및 서비스 CIDR은 기본 클러스터 서브넷 CIDR과 중복될 수 없습니다. OVN-Kubernetes 네트워크 플러그인은
100.64.0.0/16
을 네트워크의 기본 조인 서브넷으로 사용하므로 해당 값을 사용하여 UDNjoinSubnets
필드를 구성해서는 안 됩니다. 기본 주소 값이 클러스터의 네트워크 어디에서나 사용되는 경우joinSubnets
필드를 설정하여 기본값을 재정의해야 합니다. 자세한 내용은 "사용자 정의 네트워크 CR에 대한 추가 구성 세부 정보"를 참조하십시오. - 계층 2 토폴로지는 클러스터의 모든 노드에 분산된 가상 스위치를 생성합니다. 가상 머신과 Pod는 이 가상 스위치에 연결하여 이러한 모든 구성 요소가 동일한 서브넷 내에서 서로 통신할 수 있도록 합니다. 계층 2 서브넷을 지정하지 않으려면 클러스터의 각 Pod에 대해 IP 주소를 수동으로 구성해야 합니다. 계층 2 서브넷을 지정하지 않는 경우 포트 보안은 MAC(Media Access Control) 스푸핑만 방지하기 위해 제한되며 IP 스푸핑을 포함하지 않습니다. 계층 2 토폴로지는 대규모 네트워크 환경에서 어려울 수 있는 단일 브로드캐스트 도메인을 생성합니다. 이 경우 토폴로지가 네트워크 성능을 저하시킬 수 있는 브로드캐스트 브랜덤을 유발할 수 있습니다.
-
계층 3 토폴로지는 클러스터의 각 노드에 대해 고유한 계층 2 세그먼트를 생성합니다. 계층 3 라우팅 메커니즘은 서로 다른 노드에서 호스팅되는 가상 머신과 pod가 서로 통신할 수 있도록 이러한 세그먼트를 상호 연결합니다. 계층 3 토폴로지는 각 도메인을 특정 노드에 할당하여 대규모 브로드캐스트 도메인을 효과적으로 관리할 수 있으므로 브로드캐스트 트래픽의 범위가 줄어듭니다. 계층 3 토폴로지를 구성하려면
cidr
및hostSubnet
매개변수를 구성해야 합니다.
17.2.1.4. UserDefinedNetwork 사용자 정의 리소스 생성
다음 절차에서는 네임스페이스 범위가 지정된 사용자 정의 네트워크를 생성합니다. 사용 사례에 따라 Layer2
토폴로지 유형에 대한 my-layer-two-udn.yaml
예제 또는 Layer3
토폴로지 유형에 대한 my-layer-three-udn.yaml
예제를 사용하여 요청을 생성합니다.
프로세스
Layer2
또는Layer3
토폴로지 유형 사용자 정의 네트워크에 대한 요청을 생성합니다.my-layer-two-udn.yaml
과 같은 YAML 파일을 생성하여 다음 예와 같이Layer2
토폴로지에 대한 요청을 정의합니다.apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: name: udn-1 1 namespace: <some_custom_namespace> spec: topology: Layer2 2 layer2: 3 role: Primary 4 subnets: - "10.0.0.0/24" - "2001:db8::/60" 5
- 1
UserDefinedNetwork
리소스의 이름입니다. 이는기본값
이거나 CNO(Cluster Network Operator)에서 생성한 글로벌 네임스페이스를 복제해서는 안 됩니다.- 2
topology
필드는 네트워크 구성을 설명합니다. 허용되는 값은Layer2
및Layer3
입니다.Layer2
토폴로지 유형을 지정하면 모든 노드에서 공유하는 하나의 논리 스위치가 생성됩니다.- 3
- 이 필드는 토폴로지 구성을 지정합니다.
layer2
또는layer3
일 수 있습니다. - 4
기본
또는보조
역할을 지정합니다.- 5
Layer2
토폴로지 유형의 경우 다음은subnet
필드에 대한 구성 세부 정보를 지정합니다.- subnets 필드는 선택 사항입니다.
-
subnets 필드는
문자열
유형이며 IPv4 및 IPv6 모두에 대한 표준 CIDR 형식을 허용합니다. -
subnets 필드에는 하나 또는 두 개의 항목을 사용할 수 있습니다. 두 가지 면에서는 다른 가족이어야 합니다. 예를 들어 서브넷 값은
10.100.0.0/16
및2001:db8::/64
입니다. -
Layer2
서브넷은 생략할 수 있습니다. 생략하면 사용자는 Pod의 IP 주소를 구성해야 합니다. 결과적으로 포트 보안은 MAC 스푸핑만 방지합니다. -
ipamLifecycle
필드가 지정되면Layer2
subnets
필드는 필수입니다.
my-layer-three-udn.yaml
과 같은 YAML 파일을 생성하여 다음 예와 같이Layer3
토폴로지에 대한 요청을 정의합니다.apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: name: udn-2-primary 1 namespace: <some_custom_namespace> spec: topology: Layer3 2 layer3: 3 role: Primary 4 subnets: 5 - cidr: 10.150.0.0/16 hostSubnet: 24 - cidr: 2001:db8::/60 hostSubnet: 64 # ...
- 1
UserDefinedNetwork
리소스의 이름입니다. 이는기본값
이거나 CNO(Cluster Network Operator)에서 생성한 글로벌 네임스페이스를 복제해서는 안 됩니다.- 2
topology
필드는 네트워크 구성을 설명합니다. 허용되는 값은Layer2
및Layer3
입니다.Layer3
토폴로지 유형을 지정하면 노드당 계층 2 세그먼트가 생성되며 각각 다른 서브넷이 있습니다. 계층 3 라우팅은 노드 서브넷을 상호 연결하는 데 사용됩니다.- 3
- 이 필드는 토폴로지 구성을 지정합니다. 유효한 값은
layer2
또는layer3
입니다. - 4
기본
또는보조
역할을 지정합니다.- 5
Layer3
토폴로지 유형의 경우 다음에서는subnet
필드에 대한 구성 세부 정보를 지정합니다.-
subnets
필드는 필수입니다. subnets
필드의 유형은cidr
및hostSubnet
:입니다.-
CIDR
은 클러스터의clusterNetwork
구성 설정과 동일합니다. CIDR의 IP 주소는 사용자 정의 네트워크의 포드에 배포됩니다. 이 매개변수는 문자열 값을 허용합니다. -
HostSubnet
은 노드별 서브넷 접두사를 정의합니다. -
IPv6의 경우
/64
길이만hostSubnet
에서 지원됩니다.
-
-
다음 명령을 실행하여 요청을 적용합니다.
$ 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: NetworkReady
17.2.1.4.1. UserDefinedNetworks CR에 대한 추가 구성 세부 정보
다음 표에서는 선택 사항인 UDN의 추가 구성에 대해 설명합니다. OVN-Kubernetes 네트워크 토폴로지의 명시적 필요 및 이해 없이 이러한 필드를 설정하지 않는 것이 좋습니다.
필드 | 유형 | 설명 |
---|---|---|
| object |
생략하면 플랫폼에서는 IPv4의 경우
|
| object |
|
| integer |
최대 전송 단위(MTU)입니다. 기본값은 |
17.2.2. NetworkAttachmentDefinition을 사용하여 기본 네트워크 생성
다음 섹션에서는 NetworkAttachmentDefinition
(NAD) 리소스를 사용하여 추가 기본 네트워크를 생성하고 관리하는 방법을 설명합니다.
17.2.2.1. 추가 네트워크를 관리하기 위한 접근 방식
다음 두 가지 접근 방법 중 하나를 사용하여 CryostatD에서 생성한 추가 네트워크의 라이프 사이클을 관리할 수 있습니다.
-
CNO(Cluster Network Operator) 구성을 수정합니다. 이 방법을 사용하면 CNO가
NetworkAttachmentDefinition
오브젝트를 자동으로 생성하고 관리합니다. 오브젝트 라이프사이클을 관리하는 것 외에도 CNO는 DHCP 할당된 IP 주소를 사용하는 추가 네트워크에 DHCP를 사용할 수 있도록 합니다. -
YAML 매니페스트를 적용하여 다음을 수행합니다. 이 방법을 사용하면
NetworkAttachmentDefinition
오브젝트를 생성하여 추가 네트워크를 직접 관리할 수 있습니다. 이 방법을 사용하면 Pod에서 추가 네트워크 인터페이스를 연결하기 위해 여러 CNI 플러그인을 호출할 수 있습니다.
각 접근 방식은 함께 사용할 수 없으며 한 번에 추가 네트워크를 관리하기 위한 하나의 접근 방식만 사용할 수 있습니다. 두 방법 모두 추가 네트워크는 구성하는 CNI(Container Network Interface) 플러그인에 의해 관리됩니다.
OVN SDN을 사용하여 RHOSP(Red Hat OpenStack Platform)에 여러 네트워크 인터페이스가 있는 OpenShift Container Platform 노드를 배포할 때 보조 인터페이스의 DNS 구성이 기본 인터페이스의 DNS 구성보다 우선할 수 있습니다. 이 경우 다음 명령을 실행하여 보조 인터페이스에 연결된 서브넷 ID의 DNS 이름 서버를 제거합니다.
$ openstack subnet set --dns-nameserver 0.0.0.0 <subnet_id>
17.2.2.2. Cluster Network Operator를 사용하여 추가 네트워크 연결 생성
CNO(Cluster Network Operator)는 추가 네트워크 정의를 관리합니다. 생성할 추가 네트워크를 지정하면 CNO가 NetworkAttachmentDefinition
CRD를 자동으로 생성합니다.
CNO가 관리하는 NetworkAttachmentDefinition
CRD를 편집하지 마십시오. 편집하면 추가 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
선택 사항: 추가 네트워크의 네임스페이스를 생성합니다.
$ oc create namespace <namespace_name>
CNO 구성을 편집하려면 다음 명령을 입력합니다.
$ 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가 다음 명령을 실행하여
NetworkAttachmentDefinition
CRD를 생성했는지 확인합니다. CNO가 CRD를 생성하기 전에 지연이 발생할 수 있습니다.$ oc get network-attachment-definitions -n <namespace>
다음과 같습니다.
<namespace>
- CNO 구성에 추가한 네트워크 연결의 네임스페이스를 지정합니다.
출력 예
NAME AGE test-network-1 14m
17.2.2.2.1. 추가 네트워크 연결 구성
추가 네트워크는 k8s.cni.cncf.io
API 그룹에서 NetworkAttachmentDefinition
API를 사용하여 구성됩니다.
API 구성은 다음 표에 설명되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
| 추가 네트워크의 이름입니다. |
|
| 오브젝트와 연결된 네임스페이스입니다. |
|
| JSON 형식의 CNI 플러그인 구성입니다. |
17.2.2.3. YAML 매니페스트를 적용하여 추가 네트워크 연결 생성
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
권한이 있는 사용자로 로그인했습니다. - CryostatD를 배포해야 하는 네임스페이스에서 작업하고 있습니다.
프로세스
다음 예와 같이 추가 네트워크 구성을 사용하여 YAML 파일을 생성합니다.
apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: next-net spec: config: |- { "cniVersion": "0.3.1", "name": "work-network", "namespace": "namespace2", 1 "type": "host-device", "device": "eth1", "ipam": { "type": "dhcp" } }
- 1
- 선택 사항: CryostatD가 적용되는 네임스페이스를 지정할 수 있습니다. CryostatD를 배포해야 하는 네임스페이스에서 작업하는 경우 이 사양은 필요하지 않습니다.
추가 네트워크를 생성하려면 다음 명령을 입력합니다.
$ oc apply -f <file>.yaml
다음과 같습니다.
<file>
- YAML 매니페스트가 포함된 파일의 이름을 지정합니다.