문서 목차
QKS · Networking
Ingresses
Ingress 는 클러스터 외부에서 내부 Service로 들어오는 HTTP/HTTPS 트래픽을 라우팅하는 Kubernetes 오브젝트입니다. 호스트 이름(도메인)이나 URL 경로를 기준으로 여러 Service에 트래픽을 분산할 수 있으며, TLS 인증서를 적용하여 HTTPS를 손쉽게 설정할 수 있습니다.
QUANTUM C&S
개요
Ingress는 클러스터 외부에서 내부 Service로 들어오는 HTTP/HTTPS 트래픽을 라우팅하는 Kubernetes 오브젝트입니다. 호스트 이름(도메인)이나 URL 경로를 기준으로 여러 Service에 트래픽을 분산할 수 있으며, TLS 인증서를 적용하여 HTTPS를 손쉽게 설정할 수 있습니다.
QKS 클러스터에는 Ingress Controller가 기본으로 설치되어 있습니다.
QKS 콘솔에서 Ingress 확인
- 왼쪽 메뉴에서 Networking > Ingresses를 선택합니다.
- 네임스페이스를 선택하면 Ingress 목록이 표시됩니다.
목록에서 확인할 수 있는 정보:
- 이름: Ingress 이름
- 호스트: 라우팅할 도메인 이름
- 경로: URL 경로 규칙
- 백엔드: 트래픽이 전달되는 Service
- TLS: HTTPS 설정 여부
- Address: 외부에서 접근 가능한 IP 또는 도메인
기본 Ingress 설정
경로 기반 라우팅
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: production
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
호스트 기반 라우팅 (여러 도메인)
spec:
rules:
- host: app1.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- host: app2.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
HTTPS(TLS) 설정
1단계: TLS Secret 생성
kubectl create secret tls my-tls-secret \
--cert=tls.crt \
--key=tls.key \
-n production
2단계: Ingress에 TLS 적용
spec:
tls:
- hosts:
- myapp.example.com
secretName: my-tls-secret
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
pathType 옵션
| pathType | 설명 | 예시 |
|---|---|---|
Prefix |
해당 경로로 시작하는 모든 요청 매칭 | /api → /api/v1, /api/users |
Exact |
정확히 일치하는 경로만 매칭 | /api → /api만 매칭 |
ImplementationSpecific |
Ingress Controller 구현에 따라 다름 | — |
kubectl로 관리
# Ingress 목록
kubectl get ingresses -n <namespace>
# Ingress 상세 정보
kubectl describe ingress <name> -n <namespace>
# Ingress 적용
kubectl apply -f ingress.yaml
# Ingress 삭제
kubectl delete ingress <name> -n <namespace>