안녕하세요! 👋
Istio를 공부하거나 ICA (Istio Certified Associate) 자격증을 준비하다 보면 가장 막막한 순간이 언제인가요? 바로 "이 상황에서 도대체 어떤 YAML 리소스를 써야 하지?" 라는 고민이 들 때입니다. 🤯
VirtualService, DestinationRule, Gateway, ServiceEntry... 이름도 비슷하고 역할도 헷갈리시죠? 그래서 오늘은 시험장 들어가기 전에 머릿속에 꼭 넣어야 할 상황별 Istio 리소스 매핑 치트시트를 준비했습니다.
이 글 하나만 정독하시면 복잡한 시나리오 문제도 두렵지 않을 거예요! 🏃♂️💨

🚦 1. 트래픽 관리 (Traffic Management)
Q. "요청을 어디로, 어떻게 보낼 것인가?"
트래픽을 제어하는 문제는 ICA 시험의 단골 손님입니다. 배포 전략이나 네트워크 회복 탄력성(Resilience)과 관련된 요구사항이 나오면 아래 리소스를 떠올리세요.
🔀 VirtualService (네비게이션)
트래픽이 어디로 갈지 경로를 정해주는 핵심 리소스입니다.
- 카나리 배포 (Canary): "새 버전(v2)에 트래픽 10%만 보내라" 👉 route > weight 필드 사용
- 조건부 라우팅: "아이폰 유저(헤더)는 모바일 페이지로 보내라" 👉 match > headers 필드 사용
- 네트워크 회복: "응답이 없으면 3번 재시도해라(Retry)" 혹은 "2초 안에 답 없으면 끊어라(Timeout)" 👉 retries, timeout 필드 사용
- 트래픽 복제: "실 운영 환경 영향 없이 테스트하고 싶다" 👉 mirror 필드 사용
🛑 DestinationRule (도착 후 규칙)
트래픽이 목적지(Pod 그룹)에 도착한 뒤 어떻게 처리될지 정합니다.
- 버전 구분 (Subsets): "v1 파드와 v2 파드를 논리적으로 나눠라" 👉 subsets (라벨로 구분)
- 서킷 브레이커 (Circuit Breaker): "동시 접속이 너무 많거나 오류가 잦은 파드는 잠시 차단해라" 👉 trafficPolicy > outlierDetection, connectionPool
- 로드밸런싱: "라운드 로빈 말고 랜덤 방식으로 분배해라" 👉 trafficPolicy > loadBalancer
🛡️ 2. 보안 (Security)
Q. "누가 들어올 수 있고, 어떻게 통신하는가?"
보안 문제는 "누군 허용하고, 누군 차단해라" 또는 "암호화해라"라는 식으로 출제됩니다.
👮 AuthorizationPolicy (접근 제어)
가장 많이 쓰이는 보안 리소스입니다. 누가(Who) 무엇을(What) 할 수 있는지 정의합니다.
- 화이트리스트: "오직 'Product' 서비스만 접근하게 해라" 👉 action: ALLOW, rules > from
- 메서드 제한: "GET 요청만 허용하고 POST는 막아라" 👉 rules > to > operation > methods: ["GET"]
- 전체 차단: "이 네임스페이스의 모든 문을 닫아라" 👉 spec: {} (빈 규칙 = Deny All)
🔐 PeerAuthentication (mTLS)
서비스 간 통신 암호화 수준을 정합니다.
- 강제 암호화: "모든 통신은 무조건 mTLS로만 해라" 👉 mtls > mode: STRICT
- 유연한 모드: "일반 텍스트와 mTLS 둘 다 허용해라(마이그레이션 중)" 👉 mode: PERMISSIVE
🆔 RequestAuthentication (JWT)
- 유저 인증: "JWT 토큰을 검증해라" 👉 jwtRules (Issuer, JWKS URI 설정)
🌐 3. 외부 연결 & 게이트웨이 (Edge & External)
Q. "클러스터 밖과 안은 어떻게 연결되는가?"
Istio 메시(Mesh)의 경계선(Edge)을 다루는 영역입니다.
🚪 Gateway (대문)
- 문 열기: "외부에서 들어오는 80 포트 트래픽을 받아라" 👉 servers > port, hosts
- 주의: Gateway만 만들면 문만 연 것입니다. 어디로 갈지는 VirtualService가 필요합니다!
🗺️ ServiceEntry (외부 주소록)
- 외부 서비스 등록: "메시 안에서 구글(Google)이나 야후(Yahoo) API를 호출해야 한다" 👉 hosts, resolution: DNS
- Istio는 기본적으로 모르는 외부 주소를 차단하거나 관리하지 않으므로 등록이 필요합니다.
📤 Egress TLS (나갈 때 암호화)
- TLS Origination: "내부 앱은 HTTP로 보내지만, 밖으로 나갈 땐 HTTPS로 변환해서 보내라" 👉 DestinationRule의 trafficPolicy > tls > mode: SIMPLE
💡 4. 가장 헷갈리는 포인트: VS vs DR
시험에서 가장 많이 혼동하는 두 리소스, 한 방에 정리해 드립니다!
| 리소스 | 역할 비유 | 주요 기능 키워드 |
| VirtualService (VS) | 🚗 네비게이션 | 길 찾기, % 분배, 재시도, 타임아웃 |
| DestinationRule (DR) | 🅿️ 주차장 규칙 | 버전 그룹짓기(Subset), 서킷 브레이커, mTLS 설정 |
- Tip: "경로"나 "흐름"을 제어하면 VS, "파드 그룹 설정"이나 "장애 차단"이면 DR입니다.
📝 합격을 위한 시험장 꿀팁 (Exam Tips)
- 네임스페이스(Namespace) 확인 필수: 문제에서 요구하는 작업이 default인지 istio-system인지 두 번 확인하세요. 엉뚱한 곳에 만들면 0점입니다. 😱
- apply는 생명: YAML 파일만 예쁘게 만들고 저장하면 소용없습니다. 반드시 kubectl apply -f <파일>을 실행해서 리소스를 생성하세요.
- Gateway 연결: VirtualService를 만들 때 gateways 필드에 방금 만든 Gateway 이름을 적지 않아서 외부 접속이 안 되는 실수가 정말 많습니다. 꼭 연결 고리를 확인하세요! 🔗
정리
🚦 1. 트래픽 관리 (Traffic Management)
"요청을 어디로, 어떻게 보낼 것인가?"
| 상황 (Scenario) | 필요한 리소스 | 핵심 설정 필드 (Key Fields) |
| A/B 테스트, 카나리 배포 (트래픽 % 분할) | VirtualService | route > weight (e.g., 90, 10) |
| URL 경로, 헤더에 따라 다른 곳으로 보내고 싶을 때 | VirtualService | match > uri, headers |
| 재시도(Retry), 타임아웃(Timeout) 설정 | VirtualService | retries, timeout |
| 특정 버전(v1, v2) 그룹 정의 | DestinationRule | subsets (labels로 파드 구분) |
| 로드밸런싱 알고리즘 변경 (RoundRobin, Random 등) | DestinationRule | trafficPolicy > loadBalancer |
| 서킷 브레이커 (연결 제한, 장애 차단) | DestinationRule | trafficPolicy > connectionPool, outlierDetection |
| 트래픽 미러링 (실제 요청을 복제해서 테스트) | VirtualService | mirror |
🛡️ 2. 보안 (Security)
"누가 들어올 수 있고, 어떻게 통신하는가?"
| 상황 (Scenario) | 필요한 리소스 | 핵심 설정 필드 (Key Fields) |
| 특정 서비스만 접근 허용 (Whitelist) | AuthorizationPolicy | action: ALLOW, rules > from, to |
| 특정 경로/메서드 차단 (Deny) | AuthorizationPolicy | action: DENY, rules (우선순위 높음) |
| mTLS 모드 설정 (Strict, Permissive) | PeerAuthentication | mtls > mode: STRICT |
| JWT 토큰 인증 (End-user 인증) | RequestAuthentication | jwtRules > issuer, jwksUri |
| 네임스페이스 전체를 닫고 싶을 때 | AuthorizationPolicy | spec: {} (빈 규칙 = 모두 차단) |
🌐 3. 외부 연결 & 게이트웨이 (Edge & External)
"클러스터 밖과 안의 연결"
| 상황 (Scenario) | 필요한 리소스 | 핵심 설정 필드 (Key Fields) |
| 외부 트래픽 수신 (Ingress 포트 열기) | Gateway | servers > port, hosts |
| 수신된 트래픽을 내부 서비스로 라우팅 | VirtualService | gateways에 Gateway 이름 명시 |
| 외부 서비스(Google, Yahoo 등) 등록 | ServiceEntry | hosts, ports, resolution: DNS |
| 나가는 트래픽을 HTTPS로 변환 (TLS Origination) | DestinationRule | trafficPolicy > tls > mode: SIMPLE |
| 특정 노드(Egress Gateway)를 통해서만 나가게 하기 | Gateway (Egress용) + VirtualService | gateways: [mesh, egress-gw] |
이 치트시트가 여러분의 ICA 합격에 도움이 되길 바랍니다! Istio, 복잡해 보이지만 상황별로 도구만 잘 매칭하면 충분히 정복할 수 있습니다. 화이팅! 💪✨
궁금한 점이나 추가로 다뤘으면 하는 내용이 있다면 댓글로 남겨주세요!
'클라우드 > Istio' 카테고리의 다른 글
| [Istio] 엥? 내 istio-proxy가 어디 갔지? 🧐 - Kubernetes Native Sidecar 완벽 분석 (0) | 2025.12.19 |
|---|---|
| [실전 Istio] Egress Gateway로 외부 트래픽 보안 챙기기 (feat. TLS 발신 설정) (0) | 2025.11.29 |
| [Istio] 우리 집 문단속하기 🚪: 외부 트래픽 전면 차단과 허용 (ALLOW_ANY vs REGISTRY_ONLY) (0) | 2025.11.29 |
| [Istio] 암호화된 트래픽을 열어보지도 않고 라우팅하는 비결: SNI와 PASSTHROUGH 모드 🔒🚦 (0) | 2025.11.29 |
| [Istio] 인그레스 게이트웨이의 보안 핵심: TLS SIMPLE vs MUTUAL 모드 완벽 정리 🛡️ (0) | 2025.11.29 |