OpenShift에서 VM을 사용자 정의 네트워크에 연결하는 방법

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2025/04/02/how-connect-vms-user-defined-networks-openshift

Red Hat OpenShift 4.18  출시와 함께 user-defined network (UDN)가 일반 안정화 버전(GA)으로 출시되었습니다. UDN은 OpenShift 기반 워크로드의 컨테이너화된 포드(pod) 및 가상 머신(VM)에 활용될 수 있습니다. UDN을 통해 OpenShift 사용자는 워크로드에 대해 격리된 테넌트 네트워크를 생성할 수 있습니다. 관리자는 UDN을 활용하여 안전한 네트워크 구축, 워크로드 격리, 간소화된 IP 관리, 고급 네트워킹 기능 이용 등의 이점을 누릴 수 있습니다.

기존에는 기본 포드 네트워크에 연결된 Red Hat OpenShift Virtualization VM이 포드 네트워크에서 VM IP를 할당하는 내장 NAT를 사용합니다. 그러나 모든 VM의 실제 IP는 게스트 OS 수준에서 기본적으로 10.0.2.2/24입니다. 이는 IP를 통한 클러스터링 및 VM 검색이 필요한 서비스나 게스트 OS 수준에서 검색된 IP를 사용하여 게스트를 등록하는 백업 또는 모니터링 에이전트와 같이 NAT 사용이 문제가 되는 상황에서는 어려운 것으로 나타났습니다.

UDN을 활용하면 이러한 과제를 극복하고 OpenShift Virtualization VM을 위한 격리된 사전 정의된 네트워크 세그먼트를 생성할 수 있습니다. 각 네임스페이스는 UDN을 통해 자체 격리된 네트워크를 가질 수 있으며, 정의된 UDN 서브넷에서 VM에 결정적 IP 설정을 할당할 수 있습니다. 이 문서에서는 OpenShift Virtualization 워크로드를 위한 UDN을 생성하는 방법을 설명합니다.

네임스페이스 생성 및 레이블 지정

UDN을 활용하려면 네임스페이스 프로젝트에 “k8s.ovn.org/primary-user-defined-network”라는 레이블을 지정하여 기본 UDN에 연결해야 합니다. 이상적으로는 네임스페이스 생성 과정에서 다음과 같이 이 레이블을 추가하는 것이 좋습니다.

apiVersion: project.openshift.io/v1
kind: Project
metadata:
  labels:
    k8s.ovn.org/primary-user-defined-network:
  name: my-vms

UDN 생성

네임스페이스를 생성하면 UDN 생성을 진행할 수 있습니다. OpenShift 4.18에서는 웹 콘솔에서 Networking -> User Defined Networks 로 이동하여 UDN을 쉽게 생성할 수 있습니다 . 제 예시에서는 “my-vms” 네임스페이스에 192.168.2.0/24 서브넷을 사용하여 네임스페이스 범위 UDN을 생성했습니다. 즉, 이 UDN에 연결되는 Pod/VM은 이 UDN 네트워크에서 할당된 IP를 갖게 됩니다(그림 1).

그림 1: "192.168.2.0/24" 서브넷을 사용한 UDN 생성
그림 1: “192.168.2.0/24” 서브넷을 사용한 UDN 생성

VM 생성

네임스페이스와 UDN이 준비되면 네임스페이스에 VM을 생성할 수 있습니다. 웹 콘솔의 Virtualization 섹션으로 이동하여 VM 생성 안내를 따르세요. 이 예제에서는 Fedora 기반 템플릿을 사용했습니다.

네임스페이스 내에 기본 UDN이 있는 경우, VM의 기본 네트워크 인터페이스가 자동으로 기본 UDN에 연결됩니다. 이는 “Customize Virtual Machine” 을 클릭하고 ” Network 탭 으로 이동하면 확인할 수 있습니다 (그림 2).

웹 콘솔을 통한 VM 생성
그림 2: 웹 콘솔을 통한 VM 생성

인터페이스 설정의 “Type”에서 VM이 기본 UDN에 연결할 수 있도록 하는 바인딩 플러그인으로 “l2bridge”가 선택되어 있는 것을 볼 수 있습니다(그림 3). 

그림 3: 네트워크 구성 검토
그림 3: 네트워크 구성 검토

설정을 검토한 후 VM을 생성하고 콘솔을 실행하여 할당된 IP 구성을 확인할 수 있습니다. 이 예시에서는 VM 간 연결을 테스트하기 위해 “fedora-udn-1″과 “fedora-udn-2″라는 두 개의 VM을 생성했습니다(그림 4).

그림 4: 네트워크 구성 검토
그림 4: 네트워크 구성 검토

연결 테스트

VM을 생성한 후에는 첫 번째 VM의 콘솔에 연결하여 게스트 OS 수준에서 IP 설정을 확인할 수 있습니다. 다음 설정에서 볼 수 있듯이 “fedora-udn-1” VM은 “192.168.2.3/24″로 구성되었습니다. 

fedora@fedora-udn-1:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 0c:7b:25:95:fc:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.3/24 brd 192.168.2.255 scope global dynamic noprefixroute enp1s0
       valid_lft 219737sec preferred_lft 219737sec
fedora@fedora-udn-2:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 0c:7b:27:96:fc:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.4/24 brd 192.168.2.255 scope global dynamic noprefixroute enp1s0
       valid_lft 219737sec preferred_lft 219737sec

UDN을 통해 VM 간 연결을 테스트하기 위해 VM1에서 가벼운 Python 서버를 시작하고 VM2에서 curl 통해 연결합니다. VM1에서 다음 명령을 실행하여 8000번 포트를 통해 Python 웹 서버를 시작합니다.

python -m http.server 8000

VM2에서 다음 명령을 사용하여 curl을 통해 VM1의 웹 서버에 연결합니다.

curl http://192.168.2.3:8000

출력 결과는 다음과 같습니다.

fedora@fedora-udn-1:~$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.4 - - [28/Mar/2025 10:37:25] "GET / HTTP/1.1" 200 -

 이 예에서 볼 수 있듯이 VM2 “fedora-udn-2″는 VM1 “fedora-udn-1″의 웹 서버에 연결할 수 있었습니다.

fedora@fedora-udn-2:~$ curl http://192.168.2.3:8000 -I
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.12.0
Date: Fri, 28 Mar 2025 06:38:20 GMT
Content-type: text/html; charset=utf-8
Content-Length: 2637

이제 성공적인 응답과 stdout에서 웹 서버 액세스 로그를 검증할 수 있습니다. 

네트워크 정책으로 연결 테스트

UDN과 함께 네트워크 정책을 활용하여 특정 포트를 통한 워크로드 간 트래픽을 허용하거나 거부할 수 있습니다. 같은 네임스페이스에서 네임스페이스 내 워크로드 간의 모든 트래픽을 거부하는 “모두 거부” 네트워크 정책을 생성했습니다.

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
 name: deny-all
 namespace: my-vms
spec:
 podSelector: {}
 policyTypes:
   - Ingress

네트워크 정책을 적용한 후 이전 시나리오를 시도하면 모든 연결 거부 정책으로 인해 VM2가 VM1에 연결할 수 없다는 것을 알 수 있습니다.

fedora@fedora-udn-2:~$ curl http://192.168.2.3:8000 -I
curl: (28) Failed to connect to 192.168.2.3 port 8000 after 135010 ms: Couldn't connect to server 

모든 네트워크 연결 거부 정책이 있는 경우, 웹 서버 포트로의 연결을 허용하는 추가 네트워크 정책을 정의해야 합니다. 다음 정책은 프로젝트 내 모든 워크로드 간 포트 “8000”을 통한 통신을 허용합니다.

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
 name: allow-all-8000
 namespace: my-vms
spec:
 podSelector: {}
 ingress:
   - ports:
       - protocol: TCP
         port: 8000
     from:
       - podSelector: {}
 policyTypes:
   - Ingress

allow-all-8000 네트워크 정책을 적용한 후 VM2 “fedora-udn-2″와 VM1 “fedora-udn-2” 사이의 연결이 다시 설정되었고 성공적으로 연결할 수 있는지 확인할 수 있습니다.

fedora@fedora-udn-2:~$ curl http://192.168.2.3:8000 -I
curl: (28) Failed to connect to 192.168.2.3 port 8000 after 135010 ms: Couldn't connect to server
fedora@fedora-udn-2:~$ curl http://192.168.2.3:8000 -I
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.12.0
Date: Fri, 28 Mar 2025 06:43:20 GMT
Content-type: text/html; charset=utf-8
Content-Length: 2637

요약

이 문서에서는 OpenShift Virtualization VM에 UDN을 생성하는 방법을 설명했습니다. UDN을 사용하면 10.0.2.2/24를 사용하는 모든 VM에 대해 Pod 네트워크 NAT를 사용하는 기존 과제를 해결할 수 있습니다. 각 VM은 연결된 UDN에서 고유한 IP를 가질 수 있습니다. 또한, 네트워크 정책을 활용하여 UDN에 연결된 VM 간의 트래픽을 더욱 세부적으로 제어할 수 있습니다.

자세한 내용을 알아보려면 다음 리소스를 확인하세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like