Ingress Nginx, Istio 로 마이그레이션 하기

Ingress nginx 의 지원 종료로 인한 istio 마이그레이션

25년 8월부터 운영하던 홈 서버에 닥친 충격적인 소식

잘 쓰던 ingress nginx 가 없어지는 순간

사실 ingress nginx 가 없어지는건 아니고, 업데이트가 없어지는건데 보안 취약점 업데이트도 안해준다고 하여 전환을 결심했다.

그 전에 Istio 가 무엇인지 잠깐 알고가는게 좋을 것 같다.

Istio가 뭐길래?

Istio는 Kubernetes 위에서 서비스 간 통신을 관리해주는 서비스 메시다.
앱 코드를 크게 바꾸지 않아도 아래 기능을 인프라 레벨에서 붙일 수 있다.

  • 서비스 간 mTLS 암호화
  • 세밀한 트래픽 제어(라우팅, 재시도, 타임아웃)
  • 메트릭/로그/트레이싱 기반 관측성
  • 정책 기반 접근 제어

마이그레이션 전략

핵심은 한 번에 바꾸지 않고, 점진적으로 마이그레이션 하기로 결정하였다.

  1. Istio 컨트롤 플레인 먼저 설치
  2. Istio Ingress Gateway 병행 운영
  3. 앱별 Ingress 규칙을 VirtualService로 순차 이관
  4. Ambient + Waypoint는 필요한 네임스페이스부터 점진 적용
  5. 모니터링(특히 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 교체”보다 훨씬 큰 효과가 있었다.
라우팅만 바뀐 게 아니라, 보안/관측/트래픽 제어를 한 덩어리로 관리하게 됐고 운영 복잡도가 줄었다.


반영한 인프라는 아래 주소에서 확인할 수 있다.