Ingress NGINX 대안으로 보는 NGINX Gateway Fabric과 Istio 비교

반응형

Ingress NGINX 대안으로 보는 NGINX Gateway Fabric과 Istio 비교

Kubernetes에서 Ingress NGINX을 대체하려고 하면 NGINX Gateway Fabric과 Istio가 자주 후보로 등장한다. 그러나 두 제품은 같은 범위의 도구가 아니다. NGINX Gateway Fabric은 외부에서 들어오는 트래픽을 처리하는 게이트웨이에 가깝고, Istio는 외부 트래픽과 서비스 간 통신까지 관리하는 서비스 메시다.

핵심 결론
외부 HTTP·HTTPS 라우팅과 Gateway API 전환이 목적이라면 NGINX Gateway Fabric이 더 직접적인 선택이다.
서비스 간 mTLS, 워크로드 기반 접근 제어, 내부 트래픽 정책과 분산 관측성이 필요하다면 Istio가 적합하다.
단순한 인그레스 교체만을 위해 Istio를 도입하면 운영 범위가 지나치게 넓어질 수 있다.

두 제품을 같은 인그레스 컨트롤러로 보면 안 되는 이유

기존 Kubernetes Ingress는 호스트와 URL 경로를 기준으로 외부 요청을 내부 Service에 전달한다. 고급 기능은 컨트롤러별 annotation에 의존하는 경우가 많기 때문에 구현체를 교체하면 기존 설정을 그대로 사용할 수 없는 문제가 생긴다.

Gateway API는 이런 한계를 줄이기 위해 역할 분리와 확장성을 강화한 API다. 인프라 담당자는 GatewayClassGateway를 관리하고, 애플리케이션 담당자는 HTTPRoute로 자신의 서비스 라우팅을 정의할 수 있다.

NGINX Gateway Fabric은 Gateway API를 중심으로 외부 진입 트래픽을 관리한다. Istio도 Gateway API를 지원하지만 서비스 간 통신, 보안 정책, 장애 제어와 텔레메트리까지 관리한다.

이름을 구분해야 한다
Kubernetes 커뮤니티의 Ingress NGINX과 NGINX Gateway Fabric은 별개의 프로젝트다.
NGINX Ingress Controller와 NGINX Gateway Fabric도 설치 방식과 지원 API가 다르다.
이전 전에는 현재 사용하는 컨트롤러의 정확한 제품명과 배포 방식을 먼저 확인해야 한다.

NGINX Gateway Fabric의 역할

NGINX Gateway Fabric은 Kubernetes Gateway API 리소스를 감시하고 그 내용을 기반으로 NGINX 데이터 플레인을 구성한다. 주된 역할은 클러스터 외부에서 내부로 들어오는 north-south 트래픽을 처리하는 것이다.

외부 사용자 → LoadBalancer → NGINX Gateway → Kubernetes Service → Pod

주요 장점

  • 기존 인그레스 계층과 역할이 비슷해 전환 목적을 이해하기 쉽다.
  • Gateway API를 사용해 annotation 의존도를 줄일 수 있다.
  • NGINX 프록시 운영 경험을 이어가기 좋다.
  • 호스트, 경로, 헤더 기반 라우팅과 트래픽 분할에 적합하다.
  • 애플리케이션 Pod마다 프록시를 추가하지 않아 구조가 비교적 단순하다.
  • 서비스 메시를 도입하지 않고 외부 진입 계층만 운영할 수 있다.

한계

  • 서비스 간 통신 전체를 관리하는 플랫폼은 아니다.
  • 클러스터 내부 모든 서비스에 자동 mTLS를 적용하는 기능은 핵심 범위가 아니다.
  • 워크로드 신원 기반 내부 접근 제어는 별도 보안 체계가 필요하다.
  • 서비스 호출 관계와 내부 분산 추적은 별도로 구성해야 한다.
  • 기존 Ingress annotation과 Gateway API 기능이 완전히 일대일 대응하지 않을 수 있다.

Istio의 역할

Istio는 Kubernetes 서비스 메시다. 외부에서 들어오는 요청뿐 아니라 서비스 A에서 서비스 B로 이동하는 내부 요청까지 데이터 플레인을 통해 관리할 수 있다.

사이드카 모드에서는 애플리케이션 Pod마다 프록시가 함께 배치된다. ambient 모드에서는 노드 단위 프록시가 기본 통신을 처리하고, L7 정책이 필요한 워크로드에 waypoint 프록시를 추가할 수 있다.

외부 사용자 → Istio Gateway → Service A → Istio 데이터 플레인 → Service B

주요 장점

  • 서비스 간 통신을 mTLS로 암호화하고 워크로드 신원을 확인할 수 있다.
  • 서비스 계정, 네임스페이스, 요청 경로에 따라 접근을 제어할 수 있다.
  • 내부 호출에 재시도, 타임아웃, 카나리와 트래픽 미러링을 적용할 수 있다.
  • 서비스 간 성공률, 지연 시간, 호출 관계를 공통 방식으로 관찰하기 쉽다.
  • 외부 진입과 외부로 나가는 트래픽을 함께 통제할 수 있다.

운영 부담

  • 컨트롤 플레인과 데이터 플레인 구조를 함께 이해해야 한다.
  • 인증서, 정책, 프록시, 네트워크와 텔레메트리까지 운영 범위가 넓다.
  • 잘못된 재시도와 타임아웃 정책이 장애를 확대할 수 있다.
  • 사이드카 또는 ambient 구성에 따른 추가 리소스가 필요하다.
  • 단순한 외부 라우팅만 필요한 환경에는 과도할 수 있다.

핵심 기능 비교

비교 항목 NGINX Gateway Fabric Istio
주요 목적 외부 트래픽을 내부 서비스로 전달 외부 진입과 서비스 간 통신 전체 관리
제품 성격 Gateway API 구현체 서비스 메시 플랫폼
트래픽 범위 North-south 중심 North-south와 east-west
데이터 플레인 NGINX Envoy, ztunnel, waypoint
Ingress 대체 적합성 직접적 가능하지만 범위가 넓음
외부 TLS 종료 지원 지원
서비스 간 자동 mTLS 핵심 기능 아님 핵심 기능
워크로드 기반 접근 제어 별도 구성 필요 세밀한 정책 구성 가능
카나리 배포 외부 유입 트래픽 중심 외부와 내부 호출 모두 가능
재시도와 타임아웃 게이트웨이 구간 중심 서비스 간 요청에도 적용 가능
분산 추적 별도 연동 필요 메시 전체 추적 구성에 유리
운영 난이도 낮음에서 중간 중간에서 높음

보안 기능 비교

외부 HTTPS

외부 사용자가 HTTPS로 접근하고 게이트웨이에서 TLS를 종료하는 요구는 두 제품 모두 처리할 수 있다. 외부 클라이언트와 게이트웨이 사이의 HTTPS만 필요하다면 NGINX Gateway Fabric으로 충분한 경우가 많다.

서비스 간 mTLS

Istio는 내부 워크로드에 인증서를 배포하고 서비스 간 통신을 mTLS로 전환할 수 있다. 애플리케이션마다 인증서 발급과 갱신 기능을 직접 구현하지 않아도 된다는 점이 장점이다.

NGINX Gateway Fabric은 외부 게이트웨이 역할이 중심이다. 클러스터 안의 모든 서비스 사이에 자동으로 워크로드 신원 기반 mTLS를 제공하는 서비스 메시와는 범위가 다르다.

접근 제어

Istio는 호출자의 서비스 계정, 네임스페이스, HTTP 메서드와 요청 경로를 기준으로 접근 정책을 구성할 수 있다. 내부 서비스에 제로 트러스트 정책이 필요한 경우 유리하다.

NGINX Gateway Fabric은 외부 요청의 호스트, 경로와 헤더를 기준으로 라우팅과 필터링을 적용하는 데 적합하다.

트래픽 관리 비교

카나리 배포

NGINX Gateway Fabric은 HTTPRoute에서 여러 백엔드에 가중치를 지정해 외부 요청을 분산할 수 있다. 신규 버전에 10%, 기존 버전에 90%를 전달하는 방식의 배포에 적합하다.

Istio는 외부 요청뿐 아니라 내부 서비스가 특정 버전을 호출하는 비율도 제어할 수 있다. 호출 서비스, 헤더 또는 사용자 조건에 따라 서로 다른 버전을 선택하는 정책에도 유리하다.

재시도와 타임아웃

NGINX Gateway Fabric은 외부 요청이 백엔드에 도달하는 구간을 중심으로 정책을 적용한다. Istio는 서비스 A에서 서비스 B로 이어지는 내부 호출에도 재시도와 타임아웃을 적용할 수 있다.

재시도 설정 주의
장애 상황에서 과도한 재시도는 요청 수를 급격하게 늘릴 수 있다.
결제나 주문처럼 중복 처리 위험이 있는 요청은 멱등성을 먼저 확인해야 한다.
재시도와 타임아웃은 전체 호출 구조를 기준으로 설계해야 한다.

성능과 리소스 사용량

성능은 NGINX와 Envoy 중 어느 프록시가 더 빠른지만으로 결정할 수 없다. TLS, 로그 수준, 메트릭 수집, 필터 수, 라우팅 규칙과 CPU 제한에 따라 결과가 달라진다.

NGINX Gateway Fabric

프록시가 클러스터 진입 지점에 집중되기 때문에 필요한 Pod 수와 리소스를 비교적 쉽게 계산할 수 있다. 애플리케이션 Pod마다 프록시를 추가하지 않는다는 점도 장점이다.

Istio

사이드카 모드에서는 각 Pod에 프록시가 추가되므로 CPU와 메모리 사용량이 증가할 수 있다. ambient 모드는 사이드카 부담을 줄일 수 있지만 ztunnel과 waypoint 운영이 필요하다.

실무 기준으로 보면
외부 게이트웨이 기능만 켠 테스트와 서비스 메시 기능을 모두 켠 테스트는 같은 조건이 아니다.
실제 라우팅, TLS, 로그, 메트릭과 보안 정책을 적용한 상태에서 부하 테스트를 진행해야 한다.

NGINX Gateway Fabric이 적합한 경우

  • 외부 HTTP·HTTPS 라우팅이 핵심 요구사항이다.
  • Ingress annotation을 줄이고 Gateway API로 전환하려고 한다.
  • 서비스 간 자동 mTLS가 필수 요구사항은 아니다.
  • 기존 운영팀이 NGINX 구조와 로그에 익숙하다.
  • 구성 요소와 장애 지점을 단순하게 유지하고 싶다.
  • 인그레스 계층에서 카나리 배포가 필요하다.
  • 서비스 메시 전담 운영 인력이 충분하지 않다.

Istio가 적합한 경우

  • 서비스 간 통신 암호화가 필수다.
  • 서비스 계정과 네임스페이스 단위 접근 제어가 필요하다.
  • 내부 호출까지 포함한 카나리 배포가 필요하다.
  • 서비스별 재시도와 장애 격리 정책을 통일해야 한다.
  • 다수의 마이크로서비스 호출 관계를 관찰해야 한다.
  • 외부로 나가는 트래픽도 통제해야 한다.
  • 서비스 메시를 운영할 전담 인력과 절차가 준비되어 있다.

Ingress NGINX에서 이전할 때 점검할 항목

  1. rewrite, 정규식 경로, 인증, CORS, 요청 크기, 타임아웃과 snippet annotation을 목록화한다.
  2. 표준 HTTPRoute로 옮길 기능과 구현체 전용 확장이 필요한 기능을 구분한다.
  3. 플랫폼 팀과 애플리케이션 팀의 Gateway API 관리 권한을 분리한다.
  4. 새 게이트웨이에 별도 주소를 할당하고 인증서와 라우팅을 먼저 검증한다.
  5. 요청 수, 오류율, P95·P99 지연 시간과 리소스 사용량을 비교한다.
  6. 기존 인그레스로 되돌릴 수 있는 DNS 또는 로드 밸런서 롤백 절차를 준비한다.

최종 정리

NGINX Gateway Fabric과 Istio는 일부 기능이 겹치지만 기본 목적은 다르다. NGINX Gateway Fabric은 Gateway API를 활용해 외부 진입 경로를 현대화하는 도구이고, Istio는 외부 트래픽과 서비스 간 통신을 함께 관리하는 서비스 메시다.

Ingress NGINX 대안을 찾는 상황에서 외부 라우팅만 필요하다면 NGINX Gateway Fabric이 더 단순하고 직접적이다. 내부 통신 보안, 서비스 신원과 분산 관측성이 중요하다면 Istio가 더 적합하다.

선택 기준
인그레스 현대화가 목표라면 NGINX Gateway Fabric을 우선 검토한다.
서비스 간 보안과 내부 트래픽 제어가 목표라면 Istio를 우선 검토한다.
기능 수보다 실제 관리해야 하는 트래픽 범위를 기준으로 선택해야 한다.
반응형