호스트 네트워크 모드

호스트 네트워크 모드 (Host network mode)

호스트 네트워크 모드를 사용하면 호스트 네트워크에서 Cilium Gateway API Gateway를 직접 노출할 수 있어요. LoadBalancer Service를 사용할 수 없는 경우(개발 환경이나 클러스터 외부 로드 밸런서가 있는 환경 등)에 유용해요.

출처: Host network mode

본문

참고

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 리스너 포트를 LoadBalancer Service로 노출해요. 호스트 네트워크 모드를 활성화하면 이 Service가 NodePort Service로 바뀌며, 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)