1. Ingress란?
Kubernetes에서 Ingress는 클러스터 외부에서 내부 서비스로 HTTP/HTTPS 요청을 라우팅하는 API 객체이다. Service의 LoadBalancer나 NodePort와 비교했을 때, 보다 유연한 트래픽 라우팅을 제공하며, TLS 종료 및 가상 호스팅 기능도 지원한다.
1.1 Ingress를 사용하는 이유
- 단일 진입점 제공: 여러 서비스에 대한 요청을 단일 도메인 또는 IP로 수신하여 내부적으로 라우팅 가능
- 경로 기반 라우팅: 특정 URL 패턴에 따라 요청을 서로 다른 서비스로 전달 가능
- 호스트 기반 라우팅: 여러 도메인을 하나의 Ingress로 관리 가능
- TLS 지원: HTTPS 트래픽 처리를 위해 TLS 인증서를 사용할 수 있음
- 비용 절감: LoadBalancer Service를 여러 개 생성하는 대신, Ingress를 사용하면 외부 트래픽을 보다 효율적으로 관리 가능
2. Ingress 리소스 구조
Ingress는 API 객체로, 기본적으로 다음과 같은 형식으로 정의된다.
2.1 기본 Ingress 예제
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
위 설정에서는 example.com/app1
으로 들어오는 요청을 app1-service
로, example.com/app2
를 app2-service
로 전달한다.
3. Ingress Controller
Ingress 리소스는 단독으로 동작하지 않으며, 실제로 트래픽을 라우팅하는 역할을 하는 Ingress Controller가 필요하다. Kubernetes는 기본 Ingress 기능을 제공하지만, 이를 실행하는 Ingress Controller는 사용자가 직접 배포해야 한다.
3.1 대표적인 Ingress Controller
Ingress Controller | 특징 |
---|---|
NGINX Ingress Controller | 가장 널리 사용됨, 공식 Kubernetes Ingress 구현 지원 |
Traefik | 자동화된 서비스 디스커버리 기능 제공, 빠르고 가벼움 |
HAProxy Ingress | 고성능 로드 밸런싱 기능 제공 |
Kong Ingress Controller | API Gateway 기능 포함 |
Istio Ingress Gateway | Service Mesh 환경에서 Ingress 역할 수행 |
4. NGINX Ingress Controller 배포하기
4.1 NGINX Ingress Controller 설치
NGINX Ingress Controller는 Helm을 이용하여 쉽게 배포할 수 있다.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-ingress-controller ingress-nginx/ingress-nginx
4.2 Ingress를 통한 외부 접근 확인
kubectl get ingress
정상적으로 배포되었다면, 할당된 외부 IP를 확인할 수 있다. 브라우저에서 해당 도메인으로 접근하면 트래픽이 내부 서비스로 전달되는 것을 확인할 수 있다.
5. TLS 인증서 적용하기
Ingress는 Let’s Encrypt 등의 CA를 활용하여 TLS 인증서를 설정할 수 있다.
5.1 TLS 적용 예제
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-tls-ingress
spec:
tls:
- hosts:
- example.com
secretName: my-tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 443
5.2 TLS Secret 생성
kubectl create secret tls my-tls-secret --cert=cert.pem --key=key.pem
이제 HTTPS를 통해 보안 트래픽을 처리할 수 있다.
6. 결론
- Ingress는 Kubernetes에서 외부 트래픽을 내부 서비스로 라우팅하는 역할을 한다.
- Ingress Controller가 필요하며, 대표적으로 NGINX, Traefik, HAProxy 등이 사용된다.
- TLS 인증서를 적용하면 HTTPS 트래픽도 처리 가능하다.
- Helm을 이용하면 쉽게 Ingress Controller를 배포하고 관리할 수 있다.
Ingress를 활용하면 Kubernetes에서 마이크로서비스 간의 네트워크 트래픽을 보다 효율적으로 관리할 수 있다. 다음 글에서는 Network Policies에 대해 다뤄보자! 🚀