Kubernetes Istio 구성 5가지, gRPC Service Mesh
Kubernetes Istio 구성은 서비스 메시 구현을 위한 플랫폼으로, 트래픽 관리, 보안, 관측 및 폴리시 적용과 같은 다양한 서비스 메시 기능을 제공합니다.
목차
gRPC란?
gRPC는 마이크로서비스 간의 통신을 위한 효율적이고 성능이 우수한 프로토콜입니다.
gRPC는 Google이 개발한 오픈 소스 원격 프로시저 호출 (RPC) 프레임워크입니다. Kubernetes와 gRPC를 함께 사용하면 여러 가지 장점이 있습니다. 다음은 gRPC의 주요 장점입니다:
- 프로토콜 버퍼 (Protocol Buffers) 사용: gRPC는 프로토콜 버퍼를 기본 데이터 포맷으로 사용합니다. 프로토콜 버퍼는 직렬화 및 역직렬화가 빠르며, 크기가 작습니다. 이로 인해 데이터 전송 속도가 빨라지고 대역폭이 절약됩니다.
- 언어 중립: gRPC는 다양한 프로그래밍 언어를 지원합니다. 따라서 개발팀은 특정 언어에 구애받지 않고 필요한 언어로 마이크로서비스를 구현할 수 있습니다.
- 스트리밍 지원: gRPC는 단일 TCP 연결에서 양방향 스트리밍을 지원합니다. 이를 통해 실시간 통신 및 서버-클라이언트 간의 지속적인 데이터 교환이 용이합니다.
- 높은 성능: gRPC는 HTTP/2를 기반으로 하므로 다중 요청 처리, 헤더 압축 및 기타 최적화 기능을 지원합니다. 이로 인해 높은 성능과 낮은 지연 시간을 얻을 수 있습니다.
- 인증 및 보안: gRPC는 SSL/TLS와 토큰 기반 인증 (예: JWT)을 지원하여 서비스 간의 통신을 안전하게 합니다.
- 종단 간 플로우 제어: HTTP/2 기반의 gRPC는 고급 플로우 제어를 통해 네트워크 자원의 효율적인 사용을 지원합니다.
- 쉬운 서비스 디스커버리: Kubernetes의 서비스 디스커버리와 gRPC의 이름 해석 메커니즘을 결합하여 서비스 간의 동적 디스커버리 및 연결이 간단해집니다.
- 통합된 헬스 체크: gRPC 서버는 표준화된 헬스 체크 프로토콜을 지원하여, 쿠버네티스 같은 오케스트레이션 도구와의 통합이 용이합니다.
- 마이크로서비스 아키텍처와의 호환성: gRPC는 마이크로서비스 아키텍처와 잘 어울립니다. 각 서비스는 독립적으로 개발, 배포 및 확장이 가능하며, gRPC를 사용하여 서비스 간에 효과적으로 통신할 수 있습니다.
Kubernetes gRPC와 Istio
gRPC와 Istio를 함께 사용하면 다음과 같은 이점이 있습니다:
- 트래픽 관리: Istio는 가중치 기반 라우팅, 실패 복구, 트래픽 시프트, 지연 주입과 같은 고급 트래픽 관리 기능을 제공합니다. 이를 통해 gRPC 서비스의 A/B 테스팅, 카나리 배포, 장애 주입 테스트 등을 쉽게 수행할 수 있습니다.
- 자동 mTLS: Istio는 서비스 간 통신의 보안을 강화하기 위해 자동으로 mTLS를 설정하고 회전합니다. gRPC는 기본적으로 암호화되지만 Istio와 함께 사용하면 추가적인 보안 레이어를 얻을 수 있습니다.
- 관측성: Istio는 자동으로 모든 서비스 간 통신에 대한 트레이싱, 로깅 및 모니터링을 제공합니다. gRPC는 이러한 메트릭스와 트레이스 정보를 쉽게 수집할 수 있게 도와줍니다.
- 폴리시 적용: Istio를 사용하면 gRPC 서비스에 대한 접근 제어, 사용률 제한 및 기타 폴리시를 쉽게 적용할 수 있습니다.
- 호환성: Istio는 gRPC 프로토콜을 완벽하게 지원하므로 gRPC 서비스를 그대로 배포하고 Istio의 기능을 활용할 수 있습니다.
공식사이트 정보 : https://istio.io/v1.15/blog/2021/proxyless-grpc/
Kubernetes Istio 구성 방법
Istio 구성요소 설명
- Istio-Pilot: 서비스 검색을 수행하고 Istio 서비스 메시에서 Envoy 사이드카 프록시를 구성합니다.
- Mixer 구성요소 (Istio-Policy와 Istio-Telemetry): 사용 정책을 적용하고 서비스 메시 간에 텔레메트리 데이터를 수집합니다.
- Istio-Ingressgateway: 클러스터 외부의 트래픽에 대한 Ingress 지점을 제공합니다.
- Istio-Citadel: Istio를 위한 키 및 인증서 관리를 자동화합니다.
Istio 삭제 방법
helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl delete -f -
kubectl delete namespace istio-system
for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl delete -f $i; done
Istio 설치 방법
for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done
kubectl apply -f namespace.yaml
helm template --name=istio --namespace istio-system --set tracing.enabled=true --set global.mtls.enabled=false --set grafana.enabled=true --set kiali.enabled=true --set servicegraph.enabled=true --set gateways.istio-ingressgateway.serviceAnnotations."service\.beta\.kubernetes\.io/aws-load-balancer-internal"="0\.0\.0\.0/0" install/kubernetes/helm/istio > ./istioFex.yaml
kubectl apply -f istioFex.yaml
kubectl label namespace default istio-injection=enabled
kubectl get ns --show-labels
ALB Ingress 구성
apiVersion: extensions/v1beta1
kind: Ingress
...
Istio Gateway 및 VirtualService 구성
Gateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
...
VirtualService
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
...
참고: 새로운 파드가 추가될 때마다 VirtualService만 추가하면 됩니다.
Kubernetes Istio 구성 마치며
다양한 service mesh 중 대표적인 Kubernetes Istio 구성을 함께하면 다음에는 다른 service mesh 정보도 추가해 드리도록 하겠습니다. 다른 추가 아이티 정보는 아래 확인하세요!