안녕하세요, 쿠버네티스 전문가를 꿈꾸는 여러분! 🚀 오늘은 클러스터 외부의 트래픽을 내부 서비스로 연결하는 가장 세련되고 효율적인 방법, Ingress(인그레스)에 대해 알아보겠습니다.
NodePort나 LoadBalancer 서비스만 사용하다 보면, 서비스 하나 추가할 때마다 포트를 열거나 비싼 클라우드 로드밸런서를 새로 생성해야 하는 불편함이 있죠. 마치 호텔 방(Pod)마다 외부로 통하는 문을 따로 내는 것과 같습니다. 비효율적이죠. 🏨
Ingress는 이 문제를 해결해주는 '호텔의 똑똑한 프론트 데스크' 와 같습니다. 단 하나의 외부 출입구(단일 IP 주소)를 통해 모든 손님(트래픽)을 받은 뒤, 손님이 찾는 목적지(서비스)에 따라 정확한 객실(Pod)로 안내하는 역할을 합니다.

🤔 Ingress는 규칙, Ingress Controller는 실행자!
Ingress를 이해하기 위해 가장 중요한 두 가지 개념이 있습니다. 바로 Ingress 리소스와 Ingress Controller입니다. 둘은 항상 함께 움직여야 합니다.
- Ingress 리소스 (The Rules) 📜 Ingress 자체는 우리가 YAML 파일로 작성하는 '라우팅 규칙' 모음입니다. " api.example.com 으로 온 요청은 api-service 로 보내줘" 라거나 " example.com/video 로 온 요청은 video-service 로 보내줘" 와 같은 규칙들을 정의하는 설명서일 뿐, 스스로 트래픽을 처리할 능력은 없습니다.
- Ingress Controller (The Engine) 👮 Ingress Controller는 클러스터 내에서 실행되는 실제 트래픽 처리 엔진입니다. 이 컨트롤러는 Ingress 리소스에 정의된 규칙들을 계속 지켜보다가, 그 규칙에 맞게 실제 트래픽을 받아 해당 서비스로 전달해주는 역할을 합니다. NGINX, Traefik, HAProxy 등 다양한 종류의 Ingress Controller가 있으며, 클러스터에는 이 중 하나가 반드시 설치되어 실행 중이어야 Ingress가 동작합니다.
- CKAD 시험 Tip: 시험 환경에는 이미 Ingress Controller가 설치되어 있다고 가정합니다. 여러분은 Ingress '리소스'를 YAML로 정의하는 방법에만 집중하면 됩니다!
🌐 단일 IP로 여러 서비스를 라우팅하는 마법
Ingress의 가장 큰 장점은 단 하나의 외부 IP 주소(주로 LoadBalancer에 연결된)를 통해 수많은 내부 서비스를 외부에 노출시킬 수 있다는 점입니다. 이때 두 가지 주요 라우팅 방식을 사용합니다.
1. 호스트 기반 라우팅 (Host-based Routing)
요청된 도메인 이름(호스트)을 보고 어떤 서비스로 보낼지 결정하는 방식입니다.
- 언제 사용하나요? user.myservice.com, payment.myservice.com 처럼 여러 하위 도메인을 각각 다른 마이크로서비스로 연결하고 싶을 때 사용합니다.
- YAML 예시:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: host-based-ingress spec: rules: - host: "video.example.com" # video 도메인으로 온 요청은 http: paths: - path: "/" pathType: Prefix backend: service: name: video-service # video-service로 보낸다 port: number: 80 - host: "image.example.com" # image 도메인으로 온 요청은 http: paths: - path: "/" pathType: Prefix backend: service: name: image-service # image-service로 보낸다 port: number: 80
2. 경로 기반 라우팅 (Path-based Routing)
동일한 도메인으로 들어온 요청이라도 URL 경로(Path)에 따라 다른 서비스로 분기하는 방식입니다.
- 언제 사용하나요? myservice.com/api 는 백엔드 서비스로, myservice.com/web 은 프론트엔드 서비스로 보내는 등 단일 도메인 내에서 역할을 분리할 때 매우 유용합니다.
- YAML 예시:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: path-based-ingress spec: rules: - host: "example.com" http: paths: - path: "/video" # /video 경로로 온 요청은 pathType: Prefix backend: service: name: video-service # video-service로 보낸다 port: number: 80 - path: "/image" # /image 경로로 온 요청은 pathType: Prefix backend: service: name: image-service # image-service로 보낸다 port: number: 80
🎉 결론: Ingress로 스마트한 트래픽 관리자 되기
Ingress는 여러 서비스를 효율적으로 외부에 노출하고 관리하기 위한 필수 도구입니다. LoadBalancer 서비스를 서비스마다 생성하는 비용 낭비를 막아주고, URL 구조를 더 깔끔하고 직관적으로 관리할 수 있게 해줍니다.
CKAD 시험을 준비하신다면, 호스트와 경로를 기준으로 Ingress 규칙을 YAML로 능숙하게 작성하는 연습을 충분히 해두시는 것이 중요합니다. Ingress를 통해 복잡한 트래픽 흐름을 명쾌하게 정리하는 스마트한 쿠버네티스 관리자로 거듭나세요!
Tags: 쿠버네티스, Kubernetes, Ingress, Ingress Controller, CKAD, DevOps, MSA, 라우팅, 네트워킹
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| 👯♀️ 파드, 혼자가 아닌 둘이서! 멀티 컨테이너 파드 패턴 완전 정복 (Sidecar & Init Container) (0) | 2025.09.03 |
|---|---|
| ⏰ 일회성 임무부터 주기적인 알람까지! 쿠버네티스 Job & CronJob 완전 정복 (0) | 2025.09.03 |
| 📮 내 Pod는 어디있을까? 쿠버네티스 Service로 안정적으로 연결하기 (0) | 2025.09.03 |
| 🕵️♂️ 내 컨테이너에 무슨 일이? 쿠버네티스 로깅 & 디버깅 삼대장 완전 정복! (0) | 2025.09.03 |
| 🚀 당신의 애플리케이션, 과연 건강한가요? 쿠버네티스 Probes로 스마트하게 관리하기! (1) | 2025.09.03 |