Ingress Nginx, Istio 로 마이그레이션 하기
Ingress nginx 의 지원 종료로 인한 istio 마이그레이션
25년 8월부터 운영하던 홈 서버에 닥친 충격적인 소식

사실 ingress nginx 가 없어지는건 아니고, 업데이트가 없어지는건데 보안 취약점 업데이트도 안해준다고 하여 전환을 결심했다.
그 전에 Istio 가 무엇인지 잠깐 알고가는게 좋을 것 같다.
Istio가 뭐길래?
Istio는 Kubernetes 위에서 서비스 간 통신을 관리해주는 서비스 메시다.
앱 코드를 크게 바꾸지 않아도 아래 기능을 인프라 레벨에서 붙일 수 있다.
- 서비스 간 mTLS 암호화
- 세밀한 트래픽 제어(라우팅, 재시도, 타임아웃)
- 메트릭/로그/트레이싱 기반 관측성
- 정책 기반 접근 제어
마이그레이션 전략
핵심은 한 번에 바꾸지 않고, 점진적으로 마이그레이션 하기로 결정하였다.
- Istio 컨트롤 플레인 먼저 설치
- Istio Ingress Gateway 병행 운영
- 앱별 Ingress 규칙을
VirtualService로 순차 이관 - Ambient + Waypoint는 필요한 네임스페이스부터 점진 적용
- 모니터링(특히 Prometheus/Kiali) 먼저 붙인 뒤 트래픽 전환
실제 전환 과정
1) Public Gateway 생성
기존 ingress-nginx가 받던 도메인 트래픽을 Istio Gateway로 받게 했다.
다만 사용하는 노드 인스턴스의 IP 가 한개여서 기존 ingress 를 종료해야 아이피를 할당받을 수 있었다.
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
name: public-gateway
spec:
selector:
istio: ingress
servers:
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- "*.lth.so"
tls:
mode: SIMPLE
credentialName: lth-tls
2) 앱 라우팅은 VirtualService로 이동
도메인, path rewrite, redirect 규칙을 앱별로 이관했다.
이때 잠깐 체감하였는데 nginx 에서 사용하던 function 보다는 자유성이 떨어지는 느낌이였다.
다만 이 부분은 envoy filter 로 해결할 수 있었다.
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: spotify
spec:
hosts:
- "spotify.lth.so"
gateways:
- istio-ingress/public-gateway
http:
- match:
- uri:
regex: /api(/|$)(.*)
rewrite:
uriRegexRewrite:
match: ^/api(/|$)(.*)
rewrite: "/\\2"
route:
- destination:
host: spotify-server-service.spotify.svc.cluster.local
port:
number: 8080
위 코드는 spotify.lth.so/api 로 접근하는 트레픽을 api 서버로 보내주는 라우팅 규칙이다.
3) Ambient + Waypoint 적용
L7 정책/모니터링이 필요한 네임스페이스에는 waypoint를 붙였다.
labels:
istio.io/dataplane-mode: ambient
istio.io/use-waypoint: waypoint
결론
Ingress Nginx에서 Istio로 넘어오니 단순 “Ingress 교체”보다 훨씬 큰 효과가 있었다.
라우팅만 바뀐 게 아니라, 보안/관측/트래픽 제어를 한 덩어리로 관리하게 됐고 운영 복잡도가 줄었다.
반영한 인프라는 아래 주소에서 확인할 수 있다.