누가 세션을 열고, Pod CIDR은 어떻게 도달하며, Gateway는 언제 쓰는가
100.64.0.0/10) 범위
eks)와 Kubernetes API endpoint는 별개입니다.hybrid_vxlan0, VNI 2, UDP 8472 → hybrid node IPaffinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: eks.amazonaws.com/compute-type
operator: NotIn
values:
- hybrid
hybrid_vxlan0| 비교 항목 | static route | Cilium BGP v2 | Gateway |
|---|---|---|---|
| Pod CIDR 도달 방법 | 온프렘 라우터에 node별 prefix를 수동 등록 | Cilium이 Pod CIDR을 라우터에 광고 | pod CIDR당 VPC route 1건 → leader ENI + VXLAN |
| 온프렘 라우터 변경 | 필요 (route 유지, drift 추적) | 필요 (peering, ASN, prefix filter) | Pod CIDR route는 불필요 (node IP, UDP 8472은 필요) |
| CNI 제약 | 지원되는 routable Pod 설계 | Cilium BGP Control Plane | AWS Cilium VTEP + l7Proxy=false |
| HA / 처리량 | 네트워크 팀 설계, 라우터/링크 한계 | 네트워크 팀 설계, 라우터/링크 한계 | Lease active-standby, 활성 Gateway 1대 한계 |
| 정리(제거) | 소유한 route 정리 | 소유한 route/peering 정리 | Helm 제거해도 VPC route는 남음 |
l7Proxy=false 제약과 추가 hop을 수용할 수 있다면hybrid 노드를 선택해 라우터와 peering (localASN = Cilium node, peerASN = 온프렘 라우터)
timer와 graceful restart, 광고 selector 연결
Pod CIDR만 광고 (Service, LB IP는 별도 설계)
Helm values로 BGP Control Plane 활성화 후 상태 확인
l7Proxy=false 필요 (Cilium Ingress/Gateway API/L7 policy와 같은 설치에서 충돌)hybrid_vxlan0, VNI 2CiliumVTEPConfig hybrid-gateway(tunnelEndpoint, cidr, mac)를 갱신 → Cilium이 VPC CIDR 목적지를 VXLAN으로 leader에 전송CiliumVTEPConfigAuto Mode NodeClass의 source/dest check 해제 (필드 발췌)
NodePool 쪽은 Gateway 노드에 label을 붙입니다 (chart nodeLabel과 일치)
NodePool은 label hybrid-gateway-node: "true"와 taint hybrid-gateway-node:NoSchedule을 사용합니다(전체 manifest는 AWS getting-started 문서). 관리형/자체 관리 노드는 primary ENI source/dest check를 별도로 끄고 autoMode.enabled=false
SNAT_EXCLUDE_CIDRS는 기존 제외 범위와 모든 hybrid Pod CIDR의 합집합입니다. Auto Mode는 aws-node DaemonSet이 없고, serviceAccount.annotations는 1.0.2에서 무시됩니다.
AWS Cilium 최소 버전: 1.17.13-1, 1.18.8-1, 1.19.2-1. Cilium minor를 바꾸는 업그레이드에서는 --reuse-values를 주의하세요.
메트릭 (포트 10080 /metrics) | 의미 / 쓰는 법 |
|---|---|
hybrid_gateway_leader_is_active | replica의 leader 여부. sum()이 1이어야 하며 route 성공의 증거는 아님 |
hybrid_gateway_hybrid_nodes_configured | replica별 로컬 구성 노드 수 (leader+standby 합산 금지) |
hybrid_gateway_vxlan_{tx,rx}_{bytes,packets}_total | Counter, rate()로 처리량 확인 |
hybrid_gateway_aws_route_table_update_errors_total | Counter, increase(…[5m])로 최근 실패만 판단 |
/healthz, /readyz. chart는 Service, ServiceMonitor, PDB를 만들지 않으므로 직접 구성하고, readiness만으로 forwarding 성공을 판단하지 마세요.l7Proxy=false는 Ingress/Gateway API/L7 policy와 같은 설치에서 충돌hybrid-gateway, Pod Identity association, 전용 capacity는 IaC 소유자가 정리| Flow | 포트 | 시작 주체 |
|---|---|---|
| Node/Pod → Kubernetes API | TCP 443 (실제 endpoint) | 온프렘 |
| CP ENI → kubelet | TCP 10250 | AWS (inbound) |
| CP → webhook/aggregated API Pod | 실제 설정한 TCP port | AWS (inbound) |
| DNS client ↔ 실제 resolver | UDP/TCP 53 | 구성별 |
| hybrid 노드 간 Cilium VXLAN | UDP 8472 (Geneve 선택 시 UDP 6081) | 노드 |
| Cilium health | TCP 4240 (+ICMP) | 노드 |
10.0.0.0/8 등)이나 인증 없는 kubelet 10255는 열지 마세요.| Flow | 포트 | 비고 |
|---|---|---|
| BGP node ↔ router | TCP 179 | 설정한 active/passive peer 기준, BGP 사용 시 |
| CP/Cloud → hybrid Pod | 실제 앱, webhook port | Pod CIDR route + return path 필요 |
| static route | (포트 없음) | node별 prefix → node IP 수동 유지 |
| Flow | 포트 | 비고 |
|---|---|---|
| Gateway 노드 ↔ hybrid 노드 | UDP 8472 양방향 | SG, NACL, 온프렘 방화벽. Gateway 노드 private IP (EIP 아님), leader/standby 후보, 교체 노드 모두 |
| Cloud workload ↔ hybrid Pod | 실제 앱 port | 반환 트래픽 포함 |
| Prometheus → Gateway | TCP 10080 | 승인된 scraper만 |
| health probe | TCP 8088 | /healthz /readyz |