호스트 네트워크 모드
호스트 네트워크 모드 (Host network mode)
호스트 네트워크 모드를 사용하면 호스트 네트워크에서 Cilium Gateway API Gateway를 직접 노출할 수 있어요. LoadBalancer Service를 사용할 수 없는 경우(개발 환경이나 클러스터 외부 로드 밸런서가 있는 환경 등)에 유용해요.
본문
참고
Cilium 1.16+부터 지원돼요
호스트 네트워크 모드를 사용하면 호스트 네트워크에서 Cilium Gateway API Gateway를 직접 노출할 수 있어요. 이는 LoadBalancer Service를 사용할 수 없는 경우(개발 환경이나 클러스터 외부 로드 밸런서가 있는 환경 등)에 유용해요.
참고
- Cilium Gateway API 호스트 네트워크 모드를 활성화하면 LoadBalancer 유형 Service 모드가 자동으로 비활성화돼요. 둘은 상호 배타적이에요.
- 리스너는 모든 인터페이스(IPv4는
0.0.0.0, IPv6는::)에서 노출돼요.- 호스트 네트워크 모드는
TCPRoute와UDPRoute와 호환되지 않아요. 이들의 트래픽은 Envoy를 우회해서 Gateway가 생성한 Service에 직접 도달하는데, 이 Service는 보통 구성된Gateway리스너 포트를LoadBalancerService로 노출해요. 호스트 네트워크 모드를 활성화하면 이 Service가NodePortService로 바뀌며,Gateway리스너에 구성된 포트가 아니라 노드 포트 범위에서 무작위로 할당된 포트를 받게 돼요.
호스트 네트워크 모드는 Helm으로 활성화할 수 있어요:
gatewayAPI:
enabled: true
hostNetwork:
enabled: true
활성화하면 Gateway의 호스트 네트워크 포트는 spec.listeners.port로 지정할 수 있어요. 포트는 Gateway 리소스마다 고유해야 하며, 1023보다 높은 포트 번호를 선택해야 해요 (Bind to privileged port 참고).
경고
잘못 구성하면 포트 충돌이 발생할 수 있다는 점을 유의해주세요. 각 gateway에 대해 Gateway API 리스너가 노출되는 모든 Cilium 노드에서 아직 사용 가능한 고유 포트를 구성하세요.
gateway의 GatewayStatusAddress 필드는 최대 16개의 주소를 가질 수 있어요. 호스트 네트워크 모드가 활성화된 Cilium은 일관성을 위해 노드 주소를 자동으로 정렬해서, 동일한 주소가 선택되도록 보장해요.
특권(privileged) 포트 바인딩 (Bind to privileged port)
기본적으로 Cilium L7 Envoy 프로세스는 out-of-the-box로 Linux 능력(capabilities)이 없어서 특권 포트에서 수신할 수 없어요.
1023 이하의 포트를 선택한다면, Helm 값 envoy.securityContext.capabilities.keepCapNetBindService=true를 구성하고 해당 Cilium Envoy 컨테이너에 NET_BIND_SERVICE 능력을 추가해야 해요 (Helm values로요):
- 독립 DaemonSet 모드:
envoy.securityContext.capabilities.envoy - 임베디드 모드:
securityContext.capabilities.ciliumAgent
호스트 네트워크 모드에서 특권 포트 바인딩을 허용하려면 다음 Helm 값들을 구성해주세요:
gatewayAPI:
enabled: true
hostNetwork:
enabled: true
envoy:
enabled: true
securityContext:
capabilities:
keepCapNetBindService: true
envoy:
# Add NET_BIND_SERVICE to the list (keep the others!)
- NET_BIND_SERVICE
gatewayAPI:
enabled: true
hostNetwork:
enabled: true
envoy:
securityContext:
capabilities:
keepCapNetBindService: true
securityContext:
capabilities:
ciliumAgent:
# Add NET_BIND_SERVICE to the list (keep the others!)
- NET_BIND_SERVICE
노드 부분 집합에 Gateway API 리스너 배포하기 (Deploy Gateway API listeners on subset of nodes)
Cilium Gateway API Envoy 리스너는 노드의 특정 부분 집합에서만 노출할 수 있어요. 이는 호스트 네트워크 모드와 결합해서만 동작하며, Helm values의 노드 레이블 셀렉터로 구성할 수 있어요:
gatewayAPI:
enabled: true
hostNetwork:
enabled: true
nodes:
matchLabels:
role: infra
component: gateway-api
이렇게 하면 구성된 레이블과 일치하는 Cilium 노드에서만 Gateway API Envoy 리스너가 배포돼요. 빈 셀렉터는 모든 노드를 선택하며 모든 Cilium 노드에서 계속 기능을 노출해요.
더 알아보기 (Learn more)
- Cilium Gateway API — Cilium Gateway API 개요 (Reference 섹션의 Host network mode 포함)
- Gateway API 설치 — CRD 설치와 컨트롤러 활성화
- Gateway API (HTTP) — HTTP Gateway 예제