BGP 컨트롤 플레인 트러블슈팅 가이드

BGP 컨트롤 플레인 트러블슈팅 가이드 (BGP Control Plane Troubleshooting Guide)

BGP 컨트롤 플레인을 구성할 때 흔히 겪는 문제와 그 해결 방법을 정리한 문서예요. 피어링이 성립되지 않거나 특정 리소스가 적용되지 않는 상황을 하나씩 따라가며 진단해 볼게요.

출처: BGP Control Plane Troubleshooting Guide

본문

이 문서는 BGP 컨트롤 플레인을 구성할 때 겪는 전형적인 문제들과 그 해결 방법을 정리해요.

Cilium BGP 리소스가 적용됐음에도 BGP 피어링이 성립되지 않음

주어진 노드에 대해 CiliumBGPNodeConfig 리소스가 생성됐는지 확인하세요. CiliumBGPNodeConfig 리소스가 없다면 Cilium operator 로그에서 오류가 있는지 확인해 보세요.

BGP 상태가 established 가 아니라면 nodeSelector 구성과 피어링 구성을 확인하세요.

또 다른 가능성은 CiliumBGPClusterConfig 의 nodeSelector 가 라벨 누락이나 잘못 구성된 셀렉터 때문에 어떤 노드와도 일치하지 않는 경우예요. 이 경우 다음 상태 조건이 설정됩니다:

status:
  conditions:
  - lastTransitionTime: "2026-06-16T12:54:24Z"
    message: No node matches spec.nodeSelector
    observedGeneration: 2
    reason: MatchingNodeUnavailable
    status: "True"
    type: cilium.io/NoMatchingNode

CiliumBGPClusterConfig가 노드를 선택했지만 BGP 피어가 성립되지 않음

피어 라우터나 Cilium의 로그를 참조해 원인을 파악할 수 있어요. BGP 컨트롤 플레인이 기록하는 오류에는 subsys=bgp-control-plane 라는 필드가 있는데, 이를 사용해 BGP 컨트롤 플레인 특유의 오류를 필터링할 수 있습니다:

$ kubectl -n <your namespace> <cilium pod running on the target node> logs | grep bgp-control-plane
...
level=warning msg="sent notification" Data="as number mismatch expected 65003, received 65000" Key=10.0.1.1 Topic=Peer asn=65001 component=gobgp.BgpServerInstance subsys=bgp-control-plane

위 예시에서 볼 수 있듯이, 구성된 peerASN 과 피어의 실제 ASN이 일치하지 않아 BGP 세션이 성립되지 않았습니다.

BGP 피어링이 성립되지 않는 이유는 다양할 수 있어요. BGP 능력(capability) 불일치나 잘못된 피어 IP 주소 같은 경우죠. BGP 계층 오류는 로그에 나타날 가능성이 높지만, 피어 IP에 대한 연결성 부족이나 eBGP 피어가 1홉 이상 떨어진 경우 같은 저수준 오류는 로그에 반영되지 않을 수 있어요. 이런 경우 WireShark 나 tcpdump 같은 도구를 사용하는 것이 효과적입니다.

추가한 새 CiliumBGPClusterConfig가 동작하지 않음

여러 CiliumBGPClusterConfig 리소스는 nodeSelector 필드에 기반해 같은 노드를 선택할 수 없습니다. 이런 경우 Cilium operator는 추가 CiliumBGPClusterConfig 가 CiliumBGPNodeConfig 리소스를 생성하는 것을 거부해요. 이를 알리기 위해 CiliumBGPClusterConfig 에 다음 상태 조건이 설정됩니다:

status:
  conditions:
  - lastTransitionTime: "2026-06-16T12:55:24Z"
    message: 'Selecting the same node(s) with ClusterConfig(s): [tor-control-plane]'
    observedGeneration: 1
    reason: ClusterConfigConflict
    status: "True"
    type: cilium.io/ConflictingClusterConfig

CiliumBGPPeerConfig가 적용되지 않음

CiliumBGPPeerConfig 가 적용되지 않는다면, peerConfigRef 에 오타 같은 잘못된 구성이 있어 참조가 유효하지 않을 수 있어요. 참조된 CiliumBGPPeerConfig 를 찾지 못하면 다음 상태 조건이 설정됩니다:

status:
  conditions:
  - lastTransitionTime: "2026-06-16T12:57:47Z"
    message: 'Referenced CiliumBGPPeerConfig(s) are missing: [peer-config-1]'
    observedGeneration: 1
    reason: PeerConfigsMissing
    status: "True"
    type: cilium.io/MissingPeerConfigs

더 알아보기 (Learn more)