BGP 필터 리소스(BGPFilter)는 BGP 피어 리소스(BGPPeer)로 지정한 BGP 피어에서 임포트하거나 그쪽으로 익스포트하는 라우트를 제어하는 방법을 나타내요.
BGPFilter 규칙은 순서대로 적용돼요. 처음으로 매칭된 규칙의 action이 즉시 실행돼요. 어떤 주소도 명시적인 BGP 필터 규칙에 매칭되지 않으면 기본 동작은 Accept예요.
BGPFilter를 BGP 피어링에서 쓰려면 해당 BGPPeer 리소스의 filters에 그 BGPFilter의 name을 추가해야 해요.
kubectl 커맨드에서는 CLI에서 리소스 타입을 지정할 때 다음과 같은 대소문자를 구분하는 별칭을 쓸 수 있어요: bgpfilters.projectcalico.org
출처: 문서
본문
샘플 YAML
apiVersion: projectcalico.org/v3
kind: BGPFilter
metadata:
name: my-filter
spec:
exportV4:
- action: Accept
matchOperator: In
cidr: 77.0.0.0/16
source: RemotePeers
- action: Reject
interface: '*.calico'
importV4:
- action: Accept
matchOperator: In
cidr: 55.0.0.0/16
prefixLength:
min: 30
- action: Reject
matchOperator: NotIn
cidr: 44.0.0.0/16
exportV6:
- action: Reject
source: RemotePeers
- action: Reject
interface: '*.calico'
importV6:
- action: Accept
matchOperator: Equal
cidr: 5000::0/64
- action: Reject
BGP 필터 정의
| 필드 |
설명 |
허용 값 |
스키마 |
name |
이 리소스 인스턴스를 설명하는 고유한 이름이에요. 반드시 지정해야 해요. |
., _, -를 선택적으로 포함할 수 있는 영숫자 문자열 |
string |
사양 (Spec)
BGP 필터 규칙 v4
| 필드 |
설명 |
허용 값 |
스키마 |
기본값 |
cidr |
IPv4 범위 |
유효한 IPv4 CIDR |
string |
|
prefixLength |
PrefixLength |
0부터 ipv4/6 최댓값(32, 128) 사이의 유효한 정수 |
|
|
matchOperator |
후보 라우트를 매칭하는 방식 |
In, NotIn, Equal, NotEqual |
string |
|
source |
라우트의 출처를 나타내는 표시 |
RemotePeers는 다른 BGP 피어로부터 학습한 모든 라우트를 의미해요 |
string |
|
interface |
인터페이스 이름을 매칭할 문자열 |
인터페이스를 매칭할 유효한 패턴이에요. "*"를 와일드카드로 쓸 수 있어요. |
string |
|
peerType |
이 규칙을 지정한 BGP 피어 타입과 주고받는 라우트에만 적용해요. 비워 두면 모든 피어에 적용돼요. |
eBGP, iBGP |
string |
|
priority |
지정한 우선순위(메트릭)를 가진 라우트에만 이 규칙을 적용해요. FelixConfiguration의 ...RoutePriority 필드와 같은 단위를 써요. |
1-2147483646 |
integer |
|
communities |
지정한 BGP 커뮤니티를 실은 라우트에만 이 규칙을 적용해요. |
BGP 필터 커뮤니티 매치를 참고하세요. |
object |
|
action |
이 규칙에 대해 취할 동작 |
Accept 또는 Reject |
string |
|
operations |
규칙이 매칭됐을 때 적용할 라우트 수정 작업의 순서 목록이에요. action이 Accept일 때만 유효해요. 최대 10개의 동작이 가능해요. |
BGP 필터 오퍼레이션을 참고하세요. |
list |
|
BGP 필터 규칙 v6
| 필드 |
설명 |
허용 값 |
스키마 |
기본값 |
cidr |
IPv6 범위 |
유효한 IPv6 CIDR |
string |
|
prefixLength |
PrefixLength |
0부터 ipv4/6 최댓값(32, 128) 사이의 유효한 정수 |
|
|
matchOperator |
후보 라우트를 매칭하는 방식 |
In, NotIn, Equal, NotEqual |
string |
|
source |
라우트의 출처를 나타내는 표시 |
RemotePeers는 다른 BGP 피어로부터 학습한 모든 라우트를 의미해요 |
string |
|
interface |
인터페이스 이름을 매칭할 문자열 |
인터페이스를 매칭할 유효한 패턴이에요. "*"를 와일드카드로 쓸 수 있어요. |
string |
|
peerType |
이 규칙을 지정한 BGP 피어 타입과 주고받는 라우트에만 적용해요. 비워 두면 모든 피어에 적용돼요. |
eBGP, iBGP |
string |
|
priority |
지정한 우선순위(메트릭)를 가진 라우트에만 이 규칙을 적용해요. FelixConfiguration의 ...RoutePriority 필드와 같은 단위를 써요. |
1-2147483646 |
integer |
|
communities |
지정한 BGP 커뮤니티를 실은 라우트에만 이 규칙을 적용해요. |
BGP 필터 커뮤니티 매치를 참고하세요. |
object |
|
action |
이 규칙에 대해 취할 동작 |
Accept 또는 Reject |
string |
|
operations |
규칙이 매칭됐을 때 적용할 라우트 수정 작업의 순서 목록이에요. action이 Accept일 때만 유효해요. 최대 10개의 동작이 가능해요. |
BGP 필터 오퍼레이션을 참고하세요. |
list |
|
BGP 필터 프리픽스 길이 (BGP Filter Prefix Length)
| 필드 |
설명 |
허용 값 |
스키마 |
기본값 |
min |
매칭할 가장 작은 마스크 크기(기본값 0) |
0부터 ipv4/6 최댓값(32, 128) 사이의 유효한 정수 |
int |
|
max |
매칭할 가장 큰 마스크 크기(기본값 32/128) |
1부터 ipv4/6 최댓값(32, 128) 사이의 유효한 정수 |
int |
|
| 필드 |
설명 |
허용 값 |
스키마 |
values |
매칭에 사용할 BGP 커뮤니티 값의 목록이에요. 라우트는 이 커뮤니티 중 최소 하나를 실고 있어야 해요. |
표준(aa:nn) 또는 대형(aa:nn:mm) 커뮤니티 값 |
list of string |
BGP 필터 오퍼레이션 (BGP Filter Operation)
각 오퍼레이션은 다음 필드 중 정확히 하나만 설정된 객체예요.
| 필드 |
설명 |
허용 값 |
스키마 |
value |
추가할 BGP 커뮤니티 값이에요. |
표준(aa:nn) 또는 대형(aa:nn:mm) 커뮤니티 값 |
string |
BGP 필터 AS 경로 앞붙이기 (BGP Filter Prepend AS Path)
| 필드 |
설명 |
허용 값 |
스키마 |
prefix |
라우트의 AS 경로 앞에 붙일 AS 번호의 나열이에요. 결과 경로는 나열된 순서대로 이 AS 번호들로 시작해요(예: [65000, 65001]은 65000 65001 <원본>이 돼요). |
유효한 AS 번호 1-10개의 목록 |
list of integer |
BGP 필터 우선순위 설정 (BGP Filter Set Priority)
| 필드 |
설명 |
허용 값 |
스키마 |
value |
라우트에 설정할 우선순위(메트릭) 값이에요. FelixConfiguration의 RoutePriority 필드와 같은 단위를 써요. |
1-2147483646 |
integer |
더 알아보기 (Learn more)
BGPFilter 규칙은 순서대로 평가되고 첫 매칭에서 동작이 실행된다는 점, 그리고 매칭이 없으면 Accept가 기본이라는 점만 기억하면 실수를 크게 줄일 수 있어요. 필터를 실제로 적용하려면 BGPPeer의 filters 목록에 이름을 넣는 것도 잊지 마세요. 라우트를 세밀하게 제어해야 하는 BGP 피어링 환경에서 활용해보세요.