
인그레스, 왜 도입했을까요?
마이크로서비스 아키텍처(MSA)를 운영하다 보면 어느 순간 당황스러운 상황을 마주하게 돼요. 서비스는 계속 늘어나는데, 각 서비스마다 개별적인 LoadBalancer를 할당하고 있다면 어떨까요? 클라우드 비용 청구서를 보는 순간 눈이 휘둥그레질지도 몰라요. 매번 새로운 IP와 도메인을 관리하는 것도 엄청난 운영 부담이죠.
저희 팀도 비슷한 문제를 겪었어요. 처음에는 서비스마다 단순하게 NodePort나 LoadBalancer 타입을 사용해 외부로 노출했어요. 하지만 서비스가 20개를 넘어가자 관리 포인트가 감당할 수 없을 만큼 커졌고, 네트워크 설정이 꼬이면서 장애가 빈번하게 발생했죠. 비용은 치솟고 관리는 불가능해지는 임계점에 도달한 거예요.
그때 구원투수처럼 등장한 것이 바로 인그레스(Ingress)였어요. 하나의 진입점을 만들고, 도메인이나 경로(Path)에 따라 트래픽을 적절한 서비스로 배분해 주는 이 기능 덕분에 운영 환경이 완전히 달라졌거든요. 단순히 기술을 도입하는 것을 넘어, 어떻게 구성하고 어떤 부분을 주의해야 하는지가 훨씬 더 중요하다는 사실을 깨달았어요.
서비스 규모가 커지며 겪은 혼란
초기 단계에서는 서비스가 몇 개 없으니 문제가 보이지 않았어요. 하지만 트래픽이 늘어나고 배포 주기가 빨라지면서 문제가 수면 위로 올라왔죠. 새로운 서비스를 배포할 때마다 클라우드 설정에 들어가서 로드밸런서를 생성하고, DNS를 업데이트하는 과정은 너무나 번거로웠어요. 개발자가 직접 네트워크 설정을 만지다 보니 실수도 잦아졌고, 잘못된 설정 하나가 전체 서비스의 접속 불능 상태를 만들기도 했어요.
인그레스가 가져온 변화
인그레스를 도입하면서 가장 먼저 해결된 것은 비용 절감과 관리의 단일화였어요. 여러 개의 로드밸런서를 하나로 통합하고, 인그레스 컨트롤러가 뒤에 있는 여러 서비스로 트래픽을 뿌려주는 구조를 갖추게 되었죠. 이제는 도메인 주소 하나만 잘 관리하면, 내부의 수십 개 서비스는 경로 설정만으로 아주 깔끔하게 제어할 수 있게 되었어요.
이 글에서 다루는 내용
- 인그레스 도입 전 반드시 검토해야 할 핵심 기준
- 실제 운영 환경에서의 단계별 구축 프로세스
- 설정 과정에서 반드시 마주치는 트러블슈팅 사례
- 효율적인 트래픽 관리를 위한 최적화 노하우
인그레스 도입 전 꼭 확인해야 할 사항
인그레스를 설치하기 전에 무작정 명령어를 입력하는 건 위험해요. 우리 서비스의 트래픽 성격이 어떤지, 그리고 어떤 컨트롤러가 우리 팀의 운영 역량에 맞는지 먼저 판단해야 하거든요. 준비되지 않은 도입은 오히려 관리 복잡도만 높이는 결과를 초래할 수 있어요.
핵심 개념 정리
먼저 용어부터 명확히 짚고 넘어갈게요. 인그레스(Ingress)는 외부 요청을 클러스터 내부 서비스로 전달하는 규칙(Rule)들의 집합이에요. 하지만 규칙만 있다고 트래픽이 흐르지는 않아요. 이 규칙을 실제로 읽고 트래픽을 넘겨주는 엔진이 필요한데, 그것이 바로 인그레스 컨트롤러(Ingress Controller)예요. 흔히 사용하는 Nginx Ingress Controller가 대표적인 예시죠.
컨트롤러 선택 기준 비교
시중에는 다양한 컨트롤러가 있어요. 무조건 유명한 것을 쓰기보다 우리 환경에 맞는 것을 골라야 해요. 아래 표를 통해 주요 컨트롤러의 특징을 비교해 보세요.
| 구분 | Nginx Ingress | Kong | Traefik |
|---|---|---|---|
| 주요 특징 | 가장 대중적이고 레퍼런스가 많음 | API 게이트웨이 기능에 특화됨 | 클라우드 네이티브 및 동적 구성 강점 |
| 추천 대상 | 일반적인 웹 서비스 운영 팀 | 복잡한 인증/인가가 필요한 API 팀 | 마이크로서비스 규모가 매우 큰 환경 |
| 학습 난이도 | 낮음 | 높음 | 중간 |
사전 체크리스트
설치를 시작하기 전에 다음 사항들이 준비되었는지 확인해 보세요. 이 과정이 생략되면 설치 도중 멈추거나, 설치 후에도 접속이 안 되는 상황이 발생할 수 있어요.
- 도메인 소유권: 외부에서 접근할 도메인이 준비되어 있고 DNS 설정이 가능한가요?
- SSL 인증서 발급 체계: Let’s Encrypt 같은 자동화된 인증서 발급 도구(Cert-manager)를 사용할 준비가 되었나요?
- 클라우드 환경 권한: 컨트롤러가 로드밸런서를 자동으로 생성할 수 있는 IAM 권한을 가지고 있나요?
- 리소스 용량: 인그레스 컨트롤러 자체가 사용할 CPU와 메모리 여유가 충분한가요?
인그레스는 단순히 통로 역할만 하는 게 아니라, 인증(Auth), 속도 제한(Rate Limiting), 로깅 등 다양한 부가 기능을 설정(Annotation)을 통해 구현할 수 있어요.
인그레스 구축 및 운영 단계별 실전 가이드
이제 본격적으로 인그레스를 구축하는 과정을 살펴볼게요. 단순히 설치 명령어를 실행하는 것이 아니라, 실제 서비스에 적용하기 위해 고려해야 할 세세한 설정값들이 중요해요. 저희가 실무에서 진행했던 흐름을 따라가 보세요.
STEP 1. 인그레스 컨트롤러 설치 및 기초 설정
저희는 가장 범용성이 높은 Nginx Ingress Controller를 선택했어요. 설치는 가급적 Helm을 사용하는 것을 추천해요. Helm을 사용하면 복잡한 설정값들을 values.yaml 파일 하나로 관리할 수 있어 훨씬 편리하거든요.
설치할 때 가장 주의해야 할 점은 컨트롤러가 사용할 Namespace를 별도로 지정하는 거예요. 보통 ingress-nginx라는 이름의 네임스페이스를 만들어서 관리하죠. 또한, 클라우드 환경이라면 컨트롤러가 생성할 로드밸런서의 타입(Type)이 LoadBalancer로 되어 있는지 꼭 확인해야 해요. 이 과정이 끝나면 클라우드 콘솔에서 외부 IP(External IP)가 할당되는 것을 볼 수 있어요. 이 IP가 바로 우리 서비스의 대문이 될 거예요.
STEP 2. 도메인 기반 라우팅과 경로 설정
IP만으로는 서비스를 운영할 수 없죠. 이제 도메인을 연결해야 해요. 예를 들어, 메인 서비스는 example.com으로, API 서비스는 example.com/api로 연결하고 싶다면 인그레스 설정 파일(YAML)에 규칙을 정의해야 해요.
이때 경로(Path) 설정 방식을 신중하게 결정해야 해요. Prefix 방식을 사용할지, 아니면 정확히 일치하는 Exact 방식을 사용할지에 따라 트래픽이 전달되는 범위가 달라지거든요. 만약 API 서비스를 위해 /api 경로를 설정했다면, 해당 서비스 내부의 애플리케이션도 `/api`로 시작하는 경로를 인식할 수 있도록 설계되어 있거나, 인그레스에서 Rewrite Target 설정을 통해 경로를 재작성해 주어야 해요. 이 부분을 놓치면 404 에러를 마주하게 됩니다.
STEP 3. SSL/TLS 인증서 적용 및 자동화
요즘 보안은 선택이 아닌 필수죠. 모든 트래픽은 HTTPS로 암호화되어야 해요. 하지만 매번 인증서를 수동으로 발급받고 갱신하는 건 너무나 고통스러운 일이에요. 그래서 저희는 Cert-manager를 함께 도입했어요.
Cert-manager를 설치하고 Let’s Encrypt를 연동해 두면, 인그레스 설정에 tls 섹션만 추가해도 인증서 발급부터 만료 전 자동 갱신까지 알아서 척척 진행돼요. 인증서 만료로 인한 서비스 장애는 정말 흔한 사고 중 하나이니, 반드시 자동화 체계를 구축해 두시길 권장해요. 인증서가 정상적으로 적용되면 브라우저 주소창에 자물쇠 아이콘이 뜨는 것을 확인할 수 있어요.
STEP 4. 카나리(Canary) 배포를 위한 트래픽 제어
인그레스의 진짜 강력한 기능 중 하나는 트래픽을 미세하게 조정할 수 있다는 점이에요. 새로운 버전의 서비스를 배포할 때, 모든 사용자에게 한꺼번에 노출하는 건 너무 위험하죠. 이때 인그레스의 Canary 기능을 활용하면 아주 우아하게 배포할 수 있어요.
예를 들어, 기존 버전(v1)에 90%의 트래픽을 보내고, 새로 만든 버전(v2)에 10%만 보내도록 설정할 수 있어요. 인그레스 설정에 nginx.ingress.kubernetes.io/canary: "true"와 같은 Annotation을 추가하기만 하면 돼요. 이렇게 10%의 트래픽을 받는 사용자들의 에러 로그를 모니터링하면서, 문제가 없다면 서서히 v2의 비중을 높여가는 방식이죠. 이 방식은 배포에 대한 심리적 압박감을 획기적으로 줄여주었어요.
STEP 5. 운영 지표 모니터링 및 최적화
설치만 했다고 끝이 아니에요. 인그레스가 얼마나 많은 트래픽을 처리하고 있는지, 에러율은 어떤지 실시간으로 봐야 해요. 저희는 Prometheus와 Grafana를 연결하여 인그레스 컨트롤러의 메트릭을 시각화했어요.
특히 눈여겨봐야 할 지표는 요청 처리 시간(Latency)과 HTTP 에러 코드(4xx, 5xx)예요. 특정 경로에서 갑자기 502 Bad Gateway 에러가 급증한다면, 인그레스 문제가 아니라 뒤에 있는 애플리케이션 서비스나 네트워크 통신에 문제가 생겼음을 즉시 알 수 있죠. 이렇게 모니터링 체계가 갖춰져야 비로소 ‘운영’을 하고 있다고 말할 수 있어요.
트래픽이 갑자기 몰릴 때를 대비해 인그레스 컨트롤러의 오토스케일링(HPA) 설정도 잊지 마세요. 컨트롤러 자체가 병목 지점이 되면 안 되니까요.
자주 하는 실수와 해결법
인그레스를 처음 운영하다 보면 예상치 못한 에러 메시지 때문에 밤을 지새우는 경우가 많아요. 실무에서 저희가 직접 겪고 해결했던 사례들을 정리했으니, 비슷한 상황이라면 꼭 참고해 보세요.
- ❌ 404 Not Found 에러가 발생해요
→ 왜 발생하는가: 인그레스의path설정과 실제 서비스의 경로가 일치하지 않거나,pathType설정을 잘못했기 때문이에요.
→ ✅ 해결법:pathType: Prefix로 설정되어 있는지 확인하고, 서비스가 요구하는 경로와 인그레스의 경로가 정확히 매칭되는지 검토하세요. - ❌ 413 Request Entity Too Large 에러가 떠요
→ 왜 발생하는가: 클라이언트가 업로드하려는 파일 용량이 인그레스 컨트롤러의 기본 제한값보다 크기 때문이에요.
→ ✅ 해결법: 인그레스 설정의 Annotation에nginx.ingress.kubernetes.io/proxy-body-size: "50m"처럼 허용 용량을 명시해 주세요. - ❌ 502 Bad Gateway 에러가 반복돼요
→ 왜 발생하는가: 인그레스 컨트롤러가 뒤에 있는 Pod(애플리케이션)로 연결을 시도했지만, Pod가 응답하지 않거나 연결이 끊긴 상태예요.
→ ✅ 해결법: 서비스의selector가 실제 Pod의 라벨과 일치하는지, 그리고 애플리케이션이 정상적으로 실행 중인지 확인하세요. - ❌ SSL 인증서가 작동하지 않아요
→ 왜 발생하는가: 인그레스 설정에tls섹션이 누락되었거나, Cert-manager가 인증서를 제대로 발급받지 못한 상태예요.
→ ✅ 해결법:kubectl get certificate명령어로 인증서 상태를 확인하고, Challenge 과정에서 문제가 없는지 체크하세요. - ❌ 설정(Annotation)을 넣었는데 반영이 안 돼요
→ 왜 발생하는가: 오타가 있거나, 사용 중인 인그레스 컨트롤러가 해당 Annotation을 지원하지 않는 버전일 수 있어요.
→ ✅ 해결법: 공식 문서를 통해 지원되는 정확한 키 이름을 확인하고, 설정 변경 후 컨트롤러의 로그를 살펴 보세요.
자주 묻는 질문
Q. 인그레스와 로드밸런서(LoadBalancer 타입)의 차이가 정확히 뭔가요?
로드밸런서는 클러스터 외부에서 내부로 들어오는 통로 자체를 만드는 것이고, 인그레스는 그 통로 안에서 들어온 트래픽을 어떤 서비스로 보낼지 결정하는 ‘교통 정리원’ 역할을 하는 거예요. 로드밸런서 하나에 인그레스를 올려서 여러 서비스를 관리하는 게 가장 효율적이죠.
Q. Nginx 말고 다른 컨트롤러를 써도 괜찮을까요?
네, 물론이에요. 만약 API 호출에 특화된 복잡한 기능이 필요하다면 Kong을, 클라우드 네이티브한 환경에서 설정 자동화를 극대화하고 싶다면 Traefik을 고려해 보세요. 다만 처음 시작하신다면 자료가 가장 많은 Nginx를 추천해요.
Q. 트래픽이 급증하면 인그레스가 먼저 죽나요?
그럴 수 있어요. 인그레스 컨트롤러도 결국 하나의 Pod이기 때문에 자원을 소모하거든요. 그래서 트래픽 규모에 맞춰 컨트롤러의 복제본(Replica) 수를 늘리거나, CPU/메모리 할당량을 적절히 조절하는 작업이 반드시 필요해요.
Q. 도메인을 연결했는데 접속이 안 돼요. 어디부터 확인해야 하죠?
먼저 DNS 설정이 제대로 전파되었는지 확인하고, 그다음 인그레스의 External IP와 도메인이 연결된 IP가 일치하는지 확인하세요. 그 후 인그레스 컨트롤러의 로그를 살펴보는 것이 가장 빠른 길이에요.
인그레스 운영을 시작하는 여러분께
인그레스는 단순한 네트워크 도구가 아니라, 마이크로서비스를 안전하고 효율적으로 세상에 내보내는 중요한 관문이에요. 처음에는 설정 하나하나가 어렵게 느껴지겠지만, 한 번 제대로 구축해 두면 운영의 차원이 달라지는 것을 경험하실 수 있을 거예요.
- 비용 절감을 위해 LoadBalancer 대신 인그레스를 활용하세요.
- Nginx Ingress Controller로 시작하는 것을 추천해요.
- Cert-manager를 통해 SSL 인증서 관리를 자동화하세요.
- Annotation을 적극 활용하여 세밀한 트래픽 제어를 구현하세요.
- Prometheus/Grafana로 실시간 모니터링 체계를 구축하세요.
- Canary 배포로 서비스 중단 없는 안전한 배포를 실천하세요.
오늘 배운 내용이 실제 실무에 도움이 되기를 진심으로 바라요. 처음부터 완벽할 수는 없으니, 작은 서비스부터 하나씩 적용하며 경험을 쌓아보세요.
실행을 위한 액션 플랜
오늘 바로 할 일: 현재 우리 서비스의 로드밸런서 개수와 비용을 확인하고, 인그레스 도입 시 절감 가능한 비용을 계산해 보세요.
이번 주 할 일: 테스트 클러스터에 Helm을 이용해 Nginx Ingress Controller를 설치하고, 간단한 웹 페이지를 도메인 기반으로 연결해 보세요.
실행 직전 할 일: SSL 인증서 자동화를 위한 Cert-manager 설치 가이드를 미리 숙지해 두세요.
실습 환경에서 직접 적용해 보다가 막히는 부분이 있다면, 주저하지 말고 댓글로 질문을 남겨 주세요. 함께 고민해 드릴게요!
관련해서 더 깊이 알고 싶다면 쿠버네티스 인그레스 기본 개념 글이나 클러스터 구축 입문 글을 함께 읽어보시는 것을 추천해요.