NGINX Gateway Fabric HTTP 서비스 라우팅 및 HTTPS Termination 구성

NGINX Gateway Fabric 을 활용하여 HTTP 및 HTTPS 서비스를 라우팅하고 SSL/TLS Termination을 구현하는 방법을 다룹니다. Gateway API를 사용하여 HTTP 및 HTTPS 프로토콜의 라우팅 구조를 효율적으로 설정하고, HTTP 요청을 HTTPS로 리다이렉트하는 구성 방식을 단계별로 설명합니다. 이를 통해 안정적이고 보안이 강화된 네트워크 서비스를 제공하는 방법을 알 수 있습니다.

목차

1. 환경 구성
2. NGINX Gatway Fabric : HTTP Service Route
3. NGINX Gatway Fabric : HTTPS Service Route & HTTP to HTTPS Redirect
4. 결론

1. 환경 구성

NGINX Gateway Fabric의 설치는 NGINX Gateway Fabric 설치 문서에서 확인할 수 있습니다.

  • NGINX Gateway Fabric 1.5.1 (Gateway API)
  • NGINX(OSS): 1.27.2

2. NGINX Gatway Fabric : HTTP Service Route

NGINX Gateway Fabric에서 HTTP Service Route를 하는 방법은 Ingress와 다릅니다.

Gateway API가 생기게 되면서 HTTPRoute와 Gateway 리소스를 사용하여 서비스 라우트를 진행할 수 있습니다.

  • Gateway : 서비스와 같은 백엔드에 대한 트래픽 처리, 밸런싱, 분할 등에 사용할 수 있는 네트워크 엔드포인트를 정의합니다. 

Gateway를 구성합니다.

# Gateway.yaml

apiVersion: gateway.networking.k8s.io/v1 # Gateway 리소스의 API 버전을 지정합니다.
kind: Gateway # 클러스터 내에서 HTTP 및 기타 프로토콜 요청을 처리하는 Gateway 리소스를 정의합니다.
metadata:
  name: nginx # Gateway 리소스의 이름을 지정합니다.
  namespace: nginx # Gateway 리소스의 이름을 지정합니다.
spec:
  gatewayClassName: nginx # Gateway API를 NGINX Gateway Fabric로 사용합니다.(설치과정에 포함 되어 있습니다.)
  listeners:
  - name: http # listerners의 이름을 지정합니다.(HTTPRoute parentRefs의 
    port: 80 # 80포트를 수신합니다.
    protocol: HTTP # HTTP 프로토콜을 수신합니다.
  • HTTPRoute : 백엔드 네트워크 엔드포인트로의 HTTP 요청 라우팅 동작을 지정합니다.

HTTPRoute를 구성합니다.

# HTTPRoute.yaml

apiVersion: gateway.networking.k8s.io/v1 # HTTPRoute 리소스의 API 버전을 지정합니다.
kind: HTTPRoute # HTTP 요청을 라우팅하는 리소스입니다.
metadata:
  name: nginx-route # HTTPRoute 리소스의 이름을 지정합니다.
  namespace: nginx # HTTPRoute의 네임스페이스를 지정합니다.
spec:
  parentRefs:
  - name: nginx # Gateway의 리소스 이름을 명시합니다.
  hostnames: 
  - "example.com" # 지정된 호스트로 들어오는 요청을 처리합니다.
  rules:
  - matches:
    - path:
        type: PathPrefix # Path 기반 라우팅을 진행합니다.
        value: / # "/" 경로를 매칭합니다
    backendRefs:
    - name: nginx-svc #요청을 라우팅할 대상 서비스의 이름을 지정합니다.
      port: 80 # 서비스에 지정된 Port를 지정합니다.

위의 구성들을 추가한 후 각각의 리소스를 확인합니다.

위와 같이 구성한 후 NGINX Gateway Fabric Service로 접근합니다.

NGINX Gateway Fabric으로 Service를 라우트하여 보여주는 것을 확인할 수 있습니다.

3. NGINX Gatway Fabric : HTTPS Service Route & HTTP to HTTPS Redirect

NGINX Gateway Fabric에서 HTTPS Service Route를 하는 방법은 아래와 같습니다.

먼저 사용 할 SSL/TLS 인증서를 Secret으로 생성합니다.

이전에 생성했었던 Gateway 구성에서 HTTPS의 포트와 SSL/TLS Secret을 추가합니다.

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: nginx 
  namespace: nginx
spec:
  gatewayClassName: nginx
  listeners:
  - name: http
    port: 80
    protocol: HTTP
  - name: https 
    port: 443 # HTTPS Port를 지정합니다.
    protocol: HTTPS # HTTPS 프로토콜을 사용합니다.
    tls:
      mode: Terminate # SSL/TLS Termination을 사용합니다.
      certificateRefs: # SSL/TLS 인증서를 적용합니다.
      - kind: Secret # Secret 리소스를 명시합니다.
        name: example.com # 생성 했었던 Secret의 이름을 명시합니다.
        namespace: nginx # 생성 했었던 Secret의 네임 스페이스을 명시합니다.

Gateway를 구성한 후 Route를 변경합니다.

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: nginx-tls-redirect
  namespace: nginx
spec:
  parentRefs:
  - name: nginx # nginx 이름의 Gateway 구성을 사용합니다.
     sectionName: http # nginx Gateway의 http 프로토콜의 Listener 이름을 명시합니다.
  hostnames:
  - "example.com"
  rules:
  - filters: # 요청에 적용되는 filter를 지정합니다.
    - type: RequestRedirect # 요청을 Redirect합니다.
      requestRedirect:
        scheme: https # https 프로토콜으로 Redirect 합니다.
        port: 30903 # NodePort로 서비스를 외부에서 접속하게 변경하였기 때문에 NodePort로 Redirect 되도록 지정하였습니다. 실제 서비스 환경에서는 443 HTTPS 포트를 사용해야합니다.
 
---

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: nginx-route 
  namespace: nginx
spec:
  parentRefs:
  - name: nginx # nginx 이름의 Gateway 구성을 사용합니다.
    sectionName: https # nginx Gateway의 http 프로토콜의 Listener 이름을 명시합니다.
  hostnames:
  - "example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: nginx-svc 
      port: 80

위와 같이 구성하게 된다면 SSL/TLS 인증서 적용과 HTTP에서 HTTPS로 리다이렉트 되는 것을 볼 수 있습니다.

Redirect HTTP Status Code 및 Location Header (443 NodePort : 30903)

HTTPS SSL/TLS 인증서 적용 화면

4. 결론

NGINX Gateway Fabric과 Gateway API를 활용하면 HTTP 및 HTTPS 라우팅과 SSL/TLS Termination을 손쉽게 구성할 수 있습니다. Gateway와 HTTPRoute 리소스의 구조적 설계를 통해 유연하고 확장 가능한 네트워크 환경을 구축할 수 있으며, HTTP에서 HTTPS로 리다이렉트하는 과정을 통해 보안을 강화할 수 있습니다. 이러한 구성을 통해 높은 가용성과 안정성을 갖춘 서비스 배포가 가능해집니다.

NGINX Gateway Fabric에 관련한 더 많은 정보들을 알고싶으시다면 NGINX STORE Kubernetes 카테고리를 참고해주세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required