Search

Istio 찍먹

지난 글에서 소개한 EKS Blueprints for Terraform의 패턴 중 하나로 istio를 실습해보기로 했다. 왜 istio냐 라는 질문엔 채용 공고, 꽤 규모 있고 잘하는 회사들의 기술 스택에서 꼭 눈에 보이기 때문이다(eks blueprints 패턴 중 하나라는 점으로도 검증). 그럼 istio가 무엇이길래? 깊게 알아보진 않았다. 내가 알고 있는 배경지식은:
서비스 메쉬 구현 중 하나이다.
목적 중 하나로 mTLS를 구성하기 위함이라고 알고 있다(feat. CKS)
Envoy로 만들었다.
nginx의 대안으로, dynamic config L7 proxy를 위해 사용해봤다(결국 도입되진 않았지만).
우선은 blueprint로 간단하게 설치해 볼 수 있으니 눈으로 보면서 무엇인지 습득해 나간다.
1
pull

비용 최적(소?)화

blueprint에서 사용하는 eks 모듈의 인자 값은 모두 변수로 노출되지 않는다. 따라서 변경해주어야 하는데 그냥 apply 하는거 보다 비용을 줄이려는 목적으로 몇 군데 수정해봤다:
2개의 AZs; 실질적인 비용이 줄진 않지만 적은 개수가 덜 헷갈린다. 가용성 대비
single NAT(이미 되어 있다)
노드그룹 min/max/desired 개수
인스턴스 타입; t4g 사용하려 했으나 예제 앱 이미지가 x86만 지원하여 t3 사용

버그 수정

위처럼만 바꾸고 설치하면 Kiali(istio web console)에서 오류가 난다:
json: cannot unmarshal object into Go value of type []*kubernetes.RegistryEndpoint
1.75.0 버전에서 해결된걸로 보여 istiod/base 의 버전도 이에 맞게 올려 주었다(1.20.0).
오류 팝업은 없다. ingress/egressgateway가 없다곤 하지만 아직 무엇이 문젠진 알 수 없다.

실습

네임스페이스에 배포된 파드 사이드카로 istio proxy가 설치될 수 있도록 레이블을 붙인다
k label namespace sample istio-injection=enabled
샘플 앱으로 요청하여 결과를 확인한다.
~ $ curl -v helloworld.sample:5000/hello * Trying 172.20.203.41:5000... * Connected to helloworld.sample (172.20.203.41) port 5000 > GET /hello HTTP/1.1 > Host: helloworld.sample:5000 > User-Agent: curl/8.4.0 > Accept: */* > < HTTP/1.1 200 OK < server: envoy < date: Tue, 28 Nov 2023 07:46:55 GMT < content-type: text/html; charset=utf-8 < content-length: 58 < x-envoy-upstream-service-time: 173 < Hello version: v1, instance: helloworld-v1-b6c45f55-7t9nt * Connection #0 to host helloworld.sample left intact ~ $
Bash
복사
응답의 server가 envoy임을, envoy proxy가 응답했음을 확인한다. 물론 파드를 띄우면 istio의 init 그리고 proxy 컨테이너가 생기는 것도 확인할 수 있다. 끝? istio 문서의 더 풍성한 예시를 실습해봐야겠다(역시 찍먹은 날먹이다). istio가 무엇이고 어떤 목적으로 사용할 수 있는지 알아보고 목표를 정하고 학습해봐야겠다. blueprint 쪽은 그것 자체가 목적이 아니기에 아주 간단한 예시를 써 둔 것 같다. 아주 단편적이지만 그래도 몇 가지 습득한 점이 있다:
istiod 노드 하나를 띄우기 위한 최소 스펙과 처리할 수 있는 cap이 있다.
When namespace isolation is enabled, a single Istiod instance can support 1000 services, 2000 sidecars with 1 vCPU and 1.5 GB of memory. You can increase the number of Istiod instances to reduce the amount of time it takes for the configuration to reach all proxies. https://istio.io/latest/docs/ops/deployment/performance-and-scalability/
네임스페이스 단위로 istio(envoy) proxy 사용 여부를 결정할 수 있다.
kiali로 가시성을 확보하기 위해 jaeger, prometheus, grafana가 필요하다.