BGP를 사용하여 OpenShift 네트워크 노출

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2025/10/23/exposing-openshift-networks-using-bgp

이전 문서 How to import provider network routes to OpenShift via BGP에서는 BGP(Border Gateway Protocol)를 사용하여 Red Hat OpenShift Virtualization 으로 공급자 네트워크 경로를 가져오는 방법을 설명했습니다 . 이 문서에서는 BGP를 통해 OpenShift 네트워크를 노출하여 가상 머신(VM)에 추가 기능을 제공하는 방법을 보여줍니다. 주로 FRRouting(FRR)과 사용자 정의 네트워크(UDN)를 통한 이러한 통합은 동일한 플랫폼의 가상 머신과 컨테이너에 고급 라우팅 및 네트워크 분할 이점을 직접 제공합니다.

OpenShift 네트워킹을 위한 BGP의 이점

클라우드 네이티브 및 하이브리드 환경이 지속적으로 성장함에 따라 네트워킹 수요도 증가하고 있습니다. OpenShift는 BGP가 제공하는 강력하고 동적인 네트워크를 필요로 합니다. 이러한 통합은 동적 라우팅을 활성화하여 기존 쿠버네티스 네트워킹의 한계를 극복합니다. 동적 라우팅은 경로 구성을 자동화하고, 동적 경로 업데이트를 용이하게 하며, 다른 가상화 플랫폼에서 VM 마이그레이션을 간소화하여 유연성과 성능을 향상시킵니다.

OpenShift 워크로드에 외부 IP 주소를 직접 노출하면 Pod IP 서브넷에 직접 액세스하고 클러스터 경로의 동적 가져오기/내보내기가 가능합니다. 또한, BGP는 bidirectional forwarding detection (BFD)와 같은 고급 기능을 지원하여 애플리케이션 가동 시간 유지에 필수적인 신속한 장애 조치(failover)와 고가용성을 보장합니다.

마지막으로, EVPN과 “no-overlay mode”의 길을 열어 캡슐화 오버헤드를 제거하여 처리량을 높이고, 네트워크 효율성을 높여 가상화된 작업 부하에 완벽한 시나리오를 제공합니다.

BGP 기능 덕분에 원래 라우팅 구성을 유지하면서 다른 가상화 플랫폼에서 VM을 마이그레이션할 수 있습니다.

네트워크 경로 내보내기

이 글에서 다루는 문제는 OpenShift에서 고객 제공업체 네트워크에서 실행되는 BGP 라우터로 네트워크 경로를 내보내는 것입니다. 이는 하이퍼바이저에서 흔히 발생하는 시나리오입니다. 이제 OpenShift(및 OpenShift Virtualization)를 사용하면 VM 네트워크를 동적으로 노출하는 것이 해결책이 됩니다.

OpenShift 환경에서 흔히 볼 수 있듯이, 논의된 모든 구성은 YAML 파일을 활용한 선언적 구성이며, GitOps 패러다임과 함께 사용할 준비가 되어 있습니다.

BGP가 제공하는 다른 중요한 기능(이 문서에서는 다루지 않음)은 다음과 같습니다.

  • 워크로드에 대한 향상된 연결성(동적 라우팅 및 도달성 정보)
  • 고급 네트워크 분할 및 격리
  • VM 네트워크를 위한 고가용성 및 빠른 컨버전스

필수 조건:

  • OpenShift 클러스터(버전 4.20 이상)
  • OpenShift의 추가 라우팅 기능을 활성화합니다.
  • OpenShift Virtualization을 설치하고 구성하세요. 자세한 내용은 OpenShift 설명서 를 참조하세요 .

OpenShift 클러스터에 대한 추가 라우팅 기능을 활성화하려면 네트워크 운영자에게 패치를 적용해야 합니다.

oc patch Network.operator.openshift.io cluster --type=merge -p='{"spec":{"additionalRoutingCapabilities": {"providers": ["FRR"]}, "defaultNetwork":{"ovnKubernetesConfig":{"routeAdvertisements":"Enabled"}}}}'

VM 네트워크 노출

OpenShift 클러스터 외부에서 BGP를 사용하여 네트워크를 노출하려면 다음과 같은 전반적인 단계를 따라야 합니다.

  1. 공급자의 에지 라우터와 피어링하기 위해 FRRConfiguration 사용자 정의 리소스를 만듭니다.
  2. VM에 대한 Kubernetes 네임스페이스를 하나 이상 만듭니다.
  3. 해당 Kubernetes 네임스페이스에 전용 기본 네트워크를 할당합니다.
  4. 네임스페이스의 기본 네트워크를 외부 BGP 라우터에 알립니다.

OpenShift(기본 OVN-Kubernetes CNI 플러그인 사용)에서는 네임스페이스에 전용 네트워크를 할당할 수 있습니다(그림 1).

클러스터 UDN 격리 네트워크의 그림입니다.
그림 1: 클러스터 UDN 격리 네트워크의 그림.

각 네임스페이스는 기본적으로 자체적으로 고유하고 격리된 네트워크를 가질 수 있으므로 연결이 끊긴 네트워크 섬인 것처럼 기본적으로 격리가 보장됩니다. 

BGP 통합 덕분에 해당 네트워크를 외부 BGP 라우터에 노출하고 외부 엔터티가 해당 네임스페이스에서 실행되는 VM에 직접 연결하도록 할 수 있습니다.

이 예에서 외부 BGP 라우터의 IPv4 주소는 172.22.0.1입니다.

enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 58:47:ca:7a:79:c2 brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/24 brd 172.22.0.255 scope global noprefixroute enp3s0

외부 BGP 라우터의 시작 라우팅 테이블은 다음과 같습니다.

default via 192.168.0.1 dev enp2s0 proto dhcp src 192.168.0.19 metric 100 
172.22.0.0/24 dev enp3s0 proto kernel scope link src 172.22.0.1 metric 101

FRRConfiguration 사용자 정의 리소스 만들기

OpenShift에서 FRRConfiguration을 생성해 보겠습니다. 보시다시피, 64512를  Autonomous System (AS)로, 외부 BGP 라우터의 IP를 BGP 네이버로 사용하고 있습니다.

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: receive-all
  namespace: openshift-frr-k8s 
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.22.0.1 #external BGP router ip
        asn: 64512
        disableMP: true
        toReceive:
          allowed:
            mode: all

VM에 대한 Kubernetes 네임스페이스 생성

네임스페이스에 전용 네트워크를 할당하려면 생성 시 특수 레이블을 추가해야 합니다. OpenShift 4.20에서는 네임스페이스가 생성된 후에는 전용 기본 네트워크를 할당할 수 없습니다.

apiVersion: v1
kind: Namespace
metadata:
  labels:
    k8s.ovn.org/primary-user-defined-network: ""
    cluster-udn: prod
  name: cudn-bgp-test

cluster-udn 레이블은 네임스페이스 선택에 유용한 사용자 정의 레이블입니다.

네임스페이스에 전용 기본 네트워크 할당

전용 기본 네트워크를 할당하려면 ClusterUsedDefinedNetwork를 만들어야 합니다.

apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
  name: cluster-udn-prod
  labels:
    advertise: "true"
spec:
  namespaceSelector:
    matchLabels:
      cluster-udn: prod
  network:
    layer2:
      ipam:
        lifecycle: Persistent
      role: Primary
      subnets:
      - 10.100.0.0/16
    topology: Layer2

cluster-udn 레이블을 사용하고 prod 값을 갖는 네임스페이스에 가상화 워크로드에 필수적인 2계층 토폴로지를 사용하는 10.100.0.0/16 기본 서브넷을 할당했습니다. 간단히 말해, 이전에 생성한 cudn-bgp-test라는 네임스페이스를 선택합니다.

네임스페이스의 기본 네트워크를 광고

마지막 단계는 네임스페이스의 기본 네트워크를 외부 BGP 라우터에 알리는 것입니다. 이 목표를 달성하기 위해 전용 커스텀 리소스가 있습니다.

apiVersion: k8s.ovn.org/v1
kind: RouteAdvertisements
metadata:
  name: default
spec:
  nodeSelector: {}
  frrConfigurationSelector: {}
  networkSelectors:
    - networkSelectionType: ClusterUserDefinedNetworks
      clusterUserDefinedNetworkSelector:
        networkSelector:
          matchLabels:
            advertise: "true"
  advertisements:
  - "PodNetwork"

RouteAdvertisements 사용자 정의 리소스를 사용하면 경로를 광고하는 데 사용할 OpenShift 노드, FRRConfiguration 및 광고할 실제 기본 네트워크(ClusterUserDefinedNetwork)를 선택할 수 있습니다(레이블 사용).

동작을 살펴보겠습니다.

OpenShift Virtualization에서는 cudn-bgp-test 네임스페이스에 VM을 만들어야 합니다(그림 2).

가상 머신을 만드는 방법에 대한 그림입니다.
그림 2: VM 생성

할당된 IP 주소는 10.100.0.5이며, 이는 네임스페이스에 대해 구성된 네트워크의 일부입니다.

확인을 위해 default라는 이름의 경로 광고가 생성되고 승인되었는지 확인할 수 있습니다.

oc get routeadvertisements.k8s.ovn.org default 
NAME      STATUS
default   Accepted

힌트: routeadvertisements.k8s.ovn.org의 약어로 ra도 사용할 수 있습니다.

외부 BGP 라우터에서 cudn-bgp-test 네임스페이스에 할당된 네트워크인 10.100.0.0/16에 대한 새로운 경로를 받아야 합니다.

외부 BGP 경로 라우팅 테이블:

default via 192.168.0.1 dev enp2s0 proto dhcp src 192.168.0.19 metric 100 
10.100.0.0/16 nhid 18 via 172.22.0.11 dev enp3s0 proto bgp metric 20 
172.22.0.0/24 dev enp3s0 proto kernel scope link src 172.22.0.1 metric 10

VM에서 ICMP 프로토콜이 활성화되어 있으므로 외부 경로에서 VM에 ping을 보낼 수 있어야 합니다(VM의 IP는 10.100.0.5입니다).

외부 BGP 라우터:

ping -c 3 10.100.0.5
PING 10.100.0.5 (10.100.0.5) 56(84) bytes of data.
64 bytes from 10.100.0.5: icmp_seq=1 ttl=63 time=2.87 ms
64 bytes from 10.100.0.5: icmp_seq=2 ttl=63 time=1.14 ms
64 bytes from 10.100.0.5: icmp_seq=3 ttl=63 time=0.519 ms
--- 10.100.0.5 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.519/1.507/2.867/0.993 ms

VM에는 외부 BGP 경로를 통해 접속할 수 있는 실행 중인 웹 서버가 있습니다.

외부 BGP 라우터:

curl -v 10.100.0.5:80
*   Trying 10.100.0.5:80...
* Connected to 10.100.0.5 (10.100.0.5) port 80
> GET / HTTP/1.1
> Host: 10.100.0.5
> User-Agent: curl/8.9.1
> Accept: */*
> 
* Request completely sent off
< HTTP/1.1 200 OK
< Date: Thu, 11 Sep 2025 08:39:42 GMT
< Server: Apache/2.4.64 (Fedora Linux)
< Last-Modified: Thu, 11 Sep 2025 08:37:03 GMT
< ETag: "b-63e827103b393"
< Accept-Ranges: bytes
< Content-Length: 11
< Content-Type: text/html; charset=UTF-8
< 
BGP Rules!
* Connection #0 to host 10.100.0.5 left intact

마무리하다

FRRouting 및 사용자 정의 네트워크를 통해 BGP를 OpenShift Virtualization과 통합하면 최신 클라우드 네이티브 환경에 필요한 강력한 기능을 활용할 수 있습니다. 클러스터 외부의 VM 네트워크를 원활하게 노출함으로써 OpenShift 플랫폼 사용자 경험을 기존 가상화 사용자가 기대하는 방식, 즉 VM IP를 사용한 직접 수신(Direct Ingress)에 맞춰 조정하여 네트워킹 구성을 간소화합니다. 시연된 사용 사례는 BGP가 유연성, 확장성 및 성능을 어떻게 향상시키는지 보여주는 동시에, BFD를 통한 빠른 장애 조치(Failover) 및 루프 방지와 같은 기능을 통해 강력하고 고가용성 있는 운영을 보장합니다.

이러한 기능을 구현하려는 경우, 먼저 OpenShift 클러스터가 요구 사항을 충족하는지 확인하고, 더욱 심층적인 사용자 지정을 위해 공식 문서를 참조하세요. 여기에 설명된 대로 랩 환경에서 실험해 보면 가상화 및 컨테이너화된 애플리케이션의 실질적인 이점을 직접 확인할 수 있습니다.

답글 남기기

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

You May Also Like