Kubernetes NodePort 환경에서 NGINX Gateway Fabric 외부 통신 구조

반응형
Kubernetes NodePort 환경에서 NGINX Gateway Fabric 외부 통신 구조

Kubernetes NodePort 환경에서 NGINX Gateway Fabric 외부 통신 구조

Kubernetes에서 NGINX Gateway Fabric을 사용하고 외부 노출 방식을 NodePort로 구성했다면, 외부 사용자가 Gateway의 80/443 포트에 직접 접근하는 구조가 아니다.

외부 트래픽은 먼저 Kubernetes Worker Node의 IP와 NodePort로 들어온 뒤, Kubernetes Service를 통해 NGINX Gateway Fabric으로 전달된다.

1. 전체 통신 구조

외부 사용자 / 외부 서버
        │
        │ HTTP / HTTPS
        ▼
Kubernetes Worker Node
(Node IP)
        │
        │ NodePort
        │ 예: 30080 / 30443
        ▼
NGINX Gateway Fabric Service
        │
        ▼
Gateway
 ├─ HTTP  : 80
 └─ HTTPS : 443
        │
        ▼
HTTPRoute
        │
        ▼
Application Service
        │
        ▼
Pod

따라서 담당자가 말한 “외부 통신은 Host → Kubernetes 아니냐?”는 표현은 외부 트래픽이 Pod나 Gateway의 80/443으로 직접 들어오는 것이 아니라, 먼저 Kubernetes Node를 통해 들어오는 구조를 의미한다고 볼 수 있다.

2. 실제 포트 흐름

구간 HTTP HTTPS
외부 → Worker Node NodeIP:30080 NodeIP:30443
Gateway Listener 80 443
Gateway → Backend HTTPRoute 설정에 따라 Service로 전달

예를 들어 NodePort가 각각 30080과 30443으로 지정되었다면 실제 접근 흐름은 다음과 같다.

외부 → Worker Node IP:30080 → Gateway HTTP:80
외부 → Worker Node IP:30443 → Gateway HTTPS:443

3. Gateway의 80/443과 NodePort의 차이

여기서 가장 헷갈리기 쉬운 부분은 Gateway Listener 포트와 외부 접근 포트가 서로 다를 수 있다는 점이다.

Gateway Listener
HTTP  : 80
HTTPS : 443

외부 접근
HTTP  : Worker Node IP:30080
HTTPS : Worker Node IP:30443

Gateway API에서는 Gateway 리소스의 Listener에 HTTP 80, HTTPS 443 등을 정의한다. 하지만 Service가 NodePort 방식이라면 외부 네트워크에서 실제로 접근하는 대상은 Worker Node IP + NodePort가 된다.

4. 방화벽은 어디를 열어야 할까?

NodePort 구조라면 외부 방화벽 정책 역시 Worker Node의 NodePort를 기준으로 확인해야 한다.

Source
외부 서버 / 외부 사용자망

Destination
Kubernetes Worker Node IP

Port
TCP 30080
TCP 30443

즉 외부 방화벽에서 Gateway Controller의 관리 포트를 개방하는 것이 아니라, 외부 트래픽을 받는 Worker Node의 NodePort를 개방하는 방식이다.

5. 최종 정리

[외부]
   │
   │ TCP 30080 / 30443
   ▼
[Worker Node IP]
   │
   │ NodePort
   ▼
[NGINX Gateway Fabric Service]
   │
   ▼
[Gateway]
 HTTP : 80
 HTTPS: 443
   │
   ▼
[HTTPRoute]
   │
   ▼
[Service]
   │
   ▼
[Pod]

따라서 NodePort 환경에서는 “외부 → Kubernetes Host(Node) → NGINX Gateway Fabric → Service → Pod” 구조로 이해하면 된다.

핵심은 Gateway에는 80/443 Listener를 설정하지만 외부에서 접근할 때는 Worker Node의 NodePort를 사용한다는 점이다.

반응형