30.11. MetalLB 및 FRR-K8의 통합 구성
FRRouting (FRR)은 Linux 및 UNIX 플랫폼을 위한 무료 오픈 소스 인터넷 라우팅 프로토콜 제품군입니다. FRR-K8s
는 Kubernetes 호환 방식으로 FRR
API의 하위 집합을 노출하는 Kubernetes 기반 DaemonSet입니다. 클러스터 관리자는 FRRConfiguration
CR(사용자 정의 리소스)을 사용하여 MetalLB에서 제공하지 않는 일부 FRR 서비스에 액세스할 수 있습니다(예: 경로 수신). MetalLB
는 적용된 MetalLB 구성에 해당하는 FRR-K8s
구성을 생성합니다.
30.11.1. FRR 구성
여러 FRRConfiguration
CR을 생성하여 MetalLB
에서 FRR
서비스를 사용할 수 있습니다. MetalLB
는 FRR-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
다음 예제에서는 발표된 모든 접두사를 처리하도록 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
프로필을 정의하고 이를 인접지와 연결할 수 있습니다. 다음 예에서 BFD
는 BGP
세션을 백업하고 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
사용자 정의 리소스의 필드는 다음 표에 설명되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
| FRR이 구성할 라우터를 지정합니다( VRF당 하나씩). |
|
| 세션의 로컬 종료에 사용할 자율 시스템 번호입니다. |
|
|
|
|
| 이 라우터에서 세션을 설정하는 데 사용되는 호스트 vrf를 지정합니다. |
|
| BGP 세션을 설정하는 포인을 지정합니다. |
|
| 세션의 로컬 끝에 사용할 자율 시스템 번호를 지정합니다. |
|
| 세션을 설정할 IP 주소를 지정합니다. |
|
| 세션을 설정할 때 사용할 포트를 지정합니다. 기본값은 179입니다. |
|
|
BGP 세션을 설정하는 데 사용할 암호를 지정합니다. |
|
|
피어에 대한 인증 시크릿의 이름을 지정합니다. 시크릿은 "kubernetes.io/basic-auth" 유형이어야 하며 FRR-K8s 데몬과 동일한 네임스페이스에 있어야 합니다. "password" 키는 암호를 시크릿에 저장합니다. |
|
| RFC4271에 따라 요청된 BGP 보류 시간을 지정합니다. 기본값은 180s입니다. |
|
|
RFC4271에 따라 요청된 BGP keepalive 시간을 지정합니다. 기본값은 |
|
| BGP가 인접한 연결 시도 사이에 대기하는 시간을 지정합니다. |
|
| BGPPeer가 멀티 홉 떨어져 있는지 여부를 나타냅니다. |
|
| BGP 세션과 연결된 BFD 세션에 사용할 BFD 프로필의 이름을 지정합니다. 설정되지 않은 경우 BFD 세션이 설정되지 않습니다. |
|
| 인접지 및 관련 속성에 알리는 접두사 목록을 나타냅니다.Represents the list of prefixes to advertise to a neighbor, and the associated properties. |
|
| 인접지에게 알리기 위한 접두사 목록을 지정합니다. 이 목록은 라우터에서 정의한 접두사와 일치해야 합니다. |
|
|
접두사를 처리할 때 사용할 모드를 지정합니다. 접두사 목록의 접두사만 허용하도록 |
|
| 공개된 로컬 기본 설정과 연결된 접두사를 지정합니다. 광고할 수 있도록 허용된 접두사에 로컬 기본 설정과 연결된 접두사를 지정해야 합니다. |
|
| 로컬 기본 설정과 연결된 접두사를 지정합니다. |
|
| 접두사와 연결된 로컬 기본 설정을 지정합니다. |
|
| 공개된 BGP 커뮤니티와 관련된 접두사를 지정합니다. 광고하려는 접두사 목록에 로컬 기본 설정과 연결된 접두사를 포함해야 합니다. |
|
| 커뮤니티와 연결된 접두사를 지정합니다. |
|
| 접두사와 연결된 커뮤니티를 지정합니다. |
|
| 인접자로부터 수신할 접두사를 지정합니다. |
|
| 인접자로부터 수신하려는 정보를 지정합니다. |
|
| 인접지에서 허용되는 접두사를 지정합니다. |
|
|
접두사를 처리할 때 사용할 모드를 지정합니다. |
|
| IPv4 및 IPv6 경로 교환을 별도의 BGP 세션으로 분리하지 못하도록 MP BGP를 비활성화합니다. |
|
| 이 라우터 인스턴스에서 알릴 접두사를 모두 지정합니다. |
|
| 토론을 구성할 때 사용할 bfd 프로필 목록을 지정합니다. |
|
| 구성의 다른 부분에서 참조할 BFD 프로필의 이름입니다. |
|
|
이 시스템에서 제어 패킷을 수신할 수 있는 최소 간격(밀리초)을 지정합니다. 기본값은 |
|
|
이 시스템에서 BFD 제어 패킷을 밀리초 단위로 보내는 데 사용할 최소 전송 간격을 지정합니다. 기본값은 |
|
| 패킷 손실을 확인하기 위해 감지 수를 구성합니다. 연결 손실 감지 타이머를 확인하려면 원격 전송 간격을 이 값으로 곱합니다. |
|
|
이 시스템에서 처리할 수 있는 최소 에코 수신 전송 간격을 밀리초 단위로 구성합니다. 기본값은 |
|
| 에코 전송 모드를 활성화하거나 비활성화합니다. 이 모드는 기본적으로 비활성화되어 있으며 멀티 홉 설정에서 지원되지 않습니다. |
|
| 세션을 패시브로 표시합니다. 수동 세션은 연결을 시작하지 않고 응답을 시작하기 전에 피어의 제어 패킷을 기다립니다. |
|
| 멀티 홉 세션만 사용할 수 있습니다. 들어오는 BFD 제어 패킷에 대해 예상되는 최소 TTL을 구성합니다. |
|
| 이 구성을 적용하려는 노드를 제한합니다. 지정된 경우 라벨이 지정된 선택기와 일치하는 노드만 구성을 적용하려고 합니다. 지정하지 않으면 모든 노드에서 이 구성을 적용하려고 합니다. |
|
| 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는
각 인접지에 대한 모든 필터를 병합합니다.
덜 제한적인 필터가 더 엄격한 필터보다 우선합니다. 예를 들어 일부 접두사를 수락하는 필터는 필터보다 우선하지 않으며 모든 접두사를 수락하는 필터가 일부 접두사를 허용하는 것보다 우선합니다.