k8s 핵심 오브젝트 — Ingress
kubernetes 개념 심화 2파트
NodePort만 쓰다 보면 서비스마다 포트를 하나씩 열어야 해서 관리가 복잡해진다. Ingress는 포트 하나로 URL 경로에 따라 다른 서비스로 라우팅해준다.
NodePort의 한계
서비스가 늘어날수록 포트도 계속 늘어난다.
mysite.com:30080 → 웹앱
mysite.com:30090 → API 서버
mysite.com:30100 → 관리자 페이지
mysite.com:30200 → 결제 서비스
사용자가 포트번호를 외워야 한다. 실제 서비스에선 말이 안 되는 구조다.
Ingress가 하는 것
포트 하나로 URL 경로에 따라 다른 서비스로 라우팅해준다.
mysite.com/ → 웹앱
mysite.com/api → API 서버
mysite.com/admin → 관리자 페이지
mysite.com/payment → 결제 서비스
도메인으로 나누는 것도 가능하다.
mysite.com → 웹앱
api.mysite.com → API 서버
admin.mysite.com → 관리자 페이지
Ingress vs Ingress Controller
Ingress를 쓰려면 Ingress Controller가 먼저 필요하다. k8s 기본 내장이 아니라 따로 설치해야 한다.
| Ingress | 라우팅 규칙 정의 (yaml) |
| Ingress Controller | 그 규칙을 실제로 처리하는 앱 |
Controller 없이 Ingress yaml만 있으면 아무것도 안 된다. Ingress Controller 종류가 여러 개(nginx, traefik, istio 등)라 k8s가 하나로 못 박아두지 않고 따로 설치하게 한 것이다.
Ingress Controller 설치
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/baremetal/deploy.yaml
kubectl get pods -n ingress-nginx
# ingress-nginx-controller 1/1 Running
Ingress 규칙 작성 및 배포
nginx-1-26과 nginx-1-27을 URL 경로로 나눠봤다.
kubectl create ingress nginx-ingress \
--rule="/v126=nginx-1-26:80" \
--rule="/v127=nginx-1-27:80" \
--annotation="nginx.ingress.kubernetes.io/rewrite-target=/" \
--class=nginx \
--dry-run=client -o yaml > /k8s/ingress.yaml
kubectl apply -f /k8s/ingress.yaml
apply 시 webhook 타임아웃 에러가 났다. 아래 명령어로 해결했다.
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
kubectl apply -f /k8s/ingress.yaml
결과 확인
kubectl get svc -n ingress-nginx
# ingress-nginx-controller NodePort 80:30354/TCP
# 접속 테스트
http://192.168.0.57:30354/v126 → nginx 1.26
http://192.168.0.57:30354/v127 → nginx 1.27
포트 하나(30354)로 URL 경로에 따라 다른 서비스로 라우팅됐다.
[ 캡처 - /v126, /v127 접속 화면 ]
전체 흐름
브라우저
↓
192.168.0.57:30354 (Ingress Controller NodePort)
↓
Ingress 라우팅
/v126 → nginx-1-26 Service
/v127 → nginx-1-27 Service
↓
Pod
NodePort는 건물 입구를 여는 것이고, Ingress는 입구 안에서 어디로 갈지 안내하는 것이다.
다음 파트는 ConfigMap과 Secret이다. 설정값과 민감 정보를 코드와 분리해서 관리하는 방법이다.
'Kubernetes' 카테고리의 다른 글
| [k8s] 오브젝트 이해하기 — Pod, Deployment, Service (0) | 2026.06.05 |
|---|---|
| [k8s] imperative command (0) | 2023.11.09 |
| kubernetes 커맨드 shortcuts (0) | 2023.11.09 |
| [CKAD] rewrite-target 옵션 (0) | 2023.11.02 |
| [CKAD/Lab] Imperative commands (0) | 2023.09.25 |