BGP 구성
BGP 구성 (BGP configuration)
BGPConfiguration 리소스는 클러스터 전체 또는 특정 노드의 BGP 구성 옵션을 나타내요. AS(자율 시스템) 번호, 서비스 ClusterIP/ExternalIP 광고, BGP 커뮤니티, 노드 간 메시처럼 클러스터 전역 BGP 설정을 이 리소스 하나로 다룰 수 있어요. 이 문서에서는 샘플 YAML과 필드별 정의를 레퍼런스 형식으로 정리했어요.
출처: 문서
본문
BGP(Border Gateway Protocol) 구성 리소스(BGPConfiguration)는 클러스터 또는 특정 노드의 BGP 구성 옵션을 나타내요.
샘플 YAML
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: true
nodeMeshMaxRestartTime: 120s
asNumber: 63400
serviceClusterIPs:
- cidr: 10.96.0.0/12
serviceExternalIPs:
- cidr: 104.244.42.129/32
- cidr: 172.217.3.0/24
listenPort: 178
bindMode: NodeIP
communities:
- name: bgp-large-community
value: 63400:300:100
prefixAdvertisements:
- cidr: 172.218.4.0/26
communities:
- bgp-large-community
- 63400:120
BGP 구성 정의
메타데이터 (Metadata)
| 필드 | 설명 | 허용 값 | 스키마 |
|---|---|---|---|
name |
이 리소스 인스턴스를 설명하는 고유 이름이에요. 반드시 지정해야 해요. | ., _, -를 선택적으로 포함하는 영숫자 문자열 |
string |
- 이름이
default인 리소스는 특별한 의미가 있어요. BGP 전역 기본 구성을 담고 있죠. - 이름이
node.<nodename>인 리소스는 노드별 오버라이드를 담고, 노드<nodename>에 적용돼요. 노드를 삭제하면 그 노드와 연결된 BGPConfiguration 리소스도 함께 삭제돼요. 이런 식으로 오버라이드할 수 있는 것은 prefixAdvertisements, listenPort, logSeverityScreen뿐이에요.
스펙 (Spec)
| 필드 | 설명 | 허용 값 | 스키마 | 기본값 |
|---|---|---|---|---|
logSeverityScreen |
전역 로그 레벨이에요 | Debug, Info, Warning, Error, Fatal | string | Info |
nodeToNodeMeshEnabled |
전체 BGP 노드 간 메시(node-to-node mesh)예요. 전역 default BGPConfiguration에서만 유효해요. |
true, false | string | true |
asNumber |
Calico가 BGP 피어와 통신할 때 기본으로 사용할 로컬 AS 번호예요. 전역 default BGPConfiguration에서만 유효하고, 노드별 오버라이드를 설정하려면 Node 리소스의 bgp 필드를 사용하세요. |
유효한 AS 번호. dotted 표기로 지정할 수 있어요. | integer/string | 64512 |
serviceClusterIPs |
BGP로 광고할 Kubernetes Service Cluster IP의 CIDR 블록이에요. 전역 default BGPConfiguration에서만 유효하고, 그 외에는 무시돼요. |
유효한 IPv4 또는 IPv6 CIDR 블록 목록. | cidr: <ip>/<prefix length> 값의 목록. |
빈 목록 |
serviceExternalIPs |
BGP로 광고할 Kubernetes Service External IP의 CIDR 블록이에요. Kubernetes Service External IP는 이 블록 중 하나에 속할 때만 광고돼요. 전역 default BGPConfiguration에서만 유효하고, 그 외에는 무시돼요. |
유효한 IPv4 또는 IPv6 CIDR 블록 목록. | cidr: <ip>/<prefix length> 값의 목록. |
빈 목록 |
serviceLoadBalancerIPs |
BGP로 광고할 Kubernetes Service status.LoadBalancer IP의 CIDR 블록이에요. Kubernetes LoadBalancer IP는 이 블록 중 하나에 속할 때만 광고돼요. 전역 default BGPConfiguration에서만 유효하고, 그 외에는 무시돼요. |
유효한 IPv4 또는 IPv6 CIDR 블록 목록. | cidr: <ip>/<prefix length> 값의 목록. |
빈 목록 |
listenPort |
BGP 프로토콜이 리슨할 포트예요. | 유효한 포트 번호. | integer | 179 |
bindMode |
모든 주소(None)에서 BGP 연결을 리슨할지, 노드의 canonical IP 주소인 Node.Spec.BGP.IPvXAddress(NodeIP)에서만 리슨할지 나타내요. calico-node가 이미 실행 중일 때 이 필드를 바꾸면 calico-node를 수동으로 재시작하기 전까지는 변경이 적용되지 않아요. | None, NodeIP. | string | None |
communities |
BGP 커뮤니티 이름과 값의 목록이에요. 커뮤니티는 prefixAdvertisements에서 사용되기 전까지는 광고되지 않아요. | communities 목록 | ||
prefixAdvertisements |
BGP 커뮤니티 같은 프리픽스별 광고 속성 목록이에요. | prefixAdvertisements 목록 | ||
nodeMeshPassword |
풀 메시 구성의 모든 피어링에 사용할 BGP 비밀번호예요. | BGPPassword | nil (비밀번호 없음) |
|
nodeMeshMaxRestartTime |
BGP graceful restart capability에서 BIRD가 알리는 재시작 시간이에요. 풀 메시 구성에서 재시작 후 오래된(stale) 라우트를 삭제하기 전에 이웃이 BGP 세션 재수립을 기다리는 시간을 지정하죠. 참고: 이 구성을 바꿀 때는 각별히 주의하세요. 클러스터 네트워킹이 깨질 수 있거든요. 지정하지 않으면 BIRD는 기본값 120초를 사용해요. | 10s, 120s, 2m 등 |
[Duration string][parse-duration] | nil (빈 구성이면 BIRD가 기본값 120s를 사용해요) |
ignoredInterfaces |
디바이스 라우트를 읽을 때 제외할 네트워크 인터페이스 목록이에요. | 네트워크 인터페이스 이름 목록. 이름에 와일드카드 문자 *를 써서 인터페이스 이름 그룹을 지정할 수 있어요. |
문자열 목록 | nil (추가로 무시할 인터페이스 없음) |
localWorkloadPeeringIPV4 |
BGPPeer의 localWorkloadSelector를 사용할 때 모든 노드가 로컬 워크로드와 피어링하는 데 쓰는 단일 가상 IPv4 주소예요. 링크 로컬 주소가 권장되지만, Calico가 내부적으로 사용하는 169.254.0.1이나 169.254.0.2는 안 돼요. 자세한 내용은 가이드를 참고하세요. |
IPv4 주소. | string | None |
localWorkloadPeeringIPV6 |
BGPPeer의 localWorkloadSelector를 사용할 때 모든 노드가 로컬 워크로드와 피어링하는 데 쓰는 단일 가상 IPv6 주소예요. 링크 로컬 주소여서는 안 돼요 (Calico가 아직 필요한 "scope" 접미사를 지원하지 않거든요). 자세한 내용은 가이드를 참고하세요. |
IPv6 주소. | string | None |
ipv4NormalRoutePriority |
Felix가 IPv4 워크로드 라우트에 쓰는 normal 라우트 우선순위(metric)예요. FelixConfiguration에 구성된 값과 일치해야 해요. BIRD는 라이브 마이그레이션 중 우선순위가 높은 라우트를 식별하고, 로컬 워크로드 라우트를 더 높은 우선순위의 BGP 학습 라우트로 대체할 때 이 값을 사용해요. | 1-2147483646 | integer | 1024 |
ipv6NormalRoutePriority |
Felix가 IPv6 워크로드 라우트에 쓰는 normal 라우트 우선순위(metric)예요. FelixConfiguration에 구성된 값과 일치해야 해요. BIRD는 라이브 마이그레이션 중 우선순위가 높은 라우트를 식별하고, 로컬 워크로드 라우트를 더 높은 우선순위의 BGP 학습 라우트로 대체할 때 이 값을 사용해요. | 1-2147483646 | integer | 1024 |
programClusterRoutes |
VXLAN 또는 IP-in-IP가 활성화된 IP 풀에 대해 Calico가 클러스터 라우트를 프로그래밍할지 제어해요. Felix는 vxlanMode: Always 또는 vxlanMode: CrossSubnet인 IP 풀에 대해서는 항상 그런 라우트를 프로그래밍해요. |
Enabled, Disabled | string | Enabled |
communities
| 필드 | 설명 | 허용 값 | 스키마 |
|---|---|---|---|
name |
커뮤니티의 이름 또는 식별자예요. 커뮤니티 값을 광고할 때 prefixAdvertisements에서 이 이름을 사용해요. | string | |
value |
standard 또는 large BGP 커뮤니티 값이에요. | standard 커뮤니티는 aa:nn 형식이어야 하고, aa와 nn은 둘 다 16비트 정수예요. large 커뮤니티는 aa:nn:mm 형식이어야 하고, aa, nn, mm은 모두 32비트 정수예요. aa는 AS 번호이고, nn과 mm은 AS별 식별자예요. |
string |
prefixAdvertisements
| 필드 | 설명 | 허용 값 | 스키마 |
|---|---|---|---|
cidr |
속성을 광고할 CIDR이에요. | cidr: XXX.XXX.XXX.XXX/XX |
string |
communities |
광고할 BGP 커뮤니티예요. | 커뮤니티는 communities에서 이미 정의한 커뮤니티 이름 목록이거나, aa:nn 또는 aa:nn:mm 형식의 커뮤니티 값일 수 있어요. standard 커뮤니티는 aa:nn 형식이어야 하고, aa와 nn은 둘 다 16비트 정수예요. large 커뮤니티는 aa:nn:mm 형식이어야 하고, aa, nn, mm은 모두 32비트 정수예요. aa는 AS 번호이고, nn과 mm은 AS별 식별자예요. |
문자열 목록 |
더 알아보기 (Learn more)
BGPConfiguration은 클러스터의 BGP 동작을 바꾸는 거의 모든 설정이 모이는 곳이에요. 대부분의 필드는 전역 default 리소스에서만 유효하니 노드별 설정이 필요하면 Node 리소스를 확인하세요. prefixAdvertisements와 communities를 함께 쓰면 라우트 광고에 BGP 커뮤니티를 붙일 수 있어요.