IT 끄적이기
쿠버네티스(k8s) 학습하기 - Istio란?
미르아
2024. 12. 27. 17:52
728x90
Istio란?
Istio는 분산 애플리케이션(마이크로서비스)에서 다음과 같은 문제를 해결해주는 플랫폼입니다:
- 서비스 간의 통신 제어: 서비스 간 트래픽 라우팅, 부하 분산, 실패 처리.
- 보안: 서비스 간의 통신을 암호화(TLS)하고 인증 및 권한 부여를 처리.
- 모니터링: 서비스 간의 성능, 요청 상태 등을 실시간으로 관찰.
- 정책 관리: 특정 서비스에 대한 접근 제한, 트래픽 관리 정책 설정.
Istio의 주요 기능
1. 트래픽 관리
- 라우팅:
- 서비스 A가 서비스 B로 요청을 보낼 때 트래픽을 제어.
- 예: 특정 버전의 애플리케이션으로만 트래픽을 보냄(예: Canary 배포).
- 로드 밸런싱:
- 여러 인스턴스에 트래픽을 고르게 분배.
- 리트라이와 타임아웃:
- 요청 실패 시 자동 재시도 및 타임아웃 설정.
2. 서비스 보안
- mTLS(상호 TLS):
- 서비스 간 통신을 암호화하고 인증.
- 권한 제어:
- 요청이 허용되거나 거부될 수 있는 정책 설정.
3. 관찰 가능성(Observability)
- 모니터링:
- Grafana, Prometheus 같은 도구와 통합하여 요청 상태를 추적.
- 분산 트레이싱:
- 요청이 서비스 간에 어떻게 이동하는지 추적(예: Jaeger, Zipkin과 통합).
4. 서비스 정책
- 트래픽을 특정 조건에 따라 제한하거나, 서비스 간의 통신을 차단.
Istio의 아키텍처
Istio는 크게 두 가지 주요 컴포넌트로 이루어집니다:
1. 데이터 플레인(Data Plane)
- 사이드카 프록시(Sidecar Proxy):
- Istio는 각 서비스의 컨테이너 옆에 사이드카 프록시를 배치합니다(예: Envoy Proxy).
- 이 프록시는 모든 네트워크 요청을 가로채고 관리합니다.
- 사이드카 프록시가 트래픽을 암호화하고, 라우팅하며, 로깅 데이터를 수집합니다.
2. 컨트롤 플레인(Control Plane)
- Istio 컨트롤 플레인은 데이터 플레인을 관리하고 정책을 설정합니다. 주요 컴포넌트는 다음과 같습니다:
- Pilot: 트래픽 라우팅 설정 및 Envoy Proxy로 전달.
- Citadel: 인증 및 보안 인증서 관리.
- Mixer: 메트릭 수집, 모니터링, 정책 적용.
Istio를 사용하는 이유
- 마이크로서비스 간 복잡성 관리:
- 많은 서비스 간 통신이 이루어지는 환경에서 각 서비스의 네트워킹, 보안, 모니터링 로직을 분리.
- 안정성:
- 장애 복구, 트래픽 재시도 등으로 서비스의 안정성을 높임.
- 효율적인 배포:
- Canary 배포, A/B 테스트와 같은 전략적인 배포 방식 지원.
- 표준화:
- 모든 서비스에 동일한 방식의 보안 및 정책 적용.
Istio의 주요 사용 사례
- 서비스 간 암호화 통신:
- 애플리케이션 코드를 수정하지 않고도 모든 서비스 간 통신을 자동으로 암호화.
- 트래픽 분배 및 Canary 배포:
- 새로운 버전의 애플리케이션을 배포할 때, 일부 트래픽만 새 버전으로 라우팅.
- 서비스 장애 복구:
- 한 서비스가 실패했을 때 다른 서비스로 요청을 재전송하거나 차단.
- 서비스 간 모니터링:
- 어떤 요청이 성공했는지, 실패했는지, 얼마나 지연이 발생했는지 분석.
Istio 설치 및 사용
- Istio 설치
- Helm 또는 istioctl 명령어를 사용해 쿠버네티스 클러스터에 Istio를 설치합니다.
bash 코드 복사 istioctl install --set profile=demo
- Namespace에 Istio 사이드카 주입 활성화
- 애플리케이션 네임스페이스에 Istio 사이드카 프록시를 자동으로 추가합니다.
bash 코드 복사 kubectl label namespace <your-namespace> istio-injection=enabled
- 서비스 배포
- 기존 애플리케이션 배포 방식에 사이드카 프록시가 추가됩니다.
bash 코드 복사 kubectl apply -f my-deployment.yaml
- 트래픽 정책 설정
- 트래픽 라우팅, 로드 밸런싱, 타임아웃 등을 설정하는 YAML 파일 작성.
yaml 코드 복사 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-service spec: hosts: - my-service http: - route: - destination: host: my-service subset: v1
Istio와 쿠버네티스의 관계
- 쿠버네티스는 클러스터와 애플리케이션을 관리합니다.
- Istio는 쿠버네티스 위에서 실행되며, 서비스 간 통신을 효율적으로 관리하는 데 초점을 둡니다.
- 두 기술은 서로 보완적입니다. 쿠버네티스가 애플리케이션의 배포와 스케일링을 처리하고, Istio는 서비스 간 네트워크를 처리합니다.
정리
Istio는 다음과 같은 이유로 강력한 도구입니다:
- 서비스 간 네트워킹을 간단히 관리.
- 보안, 트래픽 제어, 모니터링 등을 쉽게 설정.
- 대규모 마이크로서비스 아키텍처에서 필수적인 도구.
728x90