1️⃣ Kubernetes에서 Ingress가 필요한 이유?
이전 글에서 Kubernetes의 Service를 통해 Pod에 접근하는 방법을 배웠습니다.
하지만 NodePort나 LoadBalancer는 다음과 같은 제한사항이 있습니다.
❌ NodePort
• 포트(30000~32767)를 직접 사용해야 함
• 여러 서비스가 있을 경우 관리가 어려움
❌ LoadBalancer
• 클라우드 환경에서만 사용 가능
• 서비스마다 LoadBalancer가 필요하면 비용 증가
✅ Ingress를 사용하면 하나의 LoadBalancer로 여러 서비스에 트래픽을 분배할 수 있습니다.
✅ 도메인 기반으로 트래픽을 라우팅할 수도 있습니다.
2️⃣ Kubernetes Ingress란?
📌 Ingress는 외부 트래픽을 클러스터 내부 서비스로 라우팅하는 역할을 합니다.
✅ 도메인 기반 라우팅 가능
✅ 하나의 LoadBalancer로 여러 서비스 관리
✅ TLS(SSL) 적용 가능
📌 Ingress 구조
사용자 요청 (https://app.example.com)
⬇
Ingress Controller
⬇
적절한 서비스로 라우팅
3️⃣ Ingress 기본 구성 요소
Kubernetes에서 Ingress를 사용하려면 Ingress Controller가 필요합니다.
📌 Ingress 설정에 필요한 것
1) Ingress Controller → Ingress를 실제로 처리하는 서비스 (예: Nginx Ingress Controller)
2) Ingress 리소스 → Ingress의 라우팅 규칙을 정의하는 YAML 파일
3) Ingress Controller 설치하기
📌 Kubernetes는 기본적으로 Ingress Controller를 제공하지 않습니다.
📌 따라서 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 ingress-nginx/ingress-nginx
✅ Nginx Ingress Controller가 설치되었으며, 이제 Ingress를 설정할 수 있습니다.
5️⃣ 기본 Ingress 설정 예제
이제 Ingress를 설정하여 도메인 기반 트래픽을 라우팅해보겠습니다.
📌 Ingress 리소스 YAML 파일 (ingress.yaml)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com # 도메인 설정
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service # 트래픽을 보낼 서비스
port:
number: 80
📌 배포 명령어
kubectl apply -f ingress.yaml
📌 Ingress 상태 확인
kubectl get ingress
✅ 이제 myapp.example.com으로 접속하면 my-service로 트래픽이 전달됩니다.
6️⃣ 여러 도메인을 라우팅하는 Ingress 설정
Ingress는 여러 도메인을 한 번에 관리할 수도 있습니다.
📌 여러 서비스로 라우팅 (multi-ingress.yaml)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-ingress
spec:
rules:
- host: app1.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app1
port:
number: 80
- host: app2.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-app2
port:
number: 80
✅ 하나의 Ingress로 여러 도메인에 대해 트래픽을 분배할 수 있습니다!
7️⃣ Ingress에서 HTTPS(TLS) 적용하기
Ingress는 HTTPS(SSL)도 적용할 수 있습니다.
📌 TLS(SSL) 적용 예제 (tls-ingress.yaml)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: secure-ingress
spec:
tls:
- hosts:
- secure.example.com
secretName: tls-secret # SSL 인증서
rules:
- host: secure.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: secure-service
port:
number: 443
📌 SSL 인증서 생성 (Let’s Encrypt 예제)
kubectl create secret tls tls-secret --cert=cert.pem --key=key.pem
✅ 이제 https://secure.example.com에서 SSL 적용된 서비스를 사용할 수 있습니다!
8️⃣ Ingress 리소스 정리
Ingress 기능설명
기본 라우팅 | 특정 도메인 → 서비스 연결 |
여러 서비스 라우팅 | 하나의 Ingress로 여러 서비스 관리 |
TLS(SSL) 적용 | HTTPS 트래픽 지원 |
Path 기반 라우팅 | /api는 API 서비스로, /web은 웹 서비스로 연결 |
🔥 Ingress를 사용하면 하나의 LoadBalancer로 여러 서비스에 트래픽을 효율적으로 분배할 수 있습니다!
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
📌 Kubernetes 모니터링과 로깅: 운영 환경을 안정적으로 유지하기 (0) | 2025.03.03 |
---|---|
📌 Kubernetes Helm: 애플리케이션 배포 자동화하기 (0) | 2025.03.03 |
📌 Kubernetes Service: 로드 밸런싱과 네트워크 설정 이해하기 (0) | 2025.03.03 |
📌 Kubernetes 아키텍처 완벽 분석: Master Node와 Worker Node의 역할 (0) | 2025.03.02 |
📌 Kubernetes 핵심 개념: Pod, Node, Cluster 에 대한 이해 (0) | 2025.03.02 |