4.7. MetalLB를 사용한 대칭 라우팅 관리


클러스터 관리자는 MetalLB, NMState, OVN-Kubernetes의 기능을 구현하여 여러 호스트 인터페이스가 있는 MetalLB 로드 밸런서 서비스 뒤에 있는 포드의 트래픽을 효과적으로 관리할 수 있습니다. 이 컨텍스트에서 이러한 기능을 결합하면 대칭 라우팅, 트래픽 분리를 제공하고 CIDR 주소가 겹치는 서로 다른 네트워크의 클라이언트를 지원할 수 있습니다.

이 기능을 구현하려면 MetalLB를 사용하여 가상 라우팅 및 전달(VRF) 인스턴스를 구현하고 송신 서비스를 구성하는 방법을 알아보세요.

중요

MetalLB와 송신 서비스를 사용하여 VRF 인스턴스를 사용하여 대칭 트래픽을 구성하는 것은 기술 미리 보기 기능에 불과합니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

4.7.1. MetalLB를 사용한 대칭 라우팅 관리의 과제

여러 호스트 인터페이스와 함께 MetalLB를 사용하면 MetalLB는 호스트에서 사용 가능한 모든 인터페이스를 통해 서비스를 노출하고 알립니다. 이는 네트워크 격리, 비대칭적 반환 트래픽 및 중복되는 CIDR 주소와 관련된 문제를 야기할 수 있습니다.

반환 트래픽이 올바른 클라이언트에 도달하도록 보장하는 한 가지 옵션은 정적 경로를 사용하는 것입니다. 하지만 이 솔루션을 사용하면 MetalLB는 서비스를 분리한 다음 각 서비스를 다른 인터페이스를 통해 알릴 수 없습니다. 또한 정적 라우팅에는 수동 구성이 필요하고 원격 사이트를 추가하는 경우 유지 관리가 필요합니다.

MetalLB 서비스를 구현할 때 대칭 라우팅의 또 다른 과제는 외부 시스템이 애플리케이션의 소스 및 대상 IP 주소가 동일할 것으로 예상하는 시나리오입니다. OpenShift Container Platform의 기본 동작은 Pod에서 발생하는 트래픽에 대한 소스 IP 주소로 호스트 네트워크 인터페이스의 IP 주소를 할당하는 것입니다. 이는 호스트 인터페이스가 여러 개인 경우 문제가 됩니다.

MetalLB, NMState, OVN-Kubernetes의 기능을 결합한 구성을 구현하면 이러한 과제를 극복할 수 있습니다.

4.7.2. MetalLB를 사용하여 VRF를 사용한 대칭 라우팅 관리 개요

NMState를 사용하여 호스트에서 VRF 인스턴스를 구성하고, VRF 인스턴스를 MetalLB BGPPeer 리소스와 연결하고, OVN-Kubernetes를 사용하여 송신 트래픽에 대한 송신 서비스를 구성하면 대칭 라우팅 구현의 과제를 극복할 수 있습니다.

그림 4.1. MetalLB를 사용하여 VRF를 사용하여 대칭 라우팅을 관리하는 네트워크 개요

구성 프로세스는 세 단계로 구성됩니다.

1. VRF 및 라우팅 규칙 정의

  • VRF 인스턴스를 네트워크 인터페이스와 연결하기 위해 NodeNetworkConfigurationPolicy 사용자 정의 리소스(CR)를 구성합니다.
  • VRF 라우팅 테이블을 사용하여 유입 및 유출 트래픽을 지시합니다.

2. VRF를 MetalLB BGPPeer 에 연결

  • 네트워크 인터페이스에서 VRF 인스턴스를 사용하도록 MetalLB BGPPeer 리소스를 구성합니다.
  • BGPPeer 리소스를 VRF 인스턴스와 연결하면 지정된 네트워크 인터페이스가 BGP 세션의 기본 인터페이스가 되고 MetalLB는 이 인터페이스를 통해 서비스를 광고합니다.

3. 이그레스 서비스 구성

  • VRF 인스턴스와 연결된 네트워크를 송신 트래픽에 사용하도록 송신 서비스를 구성합니다.
  • 선택 사항: MetalLB 부하 분산 서비스의 IP 주소를 송신 트래픽의 소스 IP로 사용하도록 송신 서비스를 구성합니다.

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

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

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

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

사전 요구 사항

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

프로세스

  1. VRF 인스턴스를 정의하려면 NodeNetworkConfigurationPolicy CR을 만듭니다.

    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
      Copy to Clipboard Toggle word wrap
      1
      정책의 이름입니다.
      2
      이 예제에서는 vrf:true 레이블이 있는 모든 노드에 정책을 적용합니다.
      3
      인터페이스의 이름.
      4
      인터페이스 유형입니다. 이 예제에서는 VRF 인스턴스를 생성합니다.
      5
      VRF가 연결되는 노드 인터페이스입니다.
      6
      VRF에 대한 경로 테이블 ID의 이름입니다.
      7
      VRF와 연관된 인터페이스의 IPv4 주소입니다.
      8
      네트워크 경로에 대한 구성을 정의합니다. 다음 홉 주소 필드는 경로의 다음 홉의 IP 주소를 정의합니다. 다음 홉 인터페이스 필드는 경로에 대한 나가는 인터페이스를 정의합니다. 이 예에서 VRF 라우팅 테이블은 2 이며, 이는 EgressService CR에서 정의한 ID를 참조합니다.
      9
      추가 경로 규칙을 정의합니다. ip-to 필드는 클러스터 네트워크 CIDR, 서비스 네트워크 CIDR 및 내부 마스커레이드 서브넷 CIDR과 일치해야 합니다. 다음 명령을 실행하면 이러한 CIDR 주소 사양에 대한 값을 볼 수 있습니다: oc describe network.operator/cluster .
      10
      Linux 커널이 경로를 계산할 때 사용하는 주요 라우팅 테이블의 ID는 254 입니다.
    2. 다음 명령을 실행하여 정책을 적용합니다.

      $ oc apply -f node-network-vrf.yaml
      Copy to Clipboard Toggle word wrap
  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
      Copy to Clipboard Toggle word wrap
      1
      BGP 피어와 연결할 VRF 인스턴스를 지정합니다. MetalLB는 VRF의 라우팅 정보를 기반으로 서비스를 광고하고 라우팅 결정을 내릴 수 있습니다.
    2. 다음 명령을 실행하여 BGP 피어에 대한 구성을 적용합니다.

      $ oc apply -f frr-via-vrf.yaml
      Copy to Clipboard Toggle word wrap
  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
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 IP 주소 풀에 대한 구성을 적용합니다.

      $ oc apply -f first-pool.yaml
      Copy to Clipboard Toggle word wrap
  4. BGP광고 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
      Copy to Clipboard Toggle word wrap
      1
      이 예에서 MetalLB는 첫 번째 풀 IP 주소 풀에서 frrviavrf BGP 피어로 IP 주소 범위를 광고합니다.
      2
      이 예에서 EgressService CR은 부하 분산 장치 서비스 IP 주소를 사용하도록 송신 트래픽의 소스 IP 주소를 구성합니다. 따라서 포드에서 발생한 트래픽에 대해 동일한 반환 경로를 사용하도록 반환 트래픽에 대한 로드 밸런서 노드를 지정해야 합니다.
    2. 다음 명령을 실행하여 BGP 광고에 대한 구성을 적용합니다.

      $ oc apply -f first-adv.yaml
      Copy to Clipboard Toggle word wrap
  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
      Copy to Clipboard Toggle word wrap
      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
      Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 MetalLB 서비스 뒤에서 실행되는 포드의 애플리케이션 엔드포인트에 액세스할 수 있는지 확인하세요.

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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat