정지용
기술스택 목록
인프라

nginx ingress

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

쿠버네티스 클러스터로 들어오는 HTTP(S) 트래픽을 라우팅하는 nginx 기반 Ingress 컨트롤러

nginx ingress는 쿠버네티스의 Ingress 리소스를 실제로 처리하는 컨트롤러로, nginx를 리버스 프록시 겸 로드밸런서로 사용해 외부 요청을 클러스터 내부 서비스로 라우팅한다. 쿠버네티스 자체는 Ingress라는 라우팅 규칙 명세만 정의할 뿐 이를 실행하는 주체가 없기 때문에, 이를 실제로 동작시키는 컨트롤러가 별도로 필요해 만들어졌다. 도메인/경로 기반 라우팅, TLS 종료, 로드밸런싱 같은 기능을 클러스터 진입점 한 곳에서 공통으로 처리할 수 있게 해준다.

이럴 때 사용합니다

  • 여러 서비스를 도메인/경로 기준으로 하나의 진입점에서 라우팅해야 할 때
  • 클러스터 앞단에서 TLS 종료와 인증서 관리를 일괄 처리하고 싶을 때
  • 커뮤니티 자료와 레퍼런스가 풍부한 검증된 Ingress 컨트롤러가 필요할 때
  • 다른 클라우드 벤더에 종속되지 않는 범용 Ingress 구현이 필요할 때

핵심 개념

Ingress Resource
호스트/경로별로 어떤 서비스로 트래픽을 보낼지 선언하는 쿠버네티스 API 오브젝트다.
Ingress Controller
Ingress 리소스를 감시하다가 그 내용을 실제 프록시(nginx) 설정으로 변환해 반영하는 컨트롤러 컴포넌트다.
Reverse Proxy / Load Balancer
nginx가 수행하는 역할로, 하나의 진입점에서 요청을 받아 여러 백엔드 파드로 분산 전달한다.
TLS Termination
클라이언트와의 HTTPS 연결을 Ingress 단에서 종료하고 내부로는 평문 또는 별도 암호화로 전달하는 방식이다.
Annotation 기반 설정
리다이렉트, 타임아웃, rewrite 규칙 등 표준 Ingress 스펙에 없는 세부 동작을 nginx 전용 annotation으로 확장 설정한다.

기본 Ingress 리소스 정의

api.example.com으로 들어오는 요청을 api-service 서비스로 전달하도록 정의한 Ingress 규칙이다.

YAML
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: api.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: api-service
                port:
                  number: 80

처음 쓸 때 흔한 함정

  • Ingress 리소스만 만들면 끝이 아니라 컨트롤러가 클러스터에 별도로 설치되어 있어야 동작한다
  • 일부 세부 동작(리다이렉트, 타임아웃 등)은 표준 스펙이 아닌 nginx 전용 annotation에 의존한다
  • 여러 Ingress 컨트롤러가 공존할 경우 ingressClassName을 명시하지 않으면 라우팅 충돌이 생길 수 있다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.