And Brain said,

Istio, 광활한 Service Mesh에 띄워진 돛단배 본문

IT/DevOps \ Architecture

Istio, 광활한 Service Mesh에 띄워진 돛단배

The Man 2023. 9. 14. 10:33
반응형

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.

반응형
Comments