Istio 상호 TLS 마이그레이션

Istio 상호 TLS 마이그레이션 (Mutual TLS Migration)

기존 서비스 메시의 트래픽이 전부 평문이라면, 한 번에 mTLS로 바꾸려다 서비스가 죽는 사고가 나기 쉬워요. 두 서비스가 모두 mTLS를 지원해야 안전하게 전환되거든요. Istio는 버전 단계별로 트래픽을 조금씩 mTLS로 옮기는 점진적 마이그레이션을 지원해요.

출처: https://istio.io/latest/docs/tasks/security/authentication/mtls-migration/

전략은 이렇게 가요. 먼저 요청을 받는 쪽 서버가 mTLS 평문 둘 다 받아들이게 열어두고(PERMISSIVE), 클라이언트가 mTLS를 쓰도록 보내면서 문제가 없는지 확인한 뒤, 마지막에 STRICT로 바꿔 mTLS만 받게 잠가요.

apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: legacy
spec:
  mtls:
    mode: PERMISSIVE

mode 값이 핵심이에요.

  • PERMISSIVE: mTLS와 평문(plaintext)을 모두 허용해요. 클라이언트의 mTLS 지원 여부와 관계없이 트래픽이 통과하죠. 전환 시작 단계에서 안전망으로 쓰기 좋아요.
  • STRICT: mTLS만 허용해요. 평문 요청은 거부돼요. 모든 클라이언트가 mTLS를 보내는 게 확인된 뒤 최종 단계에서 적용해요.

마이그레이션이 끝나면 PERMISSIVESTRICT로 바꾸면 되고, 메시 전체(모든 네임스페이스)에 적용하고 싶으면 metadata.name: default로 mesh-wide 규칙을 만들어요. 이렇게 하면 서비스 코드를 수정하지 않고도 전환을 마칠 수 있어요.

더 알아보기