Nginx Ingress

MONA·2025년 7월 3일

나혼공

목록 보기
80/92

Nginx Ingress

Kubernetes 클러스터 내에서 외부 트래픽을 내부 서비스로 라우팅해주는 Ingress Controller

Ingress

Kubernetes 리소스 중 하나로, 외부 HTTP/HTTPS 요청을 클러스터 내부 서비스로 전달하는 규칙을 정의함

/api로 들어오는 요청을 api-service로, /web 요청을 web-service로 보내도록 설정하는 등

Ingress Controller

Ingress resource를 실제로 처리해주는 컨트롤러

Kubernetes 자체는 Ingress 규칙만 저장하고, 이를 실제로 동작시키는 것은 Ingress Controller가 함

Nginx Ingress Controller

Nginx 기반으로 동작하는 Ingress Controller
클러스터에 배포되면 Ingress 리소스를 감시하며, Nginx 설정을 동적으로 업데이트 함

널리 사용되며 안정적이고, 다양한 설정이 가능하다(TLS, 인증, rate-limit etc)
Helm Chart로 쉽게 설치할 수 있음

구성요소

  • Ingress: 경로와 서비스 매핑 설정
  • Ingress Controller: Ingress 설정을 해석하고 실제 라우팅 처리(Nginx 기반)
  • Service, Pod: 실제 트래픽이 전달될 대상

동작 흐름

  1. 클라이언트가 도메인 or IP로 요청
  2. 해당 요청이 LoadBalancer -> Ingress Controller -> Nginx Ingress Pod로 전달
  3. Ingress 리소스에 따라 적절한 서비스로 라우팅

실습

  1. docker desktop 에서 settings-> Kubernetes -> enable Kubernetes 활성화 후 apply&restart

  1. 동작 확인
kubectl config current-context
kubectl get nodes
  1. Nginx Ingress Controller 설치(Helm)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace \
  --version 4.12.3

버전은 kubernetes 버전을 확인하고 지원하는 Nginx Ingress Controller로 설치하면 된다.

  • client version: 로컬 pc에 설치된 kubectl 클라이언트 버전
  • server version: 실제로 동작 중인 kubernetes 클러스터 버전

설치 중에 이런 에러가 발생했다.

progressDeadlineSeconds: 0으로 설정되어서 Kubernetes에서 거부당함

progressDeadlineSeconds를 명시적으로 설정해줬는데도 같은 문제가 발생해서 그냥 예전 버전으로 깔아줬다.

helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace \
  --version 4.10.0

감사하게도 이 버전은 설치가 되었다.

  1. 설치 후 확인
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx

지금까지

  • docker desktop의 kubernetes를 활성화했고,
  • Helm을 사용해 ingress-nginx를 설치했다.
  • ingress-nginx-controller의 pod와 service가 정상 실행되는 것도 확인함

Ingress Controller 자체는 트래픽을 받을 준비가 되었고, 이제 라우팅 설정을 해야 한다.

해야 할 것

  1. 서비스들(spring boot)을 kubernetes에 배포
  • 각 서비스에 대해 Deployment, ClusterIP(or NodePort) 구성
  1. Ingress 리소스 생성
  • /api/user/** 등으로 들어오는 요청이 각 서비스로 라우팅되도록 Ingress를 설정한다.
profile
고민고민고민

2개의 댓글

comment-user-thumbnail
2025년 7월 3일

일단 개발부터 하기로 했다 !

답글 달기
comment-user-thumbnail
2025년 7월 4일

와 정말 도움이 되었어요!

답글 달기