이스티오(Istio)는 서비스 메시 패턴의 구현체이다. 서비스 메시가 더 복잡해지기 전에 이를 관리하는 기술이다.
연혁 (History)
Istio는 구글에 의해 시작되었고 v0.1.0이 오픈 소스화 된 후 구글, IBM 및 기타 여러 회사에 의해 개발이 계속되었다. 2022년 4월 리눅스 재단의 일부인 독립된 조직인 CNCF(Cloud Native Computing Foundation)에 이스타오 라이선스권이 부여됐다.
실행 환경 (Execution Environment)
먼저 실용적인 세부사항부터 살펴보자. 구체적인 내용은 무엇이며 실행 장소는 어디일까? 서비스 메쉬는 컨트롤 플레인과 데이터 플레인으로 구성되어 있다. 컨트롤 플레인은 필요에 따라서 유저가 작성한 고도의 설정을 취해, 데이터 플레인(실제의 트래픽을 처리하는 사이드 카 프록시)을 프로그램한다. 이 컨트롤 플레인은 'Istioproperty'이다. (Istio 프로젝트에서 생성되는 코드) 몇몇 서비스 메쉬(Linkerd2가 주목해야 할 예)도 독자적인 프록시를 기술하고 있지만, Istio 데이터 플레인은 Emissor 프록시의 복수의 인스턴스(독자적 독립적이고 번영한 프로젝트)로 구성되어 있다.
Istio 컨트롤 플레인은 k8s 클러스터에서 작동하도록 설계되어 있다. k8s 실행 환경이 제공하는 몇 가지 지원 기능에 의존하기 때문에 실제로는 k8s에서 실행해야 한다. Istio에게는 특별한 일이지만, k8s에 관한 한 컨트롤 플레인은 단순한 다른 업무량에 지나지 않는다.
데이터 플레인은 다양한 환경에서 실행할 수 있지만 k8 워크로드와 사이드카 프록시가 가장 쉽고 일반적이다. 워크로드가 클러스터 내에 있는 경우 k8s 기반 Istio 컨트롤 플레인은 k8s 변환 Webhook Ad미션 컨트롤러 기능을 사용하여 사이드카를 워크로드에 자동 주입할 수 있다. 또한 다양한 k8s API를 호출하여 현재 위치(워커 노드, 존, 지역)를 파악하고 자동으로 로케일 대응 라우팅(가장 가까운 라우팅 우선)을 조정할 수도 있다. 이러한 기능은 강력한 사용자 경험의 이점을 가져온다. 특히 사이드카 프록시 정보를 사용하여 워크로드 정의(도입 등)를 변경할 필요가 없기 때문에 보다 짧고 깔끔할 뿐만 아니라 애플리케이션과 인프라스트럭처의 문제도 분리하여 조직과 보안의 이점이 있다.
클러스터 밖의 워크로드에 사이드카를 추가하는 기능(이른바 「메쉬 확장」)은 레거시 워크로드를 현대화하기 위한 강력한 기능이지만, 같은 호스트에 사이드카 프록시를 수동으로 설치해 트래픽 대행 수신을 설정해야 한다. 따라서 이러한 "메쉬 확장"은 사소한 것은 아니지만 k8s 클러스터에서 아직 실행되지 않은 워크로드에 메쉬의 이점을 가져다줄 수 있다.
많은 사람들이 이것을 k8s로 워크로드를 이행하기 위한 편리한 방법이라고 생각한다. 먼저 트래픽에 대한 통찰력을 얻거나 정책을 적용하는 것부터 시작한다. 관측 가능하고 제어 가능한 엔티티가 되면 실행할 장소를 이동하는 것이 훨씬 쉬워진다.
관리 (Managed Istio)
k8s 클러스터가 있으면 Istio를 설치할 수 있다. 다음과 같은 몇 가지 옵션(일부 옵션은 다른 옵션보다 관리됩니다)을 사용할 수 있다.
- Google의 Anthos는 다른 메쉬 컴포넌트를 포함한 일련의 솔루션이다. GCP 이외의 클러스터에서도 실행할 수 있지만 구글 시스템에 콜백 해야 합니다. 이것은 내장 애성에 대해 생각할 때 고려할 필요가 있을지도 모른다.
- RedHat의 OpenShift에는 메쉬 옵션이 있으며, k8s 운영자가 메쉬를 설치 및 업그레이드한다.
- 아마존의 EKS에는 Istio 옵션이 없지만, Tetrate의 FIPS 인증 Istio Distribution은 애드온 시장에 있다.
또한, Tetrate의 Service Bridge(TSB)와 같은 관리 플레인은 다중 Istio 메쉬의 설치, 업그레이드 및 상위 레벨 모델에 기반한 설정을 완전히 관리한다.
설치 (Install)
Istio를 실행하기로 결정한 경우 Istio를 올바르게 도입하는 것이 반드시 간단한 작업은 아니며, 이를 위한 몇 가지 방법이 있다. 이 글에서는 실제 설치 프로세스에 대해 자세히 설명하지 않지만, Istio에 대한 다양한 흥미로운 사실을 밝히기 위해 다양한 옵션에 대해 검토한다. 집에서 Istio를 시도하기에 공식 문서는 상당히 포괄적이다.
Istio 설치할 때 이전에는 정말 큰 헬름 차트를 사용했지만 다행히 현재 Istio는 코드에 의해 설치되어 있다. 이 코드의 주요 역할은 Istio(전개 등)를 실행하는 k8s 매니페스트를 생성하여 k8s 클러스터에 적용하는 것이다.
이 코드는 다음 두 가지 다른 방법으로 실행할 수 있습니다.
- 이것은 verbistioctlinstall을 사용하여 실행되는 istioctlCLI 바이너리(Istio의 kubectl에 상당)에 내장되어 있다.
- 코드는 오퍼레이터로 패키지화되어 있다. 이것은 k8s 클러스터에서 실행할 수 있는 코드의 일부이다. 이것에 의해, 인스톨 코드가 여러 번 실행되고, Istio의 전개가 어떠한 것이어야 하는지, 또 어떠한 것인지의 차이가 조정된다. 이는 설치 프로그램을 여러 번 실행하는 것과 동일하며, 전개된 시스템에 애드혹으로 변경함으로써 발생한 문제를 원래대로 되돌릴 수 있다.
둘 다 같은 설정을 취한다. 이것은 Istio Operator라고 불리는 k8s 스타일의 리소스로 YAML 파일로 제공된다. istioctlinstall 명령어는 로컬 파일을 가리키는 명령줄 인수로 사용하지만 운영자의 경우 CR로 클러스터에 배치된다.
"Istio" 자체의 복사본 취득에 대해서는 k8s 워크로드로 실행되며, 해당 컨테이너 이미지는 클러스터에서 가져온다.
메쉬 관리자와 사용자에게 필요한 것은 isistioctl 클라이언트 CLI 사본이다. 이것에 의해, Istio를 인스톨할 수 있다. (이것을 실시하기 위한 k8s 매니페스트가 포함되어 있기 때문)
이것은 몇 개의 패키지 매니저에 내장되어 있어 사용자가 쉽게 기동 할 수 있게 되어 있다. (예를 들어, 홈브루는 그것을 가지고 있지만, 이 기사의 시점에서는 우분투의 적절한 저장소는 가지고 있지 않다) 시스템에 의해 패키지화되지 않은 경우, 업스트림에서 직접 다운로드할 수 있다. (Go 프로그램이기 때문에 외부 의존도가 없기 때문에 어디서나 쉽게 실행할 수 있다) 이를 통해 많은 샘플 설정 YAML을 포함한 많은 정보를 얻을 수 있지만 bin/istioctl도 그 안에 있다.
업스트림에서 다운로드하면 최신 버전의 istioctl이 보장된다. 즉, 최신 버전의 Istio를 클러스터에 설치한다. 설치 매니페스트는 istioctl에 포함되어 있기 때문에 이 두 가지 버전이 결합된다.
isistioctl 설치를 시작하려면 설치를 하는 다른 방법이 있습니다. 예를 들어, 실가동 환경에서는 Flux나 Argo CD와 같은 GitOps 에이전트가 Istio를 관리하도록, istioctl에 포함된 매니페스트를 덤프 아웃하여 Gitrepo에 체크할 수 있다.
'development' 카테고리의 다른 글
vue 보안 취약점과 방지 방법 (0) | 2022.12.11 |
---|---|
k8s - 이스티오(Istio) 정리 #2 (0) | 2022.12.04 |
프론트엔드, 리액트 면접 인터뷰 (0) | 2022.12.03 |
타입스크립트(typescript) 클린코드 (0) | 2022.12.01 |
타입스크립트 인터페이스 선언 머지 (Interface Declaration Merging) (0) | 2022.12.01 |