4.7.3. MetalLB와 함께 VRF를 사용하여 대칭 라우팅 구성


동일한 수신 및 송신 네트워크 경로가 필요한 MetalLB 서비스 뒤의 애플리케이션에 대해 대칭 네트워크 라우팅을 구성할 수 있습니다.

이 예에서는 VRF 라우팅 테이블을 MetalLB 및 송신 서비스와 연결하여 LoadBalancer 서비스 뒤의 Pod의 수신 및 송신 트래픽에 대한 대칭 라우팅을 활성화합니다.

참고
  • EgressService CR에서 sourceIPBy: "LoadBalancerIP" 설정을 사용하는 경우 BGPAdvertisement CR(사용자 정의 리소스)에 로드 밸런서 노드를 지정해야 합니다.
  • gatewayConfig.routingViaHost 사양이 true 로 설정된 OVN-Kubernetes를 사용하는 클러스터에서 sourceIPBy: "Network" 설정을 사용할 수 있습니다. 또한 sourceIPBy: "Network" 설정을 사용하는 경우 네트워크 VRF 인스턴스로 구성된 노드에서 애플리케이션 워크로드를 예약해야 합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • Kubernetes NMState Operator를 설치합니다.
  • MetalLB Operator를 설치합니다.

프로세스

  1. NodeNetworkConfigurationPolicy CR을 생성하여 VRF 인스턴스를 정의합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 node-network-vrf.yaml 과 같은 파일을 생성합니다.

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: vrfpolicy 
      1
      
      spec:
        nodeSelector:
          vrf: "true" 
      2
      
        maxUnavailable: 3
        desiredState:
          interfaces:
          - name: ens4vrf 
      3
      
            type: vrf 
      4
      
            state: up
            vrf:
              port:
              - ens4 
      5
      
              route-table-id: 2 
      6
      
          - name: ens4 
      7
      
            type: ethernet
            state: up
            ipv4:
              address:
              - ip: 192.168.130.130
                prefix-length: 24
              dhcp: false
              enabled: true
          routes: 
      8
      
            config:
            - destination: 0.0.0.0/0
              metric: 150
              next-hop-address: 192.168.130.1
              next-hop-interface: ens4
              table-id: 2
          route-rules: 
      9
      
            config:
            - ip-to: 172.30.0.0/16
              priority: 998
              route-table: 254 
      10
      
            - ip-to: 10.132.0.0/14
              priority: 998
              route-table: 254
            - ip-to: 169.254.0.0/17
              priority: 998
              route-table: 254
      1
      정책의 이름입니다.
      2
      이 예제에서는 vrf:true 레이블이 있는 모든 노드에 정책을 적용합니다.
      3
      인터페이스의 이름입니다.
      4
      인터페이스 유형입니다. 이 예에서는 VRF 인스턴스를 생성합니다.
      5
      VRF가 연결하는 노드 인터페이스입니다.
      6
      VRF의 경로 테이블 ID의 이름입니다.
      7
      VRF와 연결된 인터페이스의 IPv4 주소입니다.
      8
      네트워크 경로에 대한 구성을 정의합니다. next-hop-address 필드는 경로에 대한 다음 홉의 IP 주소를 정의합니다. next-hop-interface 필드는 경로에 대한 발신 인터페이스를 정의합니다. 이 예에서 VRF 라우팅 테이블은 2 이며, 이는 EgressService CR에 정의된 ID를 참조합니다.
      9
      추가 경로 규칙을 정의합니다. ip-to 필드는 Cluster Network CIDR, Service Network CIDR, Internal Masquerade 서브넷 CIDR과 일치해야 합니다. oc describe network.operator/cluster 를 실행하여 이러한 CIDR 주소 사양의 값을 볼 수 있습니다.
      10
      경로를 계산할 때 Linux 커널이 사용하는 기본 라우팅 테이블에는 ID 254 가 있습니다.
    2. 다음 명령을 실행하여 정책을 적용합니다.

      $ oc apply -f node-network-vrf.yaml
  2. BGPPeer CR(사용자 정의 리소스)을 생성합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 frr-via-vrf.yaml 과 같은 파일을 생성합니다.

      apiVersion: metallb.io/v1beta2
      kind: BGPPeer
      metadata:
        name: frrviavrf
        namespace: metallb-system
      spec:
        myASN: 100
        peerASN: 200
        peerAddress: 192.168.130.1
        vrf: ens4vrf 
      1
      1
      BGP 피어와 연결할 VRF 인스턴스를 지정합니다. MetalLB는 VRF의 라우팅 정보를 기반으로 서비스를 알리고 라우팅 결정을 내릴 수 있습니다.
    2. 다음 명령을 실행하여 BGP 피어에 대한 구성을 적용합니다.

      $ oc apply -f frr-via-vrf.yaml
  3. IPAddressPool CR을 생성합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 first-pool.yaml 과 같은 파일을 생성합니다.

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        name: first-pool
        namespace: metallb-system
      spec:
        addresses:
        - 192.169.10.0/32
    2. 다음 명령을 실행하여 IP 주소 풀에 대한 구성을 적용합니다.

      $ oc apply -f first-pool.yaml
  4. BGPAdvertisement CR을 생성합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 first-adv.yaml 과 같은 파일을 생성합니다.

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: first-adv
        namespace: metallb-system
      spec:
        ipAddressPools:
          - first-pool
        peers:
          - frrviavrf 
      1
      
        nodeSelectors:
          - matchLabels:
              egress-service.k8s.ovn.org/test-server1: "" 
      2
      1
      이 예에서 MetalLB는 첫 번째 풀 IP 주소 풀에서 frrviavrf BGP 피어로 다양한 IP 주소를 알립니다.
      2
      이 예에서 EgressService CR은 로드 밸런서 서비스 IP 주소를 사용하도록 송신 트래픽의 소스 IP 주소를 구성합니다. 따라서 Pod에서 시작되는 트래픽에 대해 동일한 반환 경로를 사용하도록 트래픽을 반환하려면 로드 밸런서 노드를 지정해야 합니다.
    2. 다음 명령을 실행하여 BGP 알림에 대한 구성을 적용합니다.

      $ oc apply -f first-adv.yaml
  5. EgressService CR을 생성합니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 egress-service.yaml 과 같은 파일을 생성합니다.

      apiVersion: k8s.ovn.org/v1
      kind: EgressService
      metadata:
        name: server1 
      1
      
        namespace: test 
      2
      
      spec:
        sourceIPBy: "LoadBalancerIP" 
      3
      
        nodeSelector:
          matchLabels:
            vrf: "true" 
      4
      
        network: "2" 
      5
      1
      송신 서비스의 이름을 지정합니다. EgressService 리소스의 이름은 수정할 로드 밸런서 서비스의 이름과 일치해야 합니다.
      2
      송신 서비스의 네임스페이스를 지정합니다. EgressService 의 네임스페이스는 수정하려는 로드 밸런서 서비스의 네임스페이스와 일치해야 합니다. 송신 서비스는 네임스페이스 범위입니다.
      3
      이 예에서는 LoadBalancer 서비스 수신 IP 주소를 송신 트래픽의 소스 IP 주소로 할당합니다.
      4
      sourceIPBy 사양에 LoadBalancer 를 지정하면 단일 노드가 LoadBalancer 서비스 트래픽을 처리합니다. 이 예에서는 vrf: "true" 레이블이 있는 노드만 서비스 트래픽을 처리할 수 있습니다. 노드를 지정하지 않으면 OVN-Kubernetes는 서비스 트래픽을 처리할 작업자 노드를 선택합니다. 노드를 선택하면 OVN-Kubernetes는 egress-service.k8s.ovn.org/<svc_namespace>-<svc_name>: "" 형식으로 노드에 레이블을 지정합니다.
      5
      송신 트래픽의 라우팅 테이블 ID를 지정합니다. 값이 NodeNetworkConfigurationPolicy 리소스에 정의된 route-table-id ID와 일치하는지 확인합니다(예: route-table-id: 2 ).
    2. 다음 명령을 실행하여 송신 서비스에 대한 구성을 적용합니다.

      $ oc apply -f egress-service.yaml

검증

  1. 다음 명령을 실행하여 MetalLB 서비스 뒤에서 실행 중인 Pod의 애플리케이션 끝점에 액세스할 수 있는지 확인합니다.

    $ curl <external_ip_address>:<port_number> 
    1
    1
    애플리케이션 엔드포인트에 맞게 외부 IP 주소 및 포트 번호를 업데이트합니다.
  2. 선택 사항: LoadBalancer 서비스 수신 IP 주소를 송신 트래픽의 소스 IP 주소로 할당한 경우 tcpdump 와 같은 툴을 사용하여 외부 클라이언트에서 수신된 패킷을 분석하여 이 구성을 확인합니다.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동