6장. BGP 라우팅
6.1. BGP 라우팅 정보 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 BGP를 MetalLB 및 FRR-K8s와 통합하기 위해 FRR-K8s 리소스가 클러스터 라우팅을 모델링하는 방법을 검토할 수 있습니다. 관리자가 MetalLB Operator 외부에서 생성한 경우 FRRConfiguration 사용자 정의 리소스를 metallb-system 에서 openshift-frr-k8s 로 마이그레이션합니다.
MetalLB Operator를 사용하고 MetalLB Operator 이외의 클러스터 관리자 또는 타사 클러스터 구성 요소에서 생성한 metallb-system 네임스페이스에 기존 FRRConfiguration CR이 있는 경우 해당 CR이 openshift-frr-k8s 네임스페이스에 복사되거나 해당 타사 클러스터 구성 요소가 새 네임스페이스를 사용하는지 확인해야 합니다. 자세한 내용은 "FRR-K8s 리소스 마이그레이션"을 참조하십시오.
6.1.1. BGP(Border Gateway Protocol) 라우팅 정보 링크 복사링크가 클립보드에 복사되었습니다!
클러스터의 외부 라우팅을 활성화하려면 FRRouting(FRR) 및 FRR-K8s 데몬을 사용하여 BGP(Border Gateway Protocol)를 구성합니다. FRRConfiguration CR(사용자 정의 리소스)을 사용하여 라우팅 동작을 정의하고 필요한 네임스페이스 및 마이그레이션 방법을 사용하여 MetalLB Operator와의 호환성을 보장할 수 있습니다.
OpenShift Container Platform은 Linux, UNIX 및 유사한 운영 체제용 무료 오픈 소스 인터넷 라우팅 프로토콜 제품군인 FRR을 통한 BGP 라우팅을 지원합니다. FR-K8s는 Kubernetes 호환 방식으로 FRR API의 하위 집합을 표시하는 Kubernetes 기반 데몬 세트입니다. 클러스터 관리자는 FRRConfiguration 사용자 지정 리소스를 사용하여 FRR 서비스에 액세스할 수 있습니다.
다음 다이어그램에서는 OpenShift Container Platform 노드에 두 개의 네임스페이스가 있는 멀티 테넌시 환경을 보여줍니다. OVN-Kubernetes 게이트웨이 라우터가 네임스페이스에서 외부 소스로 트래픽을 보내면 트래픽이 기본 가상 라우팅 및 전달(VRF) 인스턴스를 통해 전달됩니다. BGP 광고는 FRR 또는 OVN-Kubernetes 라우터가 클라우드 공급자의 라우터로 BGP 세션을 설정할 때 발생합니다. 이 세션을 통해 클라우드 공급자의 라우터는 노드가 Pod 또는 서비스 네트워크에 도달하기 위한 다음 홉 IP 주소임을 알 수 있습니다.
그림 6.1. VPN이 없는 BGP 광고
다음 다이어그램에서는 VRF lite를 사용하는 여러 VRF BGP 인스턴스를 보여줍니다. 이 아키텍처는 로컬 게이트웨이 모드만 지원합니다. VRF lite는 UDNs를 사용하여 MPLS(Multi-Protocol Label Switching) 또는 Ethernet Virtual Private Network(E VPN) 프로토콜의 과도한 캡슐화를 발생시키지 않고 Pod 트래픽을 격리하여 네트워크 가상화를 제공합니다. 별도의 L3 링크가 특정 VRF에 매핑되므로 독립적인 BGP 피어링 세션은 트래픽을 다음 홉 라우터로 라우팅합니다. 또한 이 L3 메커니즘을 다중 클라우드 배포에 배포하여 특정 네임스페이스가 네트워크를 통해 존재할 수 있도록 할 수 있습니다.
그림 6.2. VRF lite를 사용하는 여러 VRF BGP 인스턴스
6.1.1.1. 지원되는 플랫폼 링크 복사링크가 클립보드에 복사되었습니다!
BGP 라우팅은 다음 인프라 유형에서 지원됩니다.
- 베어 메탈
BGP 라우팅을 사용하려면 네트워크 공급자에 대해 BGP를 올바르게 구성해야 합니다. 네트워크 공급자의 중단 또는 잘못된 구성으로 인해 클러스터 네트워크가 중단될 수 있습니다.
6.1.1.2. MetalLB Operator와 함께 사용할 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
MetalLB Operator는 클러스터에 대한 애드온으로 설치됩니다. MetalLB Operator를 배포하면 추가 라우팅 기능 공급자로 FRR-K8s를 자동으로 활성화하고 이 기능에 의해 설치된 FRR-K8s 데몬을 사용합니다.
4.18로 업그레이드하기 전에 MetalLB Operator(클러스터 관리자 또는 기타 구성 요소에 의해 추가됨)에서 관리하지 않는 metallb-system 네임스페이스의 기존 FRRConfiguration 을 openshift-frr-k8s 네임스페이스에 수동으로 복사하여 필요한 경우 네임스페이스를 생성해야 합니다.
MetalLB Operator를 사용하고 클러스터 관리자 또는 MetalLB Operator 이외의 타사 클러스터 구성 요소가 생성된 metallb-system 네임스페이스에 기존 FRRConfiguration CR이 있는 경우 다음을 수행해야 합니다.
-
이러한 기존
FRRConfigurationCR이openshift-frr-k8s네임스페이스에 복사되었는지 확인합니다. -
타사 클러스터 구성 요소가 생성한
FRRConfigurationCR에 새 네임스페이스를 사용하는지 확인합니다.
6.1.1.3. CNO(Cluster Network Operator) 구성 링크 복사링크가 클립보드에 복사되었습니다!
Cluster Network Operator API는 다음 API 필드를 노출하여 BGP 라우팅을 구성합니다.
-
spec.additionalRoutingCapabilities: 클러스터의 FRR-K8s 데몬 배포를 활성화합니다. 이 데몬은 경로 알림과 독립적으로 사용할 수 있습니다. 활성화되면 FRR-K8s 데몬이 모든 노드에 배포됩니다.
6.1.1.4. BGP 라우팅 사용자 정의 리소스 링크 복사링크가 클립보드에 복사되었습니다!
다음 사용자 정의 리소스는 BGP 라우팅을 구성하는 데 사용됩니다.
FRRConfiguration- 이 사용자 정의 리소스는 BGP 라우팅에 대한 FRR 구성을 정의합니다. 이 CR은 네임스페이스가 지정됩니다.
6.1.2. FRRConfiguration CR 구성 링크 복사링크가 클립보드에 복사되었습니다!
표준 MetalLB 기능 이외의 라우팅 동작을 사용자 지정하려면 FRRConfiguration CR(사용자 정의 리소스)을 구성합니다.
다음 참조 예제에서는 특정 FRRouting(FRR) 매개변수를 정의하여 경로 수신과 같은 고급 서비스를 활성화하는 방법을 보여줍니다.
Router매개변수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 # ...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: - 192.168.2.0/24 prefixes: - 192.168.2.0/24 - 192.169.2.0/24 # ...-
allowed.prefixes: 접두사의 하위 집합을 알립니다.
다음 예제에서는 모든 접두사를 알리는 방법을 보여줍니다.
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 prefixes: - 192.168.2.0/24 - 192.169.2.0/24 # ...-
allowed.mode: 모든 접두사를 알립니다.
-
toReceive매개변수기본적으로
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 le: 28 # ...-
접두사가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 # ...-
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 # ...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" # ...interface매개변수interface매개변수를 사용하여 다음 예제 구성을 사용하여 번호가 지정되지 않은 BGP 피어링을 구성할 수 있습니다.FRRConfigurationCR 예apiVersion: frrk8s.metallb.io/v1beta1 kind: FRRConfiguration metadata: name: test namespace: frr-k8s-system spec: bgp: bfdProfiles: - echoMode: false name: simple passiveMode: false routers: - asn: 64512 neighbors: - asn: 64512 bfdProfile: simple disableMP: false interface: net10 port: 179 toAdvertise: allowed: mode: filtered prefixes: - 5.5.5.5/32 toReceive: allowed: mode: filtered prefixes: - 5.5.5.5/32 # ...-
networking.interface: 번호가 지정되지 않은 BGP 피어링을 활성화합니다.
참고interface매개변수를 사용하려면 두 BGP 피어 간에 지점 간 계층 2 연결을 설정해야 합니다. IPv4, IPv6 또는 듀얼 스택과 함께 번호가 지정되지 않은 BGP 피어링을 사용할 수 있지만 IPv6 RAs(Router Advertisements)를 활성화해야 합니다. 각 인터페이스는 하나의 BGP 연결로 제한됩니다.이 매개변수를 사용하는 경우
spec.bgp.routers.neighbors.address매개변수에 값을 지정할 수 없습니다.-
FRRConfiguration 사용자 정의 리소스의 매개변수는 다음 표에 설명되어 있습니다.
| 매개변수 | 유형 | 설명 |
|---|---|---|
|
|
| FRR이 구성할 라우터를 지정합니다( VRF당 하나씩). |
|
|
| 세션의 로컬 종료에 사용할 자동 시스템 번호(ASN)입니다. |
|
|
|
|
|
|
| 이 라우터에서 세션을 설정하는 데 사용되는 호스트 VRF를 지정합니다. |
|
|
| BGP 세션을 설정하는 포인을 지정합니다. |
|
|
|
세션의 원격 끝에 사용할 ASN을 지정합니다. 이 매개변수를 사용하는 경우 |
|
|
|
명시적으로 설정하지 않고 세션의 원격 끝에 사용할 ASN을 감지합니다. 동일한 ASN이 있는 인접지의 |
|
|
|
세션을 설정할 IP 주소를 지정합니다. 이 매개변수를 사용하는 경우 |
|
|
| 세션을 설정할 때 사용할 인터페이스 이름을 지정합니다. 이 매개변수를 사용하여 번호가 지정되지 않은 BGP 피어링을 구성합니다. 두 BGP 피어 간에 지점 간 계층 2 연결이 있어야 합니다. IPv4, IPv6 또는 듀얼 스택과 함께 번호가 지정되지 않은 BGP 피어링을 사용할 수 있지만 IPv6 RAs(Router Advertisements)를 활성화해야 합니다. 각 인터페이스는 하나의 BGP 연결로 제한됩니다. |
|
|
|
세션을 설정할 때 사용할 포트를 지정합니다. 기본값은 |
|
|
|
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의 관찰 상태를 정의합니다. |
6.1.3. BGP(Border Gateway Protocol)를 사용하여 계층-3 네트워크에 대해 no-overlay 모드 이해 링크 복사링크가 클립보드에 복사되었습니다!
no-overlay 모드를 사용하여 클래스 3 Pod 트래픽을 BGP로 직접 라우팅하여 캡슐화 오버헤드를 줄이고 east-west 성능을 향상시킬 수 있습니다.
no-overlay 모드는 기본 클러스터 네트워크에 대한 기본 캡슐화를 비활성화하고 BGP가 지정된 경로를 사용하여 노드 간에 Pod 트래픽을 전달합니다. 클러스터는 오버레이와 no-overlay 네트워크를 동시에 실행할 수 있습니다.
기본 클러스터 네트워크의 경우 no-overlay는 관리 및 관리되지 않는 라우팅을 지원합니다. 관리형 라우팅을 사용하면 OVN-Kubernetes는 클러스터 노드 간에 전체 메시 BGP 패브릭을 생성하므로 외부 BGP 라우터가 필요하지 않으며 Pod 경로는 클러스터 외부에 광고되지 않습니다(클러스터 간 트래픽만 해당). 관리형 라우팅을 사용하려면 계층 2에서 노드를 직접 연결해야 합니다. 다른 서브넷의 노드가 있는 클러스터에는 적합하지 않습니다. 기본 네트워크에서 관리되지 않는 라우팅을 사용하면 외부 BGP 피어를 구성하고 RouteAdvertisements CR(사용자 정의 리소스)을 사용하여 Pod 서브넷을 기존 BGP 인프라에 알립니다.
ClusterUserDefinedNetwork CR에서 정의하는 기본 네트워크의 경우 no-overlay는 관리되지 않는 라우팅만 지원합니다. CUDN에 대한 외부 BGP 피어 및 RouteAdvertisements CR을 구성합니다.
- 요구 사항
- OVN-Kubernetes 네트워크 플러그인을 사용하는 베어 메탈 클러스터입니다.
- 클러스터에 대해 단일 노드 영역 상호 연결 모드가 활성화되어 있습니다.
- BGP 라우팅이 활성화되고 FRR-K8이 배포되었습니다.
-
계층 3 네트워크만(
ClusterUserDefinedNetworkCR에 의해 정의된 기본 네트워크 또는 기본 네트워크).
- 제한
- 계층 2 네트워크에는 오버레이(no-overlay) 모드가 지원되지 않습니다.
- no-overlay 네트워크에는 EgressIP, EgressService, IPsec, multicast 및 여러 외부 게이트웨이가 지원되지 않습니다.
-
overlay와 no-overlay 모드 간에 기존 네트워크를 전환하는 것은
ClusterUserDefinedNetworkCR을 사용하여 지원되지 않습니다.
- 지원되는 게이트웨이 모드
- 기본 클러스터 네트워크에서 no-overlay는 로컬 게이트웨이(LGW) 모드 및 공유 게이트웨이(SGW) 모드에서 모두 지원됩니다.
ClusterUserDefinedNetworkCR에서 정의하는 기본 네트워크에서는 LGW 및 SGW 모드에서 no-overlay가 지원됩니다.중요externalTrafficPolicy가Cluster로 설정되어 있고 백엔드 Pod가 요청 대상이 되는 것과 다른 노드에 있는 경우NoOverlay전송 모드로 구성된 CUDN에서 실행되는 Pod는NodePort서비스에 대한 TCP 연결을 설정할 수 없습니다. 이 문제는 아웃바운드 SNAT가 활성화되었는지 또는 비활성화되었는지 여부와 관계없이 발생합니다.