And Brain said,
Istio, 광활한 Service Mesh에 띄워진 돛단배 본문
Istio는 오픈 소스 서비스 메쉬 프레임워크로, 마이크로서비스 간의 통신을 쉽게 관리하고 제어할 수 있게 도와줍니다. 여러분들의 Kubernetes, Mesos 및 기타 플랫폼에서 실행되는 애플리케이션의 네트워크 트래픽을 관리하는데 도움을 줄 것입니다.
주요 구성요소
1. Envoy Proxy: 데이터 플레인을 구성하는 핵심 요소로서, 모든 서비스 인스턴스 옆에 배치되는 사이드카 프록시입니다.
- 트래픽 라우팅 및 관리
- 로드 밸런싱
- 장애 재시도
- 트래픽 분할
- 타임아웃, 브레이크 등의 기능을 제공
2. Pilot: 서비스 메쉬 구성 정보를 Envoy 프록시에 전달하여 트래픽 관리 규칙을 설정합니다.
3. Mixer: 각 서비스에 대한 접근 제어 및 사용량 정보 수집 역할을 합니다.
4. Citadel: 서비스 간의 통신에 대한 보안 기능, 인증 및 인가를 관리합니다.
주요 기능
- Traffic Management: 서비스 간 통신의 라우팅 및 로드 밸런싱을 제어합니다.
- Observability: 서비스 간 통신에 대한 로그, 모니터링, 추적 기능을 제공합니다.
- Security: 서비스 간 통신의 TLS 인증 및 인가를 제공하여 통신 보안을 강화합니다.
- Policy Enforcement: 정책 기반의 네트워크 액세스 제어 및 사용량 제한을 설정하고 적용합니다.
그럼 Helm chart 에 Istio를 설치해봅시다.
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
다음은, Istio 구성을 위해 istio-system이라는 namespace를 만듭니다.
kubectl create namespace istio-system
Istio CRD 설치.
helm install istio-base istio/base -n istio-system --set defaultRevision=default
istiod 서비스를 위한 discovery chart 설치.
helm install istiod istio/istiod -n istio-system --wait
추가적으로 외부 트래픽을 라우팅하기 위해 ingress gateway 까지 설치해줍니다.
kubectl create namespace istio-ingress
helm install istio-ingress istio/gateway -n istio-ingress --wait
이제, Istio를 사용하려면 apigateway의 파드에 Istio sidecar를 주입해야 합니다. 이를 위해 해당 네임스페이스에 auto-injection을 활성화하거나, Deployment의 spec에 특정 어노테이션을 추가할 수 있습니다.
kubectl label namespace default istio-injection=enabled
이렇게 네임스페이스에 auto-injection 활성화 (예: default 네임스페이스에 대해서) 혹은,
metadata:
annotations:
sidecar.istio.io/inject: "true"
이렇게 deployment의 metadata 섹션에 어노테이션을 추가합니다.
아래는 Istio 설정 예시 파일입니다.
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: apigateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: apigateway-vs
spec:
hosts:
- "*"
gateways:
- apigateway
http:
- match:
- uri:
exact: /path-to-your-service
route:
- destination:
host: apigateway.default.svc.cluster.local
port:
number: 8000
서비스의 type은 ClusterIP로 설정해야 합니다. 왜냐하면 Istio's ingress gateway가 트래픽을 관리하기 때문입니다. MSA를 위한 자세한 Istio 설정은 제 블로그 CI/CD Argonautica 시리즈에서 찾아뵙겠습니다.
정리하자면, Istio는 복잡한 마이크로서비스 환경에서 서비스 간의 통신 문제를 해결하는 데 도움을 주는 강력한 도구입니다. 개발자는 Istio를 사용하여 서비스의 통신 패턴을 쉽게 관리하고 보안 및 모니터링 기능을 통합할 수 있습니다. 그럼 다시 만날 때까지 안녕~
Thanks for watching, Have a nice day.
'IT > DevOps \ Architecture' 카테고리의 다른 글
Vagrant, 가상 환경의 유목민 (0) | 2023.10.31 |
---|---|
[DevOps] 컨테이너에 관한 고찰 (0) | 2023.10.04 |
Helm, 컨테이너 오케스트레이션을 위한 타륜 (0) | 2023.09.08 |
Prometheus, 어두웠던 인프라에 내려온 불 (2) | 2023.09.05 |
CatLight, 어둠 속을 응시하는 고양이의 눈 (2) | 2023.09.05 |