30.6. MetalLB BGP 피어 구성
클러스터 관리자는 BGP(Border Gateway Protocol) 피어를 추가, 수정, 삭제할 수 있습니다. MetalLB Operator는 BGP 피어 사용자 정의 리소스를 사용하여 MetalLB 발표
Pod가 BGP 세션을 시작하기 위해 연결하는 피어를 식별합니다. 피어는 MetalLB에서 서비스에 할당하는 로드 밸런서 IP 주소에 대한 경로 알림을 받습니다.
30.6.1. BGP 피어 사용자 정의 리소스 정보
BGP 피어 사용자 지정 리소스의 필드는 다음 표에 설명되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
| BGP 피어 사용자 지정 리소스의 이름을 지정합니다. |
|
| BGP 피어 사용자 지정 리소스의 네임스페이스를 지정합니다. |
|
|
BGP 세션의 로컬 종료에 대한 자동 시스템 번호를 지정합니다. 추가하는 모든 BGP 피어 사용자 정의 리소스에서 동일한 값을 지정합니다. 범위는 |
|
|
BGP 세션의 원격 종료에 대한 자동 시스템 번호를 지정합니다. 범위는 |
|
| BGP 세션을 설정하기 위해 연결할 피어의 IP 주소를 지정합니다. |
|
| 선택 사항: BGP 세션을 설정할 때 사용할 IP 주소를 지정합니다. 값은 IPv4 주소여야 합니다. |
|
|
선택 사항: BGP 세션을 설정하기 위해 연결할 피어의 네트워크 포트를 지정합니다. 범위는 |
|
|
선택 사항: BGP 피어에 제안할 보류 시간 기간을 지정합니다. 최소값은 3초입니다( |
|
|
선택 사항: keep-alive 메시지를 BGP 피어로 전송하는 최대 간격을 지정합니다. 이 필드를 지정하는 경우 |
|
| 선택 사항: BGP 피어에 알릴 라우터 ID를 지정합니다. 이 필드를 지정하는 경우 추가한 모든 BGP 피어 사용자 지정 리소스에 동일한 값을 지정해야 합니다. |
|
| 선택 사항: TCP MD5 인증된 BGP 세션을 적용하는 라우터의 피어에 보낼 MD5 암호를 지정합니다. |
|
|
선택 사항: BGP 피어에 대한 인증 시크릿의 이름을 지정합니다. 시크릿은 |
|
| 선택 사항: BFD 프로필의 이름을 지정합니다. |
|
| 선택 사항: 일치 표현식과 일치 레이블을 사용하여 BGP 피어에 연결할 수 있는 노드를 제어하는 선택기를 지정합니다. |
|
|
선택 사항: BGP 피어가 여러 네트워크 홉 떨어져 있음을 지정합니다. BGP 피어가 동일한 네트워크에 직접 연결되지 않은 경우 이 필드가 |
|
| BGP가 인접한 연결 시도 사이에 대기하는 시간을 지정합니다. |
passwordSecret
필드는 password 필드와 함께 사용할 수 있으며 사용할 암호
가 포함된 보안에 대한 참조를 포함합니다. 두 필드를 모두 설정하면 구문 분석 실패가 발생합니다.
30.6.2. BGP 피어 구성
클러스터 관리자는 BGP 피어 사용자 지정 리소스를 추가하여 네트워크 라우터와 라우팅 정보를 교환하고 서비스의 IP 주소를 알릴 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다. - BGP 광고를 사용하여 MetalLB를 구성합니다.
프로세스
다음 예와 같은 콘텐츠를 사용하여
bgppeer.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: doc-example-peer spec: peerAddress: 10.0.0.1 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
BGP 피어의 구성을 적용합니다.
$ oc apply -f bgppeer.yaml
30.6.3. 지정된 주소 풀에 대해 특정 BGP 피어 세트를 구성
다음 절차에서는 다음을 수행하는 방법을 설명합니다.
-
주소 풀 집합(
pool1
및pool2
)을 구성합니다. -
BGP 피어(
peer1
및peer2
) 세트를 구성합니다. -
pool1
을peer1
에 할당하고pool2
를peer2
에 할당하도록 BGP 광고를 구성합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
주소 풀
pool1
을 생성합니다.다음 예와 같은 콘텐츠를 사용하여
ipaddresspool1.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: pool1 spec: addresses: - 4.4.4.100-4.4.4.200 - 2001:100:4::200-2001:100:4::400
IP 주소
pool1
에 대한 구성을 적용합니다.$ oc apply -f ipaddresspool1.yaml
주소 풀
풀2
를 생성합니다.다음 예와 같은 콘텐츠를 사용하여
ipaddresspool2.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: pool2 spec: addresses: - 5.5.5.100-5.5.5.200 - 2001:100:5::200-2001:100:5::400
IP 주소
풀2
의 구성을 적용합니다.$ oc apply -f ipaddresspool2.yaml
BGP
피어1
을 만듭니다.다음 예와 같은 콘텐츠를 사용하여
bgppeer1.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: peer1 spec: peerAddress: 10.0.0.1 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
BGP 피어의 구성을 적용합니다.
$ oc apply -f bgppeer1.yaml
BGP
피어2
를 만듭니다.다음 예와 같은 콘텐츠를 사용하여
bgppeer2.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: peer2 spec: peerAddress: 10.0.0.2 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
BGP 피어2에 대한 구성을 적용합니다.
$ oc apply -f bgppeer2.yaml
BGP 광고 1을 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
bgpadvertisement1.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-1 namespace: metallb-system spec: ipAddressPools: - pool1 peers: - peer1 communities: - 65535:65282 aggregationLength: 32 aggregationLengthV6: 128 localPref: 100
설정을 적용합니다.
$ oc apply -f bgpadvertisement1.yaml
BGP 광고 2를 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
bgpadvertisement2.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-2 namespace: metallb-system spec: ipAddressPools: - pool2 peers: - peer2 communities: - 65535:65282 aggregationLength: 32 aggregationLengthV6: 128 localPref: 100
설정을 적용합니다.
$ oc apply -f bgpadvertisement2.yaml
30.6.4. 네트워크 VRF를 통해 서비스 노출
네트워크 인터페이스의 VRF를 BGP 피어와 연결하여 VRF(가상 라우팅 및 전달) 인스턴스를 통해 서비스를 노출할 수 있습니다.
VRF를 통해 BGP 피어에서 서비스를 노출하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
네트워크 인터페이스에서 VRF를 사용하여 BGP 피어를 통해 서비스를 노출하면 트래픽을 서비스로 분리하고 독립적인 라우팅 결정을 구성하고 네트워크 인터페이스에서 멀티 테넌시 지원을 활성화할 수 있습니다.
MetalLB는 네트워크 VRF에 속하는 인터페이스를 통해 BGP 세션을 설정하여 해당 인터페이스를 통해 서비스를 알리고 외부 트래픽을 활성화하여 이 인터페이스를 통해 서비스에 도달할 수 있습니다. 그러나 네트워크 VRF 라우팅 테이블은 OVN-Kubernetes에서 사용하는 기본 VRF 라우팅 테이블과 다릅니다. 따라서 트래픽이 OVN-Kubernetes 네트워크 인프라에 연결할 수 없습니다.
OVN-Kubernetes 네트워크 인프라에 도달하기 위해 서비스로 전송되는 트래픽을 활성화하려면 네트워크 트래픽의 다음 홉을 정의하도록 라우팅 규칙을 구성해야 합니다. 자세한 내용은 추가 리소스 섹션에서 " MetalLB를 사용한 대칭 라우팅 관리"의 NodeNetworkConfigurationPolicy
리소스를 참조하십시오.
다음은 BGP 피어와 네트워크 VRF를 통해 서비스를 노출하는 고급 단계입니다.
- BGP 피어를 정의하고 네트워크 VRF 인스턴스를 추가합니다.
- MetalLB의 IP 주소 풀을 지정합니다.
- MetalLB에 대해 BGP 경로 알림을 구성하여 지정된 IP 주소 풀 및 VRF 인스턴스와 연결된 BGP 피어를 사용하여 경로를 알립니다.
- 서비스를 배포하여 구성을 테스트합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인했습니다. -
NodeNetworkConfigurationPolicy
를 정의하여 VRF(Virtual Routing and Forwarding) 인스턴스를 네트워크 인터페이스와 연결합니다. 이 사전 요구 사항을 작성하는 방법에 대한 자세한 내용은 추가 리소스 섹션을 참조하십시오. - 클러스터에 MetalLB를 설치했습니다.
프로세스
BGPPeer
CR(사용자 정의 리소스)을 생성합니다.다음 예와 같은 콘텐츠를 사용하여
frrviavrf.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의 라우팅 정보를 기반으로 서비스를 알리고 라우팅 결정을 내릴 수 있습니다.
참고NodeNetworkConfigurationPolicy
CR에서 이 네트워크 VRF 인스턴스를 구성해야 합니다. 자세한 내용은 추가 리소스를 참조하십시오.다음 명령을 실행하여 BGP 피어에 대한 구성을 적용합니다.
$ oc apply -f frrviavrf.yaml
IPAddressPool
CR을 생성합니다.다음 예와 같은 콘텐츠를 사용하여
first-pool.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.169.10.0/32
다음 명령을 실행하여 IP 주소 풀에 대한 구성을 적용합니다.
$ oc apply -f first-pool.yaml
BGPAdvertisement
CR을 생성합니다.다음 예와 같은 콘텐츠를 사용하여
first-adv.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: first-adv namespace: metallb-system spec: ipAddressPools: - first-pool peers: - frrviavrf 1
- 1
- 이 예에서 MetalLB는
첫 번째 풀 IP 주소 풀에서
frrviavrf
BGP 피어로 다양한 IP 주소를 알립니다.
다음 명령을 실행하여 BGP 알림에 대한 구성을 적용합니다.
$ oc apply -f first-adv.yaml
네임스페이스
,배포
및서비스
CR을 생성합니다.다음 예와 같은 콘텐츠를 사용하여
deploy-service.yaml
과 같은 파일을 생성합니다.apiVersion: v1 kind: Namespace metadata: name: test --- apiVersion: apps/v1 kind: Deployment metadata: name: server namespace: test spec: selector: matchLabels: app: server template: metadata: labels: app: server spec: containers: - name: server image: registry.redhat.io/ubi9/ubi ports: - name: http containerPort: 30100 command: ["/bin/sh", "-c"] args: ["sleep INF"] --- apiVersion: v1 kind: Service metadata: name: server1 namespace: test spec: ports: - name: http port: 30100 protocol: TCP targetPort: 30100 selector: app: server type: LoadBalancer
다음 명령을 실행하여 네임스페이스, 배포 및 서비스에 대한 구성을 적용합니다.
$ oc apply -f deploy-service.yaml
검증
다음 명령을 실행하여 MetalLB speaker Pod를 식별합니다.
$ oc get -n metallb-system pods -l component=speaker
출력 예
NAME READY STATUS RESTARTS AGE speaker-c6c5f 6/6 Running 0 69m
다음 명령을 실행하여 BGP 세션의 상태가 speaker Pod에
Established
되었는지 확인하고, 구성과 일치하도록 변수를 교체합니다.$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> neigh"
출력 예
BGP neighbor is 192.168.30.1, remote AS 200, local AS 100, external link BGP version 4, remote router ID 192.168.30.1, local router ID 192.168.30.71 BGP state = Established, up for 04:20:09 ...
다음 명령을 실행하여 서비스가 올바르게 광고되는지 확인합니다.
$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> ipv4"
30.6.5. BGP 피어 구성의 예
30.6.5.1. 예: BGP 피어에 연결하는 노드 제한
노드 선택기 필드를 지정하여 BGP 피어에 연결할 수 있는 노드를 제어할 수 있습니다.
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-nodesel namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64501 myASN: 64500 nodeSelectors: - matchExpressions: - key: kubernetes.io/hostname operator: In values: [compute-1.example.com, compute-2.example.com]
30.6.5.2. 예: BGP 피어의 BFD 프로필 지정
BGP 피어와 연결할 BFD 프로필을 지정할 수 있습니다. BFD는 BGP보다 동료 간 통신 오류를 보다 신속하게 탐지하여 BGP를 보완합니다.
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-peer-bfd namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64501 myASN: 64500 holdTime: "10s" bfdProfile: doc-example-bfd-profile-full
BFD(Earwayal forwarding detection) 프로필을 삭제하고 BGP(Border Gateway Protocol) 피어 리소스에 추가된 bfdProfile
을 제거해도 BFD가 비활성화되지 않습니다. 대신 BGP 피어는 기본 BFD 프로필 사용을 시작합니다. BGP 피어 리소스에서 BFD를 비활성화하려면 BGP 피어 구성을 삭제하고 BFD 프로필없이 다시 생성합니다. 자세한 내용은 BZ#2050824 에서 참조하십시오.
30.6.5.3. 예: 이중 스택 네트워킹을 위한 BGP 피어 지정
듀얼 스택 네트워킹을 지원하려면 IPv4에 대해 하나의 BGP 피어 사용자 지정 리소스와 IPv6에 대해 하나의 BGP 피어 사용자 지정 리소스를 추가합니다.
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-dual-stack-ipv4 namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64500 myASN: 64500 --- apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-dual-stack-ipv6 namespace: metallb-system spec: peerAddress: 2620:52:0:88::104 peerASN: 64500 myASN: 64500