30.11. MetalLB 및 FRR-K8의 통합 구성


FRRouting (FRR)은 Linux 및 UNIX 플랫폼을 위한 무료 오픈 소스 인터넷 라우팅 프로토콜 제품군입니다. FRR-K8s 는 Kubernetes 호환 방식으로 FRR API의 하위 집합을 노출하는 Kubernetes 기반 DaemonSet입니다. 클러스터 관리자는 FRRConfiguration CR(사용자 정의 리소스)을 사용하여 MetalLB에서 제공하지 않는 일부 FRR 서비스에 액세스할 수 있습니다(예: 경로 수신). MetalLB 는 적용된 MetalLB 구성에 해당하는 FRR-K8s 구성을 생성합니다.

FRR과의 MetalLB 통합

30.11.1. FRR 구성

여러 FRRConfiguration CR을 생성하여 MetalLB 에서 FRR 서비스를 사용할 수 있습니다. MetalLBFRR-K8 이 모든 사용자가 생성한 다른 모든 구성과 병합하는 FRRConfiguration 오브젝트를 생성합니다.

예를 들어, 지정된 인접자가 알리는 모든 접두사를 수신하도록 FRR-K8 을 구성할 수 있습니다. 다음 예제에서는 호스트 172.18.0.5 를 사용하여 BGPPeer 에서 알리는 모든 접두사를 수신하도록 FRR-K8s 를 구성합니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
 name: test
 namespace: metallb-system
spec:
 bgp:
   routers:
   - asn: 64512
     neighbors:
     - address: 172.18.0.5
       asn: 64512
       toReceive:
        allowed:
            mode: all

적용된 구성에 관계없이 항상 접두사 집합을 차단하도록 FRR-K8s를 구성할 수도 있습니다. 이는 클러스터 오작동을 유발할 수 있는 Pod 또는 ClusterIPs CIDR로의 경로를 방지하는 데 유용할 수 있습니다. 다음 예제에서는 접두사 192.168.1.0/24 집합을 차단합니다.

MetalLB CR의 예

apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
  name: metallb
  namespace: metallb-system
spec:
  bgpBackend: frr-k8s
  frrk8sConfig:
    alwaysBlock:
    - 192.168.1.0/24

FRR-K8s 를 설정하여 클러스터 네트워크 CIDR 및 서비스 네트워크 CIDR을 차단할 수 있습니다. 다음 명령을 실행하여 이러한 CIDR 주소 사양의 값을 볼 수 있습니다.

$ oc describe network.config/cluster

30.11.2. FRRConfiguration CRD 구성

다음 섹션에서는 FRRConfiguration CR(사용자 정의 리소스)을 사용하는 참조 예제를 제공합니다.

30.11.2.1. 라우터 필드

router 필드를 사용하여 각 VRF(Virtual Routing and Forwarding) 리소스에 대해 여러 라우터를 구성할 수 있습니다. 각 라우터에 대해 Autonomous System Number (ASN)를 정의해야 합니다.

다음 예와 같이 BGP(Border Gateway Protocol) 조합 조합 목록을 정의할 수도 있습니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: test
  namespace: frr-k8s-system
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.30.0.3
        asn: 4200000000
        ebgpMultiHop: true
        port: 180
      - address: 172.18.0.6
        asn: 4200000000
        port: 179

30.11.2.2. toAdvertise 필드

기본적으로 FRR-K8s 는 라우터 구성의 일부로 구성된 접두사를 알리지 않습니다. 이를 광고하기 위해, 귀하는 toAdvertise 필드를 사용합니다.

다음 예제와 같이 접두사의 하위 집합을 알릴 수 있습니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: test
  namespace: frr-k8s-system
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.30.0.3
        asn: 4200000000
        ebgpMultiHop: true
        port: 180
        toAdvertise:
          allowed:
            prefixes: 1
            - 192.168.2.0/24
      prefixes:
        - 192.168.2.0/24
        - 192.169.2.0/24

1
접두사의 하위 집합을 알립니다.

다음 예제에서는 모든 접두사를 알리는 방법을 보여줍니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: test
  namespace: frr-k8s-system
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.30.0.3
        asn: 4200000000
        ebgpMultiHop: true
        port: 180
        toAdvertise:
          allowed:
            mode: all 1
      prefixes:
        - 192.168.2.0/24
        - 192.169.2.0/24

1
모든 접두사를 알립니다.

30.11.2.3. 수신자 필드

기본적으로 FRR-K8s 는 인접자가 알리는 접두사를 처리하지 않습니다. toReceive 필드를 사용하여 이러한 주소를 처리할 수 있습니다.

다음 예제와 같이 접두사의 하위 집합에 대해 구성할 수 있습니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: test
  namespace: frr-k8s-system
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.18.0.5
          asn: 64512
          port: 179
          toReceive:
            allowed:
              prefixes:
              - prefix: 192.168.1.0/24
              - prefix: 192.169.2.0/24
                ge: 25 1
                le: 28 2

1 2
접두사 길이가 le 접두사 길이보다 작거나 같고 접두사 길이보다 크거나 같은 경우 접두사 적용됩니다.

다음 예제에서는 발표된 모든 접두사를 처리하도록 FRR을 구성합니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: test
  namespace: frr-k8s-system
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.18.0.5
          asn: 64512
          port: 179
          toReceive:
            allowed:
              mode: all

30.11.2.4. bgp 필드

bgp 필드를 사용하여 다양한 BFD 프로필을 정의하고 이를 인접지와 연결할 수 있습니다. 다음 예에서 BFDBGP 세션을 백업하고 FRR 은 링크 실패를 감지할 수 있습니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: test
  namespace: frr-k8s-system
spec:
  bgp:
    routers:
    - asn: 64512
      neighbors:
      - address: 172.30.0.3
        asn: 64512
        port: 180
        bfdProfile: defaultprofile
    bfdProfiles:
      - name: defaultprofile

30.11.2.5. nodeSelector 필드

기본적으로 FRR-K8s 는 데몬이 실행 중인 모든 노드에 구성을 적용합니다. nodeSelector 필드를 사용하여 구성을 적용할 노드를 지정할 수 있습니다. 예를 들면 다음과 같습니다.

FRRConfiguration CR 예

apiVersion: frrk8s.metallb.io/v1beta1
kind: FRRConfiguration
metadata:
  name: test
  namespace: frr-k8s-system
spec:
  bgp:
    routers:
    - asn: 64512
  nodeSelector:
    labelSelector:
    foo: "bar"

FRRConfiguration 사용자 정의 리소스의 필드는 다음 표에 설명되어 있습니다.

표 30.9. MetalLB FRRConfiguration 사용자 정의 리소스
필드유형설명

spec.bgp.routers

array

FRR이 구성할 라우터를 지정합니다( VRF당 하나씩).

spec.bgp.routers.asn

integer

세션의 로컬 종료에 사용할 자율 시스템 번호입니다.

spec.bgp.routers.id

string

bgp 라우터의 ID를 지정합니다.

spec.bgp.routers.vrf

string

이 라우터에서 세션을 설정하는 데 사용되는 호스트 vrf를 지정합니다.

spec.bgp.routers.neighbors

array

BGP 세션을 설정하는 포인을 지정합니다.

spec.bgp.routers.neighbors.asn

integer

세션의 로컬 끝에 사용할 자율 시스템 번호를 지정합니다.

spec.bgp.routers.neighbors.address

string

세션을 설정할 IP 주소를 지정합니다.

spec.bgp.routers.neighbors.port

integer

세션을 설정할 때 사용할 포트를 지정합니다. 기본값은 179입니다.

spec.bgp.routers.neighbors.password

string

BGP 세션을 설정하는 데 사용할 암호를 지정합니다. passwordPasswordSecret 은 함께 사용할 수 없습니다.

spec.bgp.routers.neighbors.passwordSecret

string

피어에 대한 인증 시크릿의 이름을 지정합니다. 시크릿은 "kubernetes.io/basic-auth" 유형이어야 하며 FRR-K8s 데몬과 동일한 네임스페이스에 있어야 합니다. "password" 키는 암호를 시크릿에 저장합니다. passwordPasswordSecret 은 함께 사용할 수 없습니다.

spec.bgp.routers.neighbors.holdTime

duration

RFC4271에 따라 요청된 BGP 보류 시간을 지정합니다. 기본값은 180s입니다.

spec.bgp.routers.neighbors.keepaliveTime

duration

RFC4271에 따라 요청된 BGP keepalive 시간을 지정합니다. 기본값은 60s 입니다.

spec.bgp.routers.neighbors.connectTime

duration

BGP가 인접한 연결 시도 사이에 대기하는 시간을 지정합니다.

spec.bgp.routers.neighbors.ebgpMultiHop

boolean

BGPPeer가 멀티 홉 떨어져 있는지 여부를 나타냅니다.

spec.bgp.routers.neighbors.bfdProfile

string

BGP 세션과 연결된 BFD 세션에 사용할 BFD 프로필의 이름을 지정합니다. 설정되지 않은 경우 BFD 세션이 설정되지 않습니다.

spec.bgp.routers.neighbors.toAdvertise.allowed

array

인접지 및 관련 속성에 알리는 접두사 목록을 나타냅니다.Represents the list of prefixes to advertise to a neighbor, and the associated properties.

spec.bgp.routers.neighbors.toAdvertise.allowed.prefixes

문자열 배열

인접지에게 알리기 위한 접두사 목록을 지정합니다. 이 목록은 라우터에서 정의한 접두사와 일치해야 합니다.

spec.bgp.routers.neighbors.toAdvertise.allowed.mode

string

접두사를 처리할 때 사용할 모드를 지정합니다. 접두사 목록의 접두사만 허용하도록 filtered 로 설정할 수 있습니다. 라우터에 구성된 모든 접두사를 허용하도록 all 으로 설정할 수 있습니다.

spec.bgp.routers.neighbors.toAdvertise.withLocalPref

array

공개된 로컬 기본 설정과 연결된 접두사를 지정합니다. 광고할 수 있도록 허용된 접두사에 로컬 기본 설정과 연결된 접두사를 지정해야 합니다.

spec.bgp.routers.neighbors.toAdvertise.withLocalPref.prefixes

문자열 배열

로컬 기본 설정과 연결된 접두사를 지정합니다.

spec.bgp.routers.neighbors.toAdvertise.withLocalPref.localPref

integer

접두사와 연결된 로컬 기본 설정을 지정합니다.

spec.bgp.routers.neighbors.toAdvertise.withCommunity

array

공개된 BGP 커뮤니티와 관련된 접두사를 지정합니다. 광고하려는 접두사 목록에 로컬 기본 설정과 연결된 접두사를 포함해야 합니다.

spec.bgp.routers.neighbors.toAdvertise.withCommunity.prefixes

문자열 배열

커뮤니티와 연결된 접두사를 지정합니다.

spec.bgp.routers.neighbors.toAdvertise.withCommunity.community

string

접두사와 연결된 커뮤니티를 지정합니다.

spec.bgp.routers.neighbors.toReceive

array

인접자로부터 수신할 접두사를 지정합니다.

spec.bgp.routers.neighbors.toReceive.allowed

array

인접자로부터 수신하려는 정보를 지정합니다.

spec.bgp.routers.neighbors.toReceive.allowed.prefixes

array

인접지에서 허용되는 접두사를 지정합니다.

spec.bgp.routers.neighbors.toReceive.allowed.mode

string

접두사를 처리할 때 사용할 모드를 지정합니다. filtered 로 설정하면 prefixes 목록의 접두사만 허용됩니다. all 로 설정하면 라우터에 구성된 모든 접두사가 허용됩니다.

spec.bgp.routers.neighbors.disableMP

boolean

IPv4 및 IPv6 경로 교환을 별도의 BGP 세션으로 분리하지 못하도록 MP BGP를 비활성화합니다.

spec.bgp.routers.prefixes

문자열 배열

이 라우터 인스턴스에서 알릴 접두사를 모두 지정합니다.

spec.bgp.bfdProfiles

array

토론을 구성할 때 사용할 bfd 프로필 목록을 지정합니다.

spec.bgp.bfdProfiles.name

string

구성의 다른 부분에서 참조할 BFD 프로필의 이름입니다.

spec.bgp.bfdProfiles.receiveInterval

integer

이 시스템에서 제어 패킷을 수신할 수 있는 최소 간격(밀리초)을 지정합니다. 기본값은 300ms 입니다.

spec.bgp.bfdProfiles.transmitInterval

integer

이 시스템에서 BFD 제어 패킷을 밀리초 단위로 보내는 데 사용할 최소 전송 간격을 지정합니다. 기본값은 300ms 입니다.

spec.bgp.bfdProfiles.detectMultiplier

integer

패킷 손실을 확인하기 위해 감지 수를 구성합니다. 연결 손실 감지 타이머를 확인하려면 원격 전송 간격을 이 값으로 곱합니다.

spec.bgp.bfdProfiles.echoInterval

integer

이 시스템에서 처리할 수 있는 최소 에코 수신 전송 간격을 밀리초 단위로 구성합니다. 기본값은 50ms 입니다.

spec.bgp.bfdProfiles.echoMode

boolean

에코 전송 모드를 활성화하거나 비활성화합니다. 이 모드는 기본적으로 비활성화되어 있으며 멀티 홉 설정에서 지원되지 않습니다.

spec.bgp.bfdProfiles.passiveMode

boolean

세션을 패시브로 표시합니다. 수동 세션은 연결을 시작하지 않고 응답을 시작하기 전에 피어의 제어 패킷을 기다립니다.

spec.bgp.bfdProfiles.MinimumTtl

integer

멀티 홉 세션만 사용할 수 있습니다. 들어오는 BFD 제어 패킷에 대해 예상되는 최소 TTL을 구성합니다.

spec.nodeSelector

string

이 구성을 적용하려는 노드를 제한합니다. 지정된 경우 라벨이 지정된 선택기와 일치하는 노드만 구성을 적용하려고 합니다. 지정하지 않으면 모든 노드에서 이 구성을 적용하려고 합니다.

status

string

FRRConfiguration의 관찰 상태를 정의합니다.

30.11.3. FRR-K8s가 여러 구성을 병합하는 방법

여러 사용자가 동일한 노드를 선택하는 구성을 추가하는 경우 FRR-K8은 구성을 병합합니다. 각 구성은 다른 구성만 확장할 수 있습니다. 즉, 라우터에 새 인접을 추가하거나 추가 접두사를 인접자에게 광고할 수 있지만 다른 구성에 의해 추가된 구성 요소를 제거할 수는 없습니다.

30.11.3.1. 구성 충돌

특정 구성으로 인해 오류가 발생하여 오류가 발생할 수 있습니다. 예를 들면 다음과 같습니다.

  • 동일한 라우터에 대해 서로 다른 ASN (동일 VRF)
  • 동일한 인접지(동일 IP/포트 사용)에 대해 서로 다른 ASN
  • 이름이 같지만 다른 값이 있는 여러 BFD 프로필

데몬이 노드의 잘못된 구성을 찾으면 구성을 유효하지 않은 것으로 보고하고 이전 유효한 FRR 구성으로 되돌립니다.

30.11.3.2. 병합

병합할 때 다음 작업을 수행할 수 있습니다.

  • 인접지에게 알리고자 하는 IP 세트를 확장하십시오.
  • IP 세트와 함께 추가 인접자를 추가합니다.
  • 커뮤니티를 연결하려는 IP 집합을 확장합니다.
  • 이웃에게 들어오는 경로를 허용하십시오.

각 구성은 자체 포함되어야 합니다. 예를 들어 다른 구성의 접두사를 활용하여 라우터 섹션에 정의되지 않은 접두사를 허용할 수 없습니다.

적용할 구성이 호환되는 경우 병합은 다음과 같이 작동합니다.

  • FR-K8은 모든 라우터를 결합합니다.
  • FRR-K8s 는 각 라우터의 모든 접두사와 이해관계를 병합합니다.
  • FR-K8s는 각 인접지에 대한 모든 필터를 병합합니다.
참고

덜 제한적인 필터가 더 엄격한 필터보다 우선합니다. 예를 들어 일부 접두사를 수락하는 필터는 필터보다 우선하지 않으며 모든 접두사를 수락하는 필터가 일부 접두사를 허용하는 것보다 우선합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.