Istio가 Kubernetes의이면에서 작동하는 방식

Istio 아키텍처에 대한 통찰력과 다양한 움직이는 부분이 Kubernetes에서 마이크로 서비스를 관리하는 방법

Unsplash에 Arif Wahid의 사진

Kubernetes 에서 마이크로 서비스 를 수행하는 경우 Istio 와 같은 서비스 메시 가 도움이 될 수 있습니다. 이 문서는 " Istio를 사용하여 Kubernetes에서 마이크로 서비스를 관리하는 방법 "에 대한 후속 기사입니다 . 오늘은 Istio 아키텍처에 대해 알아 보겠습니다.

Istio는 두 가지 주요 구성 요소를 통해 마이크로 서비스를 관리하는 데 도움이됩니다.

  • 데이터 플레인. 이것은 Istio가 마이크로 서비스에 주입 하는 사이드카 Envoy 프록시입니다. 이들은 서비스 간의 실제 라우팅을 수행하고 원격 분석 데이터도 수집합니다.
  • 컨트롤 플레인. 이것은 트래픽을 라우팅하는 방법을 데이터 플레인에 알려주는 구성 요소입니다. 또한 구성을 저장 및 관리하고 관리자가 사이드카 프록시와 상호 작용하고 Istio 서비스 메시를 제어하는 ​​데 도움이됩니다. 컨트롤 플레인은 Istio의 두뇌입니다.

컨트롤 플레인 구성 요소

현재 Istio 버전 (Istio v1.5 이상)에서 컨트롤 플레인은 단일 바이너리 Istiod 로 제공되며 Pilot , CitadelGalley 의 세 부분으로 구성 됩니다.

Istio 아키텍처

조종사

Pilot은 서비스 메시의 중앙 컨트롤러이며 Envoy API를 사용하여 Envoy 사이드카와의 통신을 담당 합니다 . Istio 매니페스트에 정의 된 높은 수준의 규칙을 구문 분석하고이를 Envoy 구성으로 변환합니다.

서비스 검색, 트래픽 관리 및 지능형 라우팅을 촉진하여 A / B 테스트, 블루-그린 배포, 카나리아 롤아웃 등을 수행 할 수 있습니다. 또한 타임 아웃, 재시도 및 회로 차단 기능을 제공하도록 사이드카를 구성하여 메시에 탄력성을 제공하는 데 도움이됩니다.

Istio 구성과 Istio가 실행되는 기본 인프라 간의 느슨한 결합을 제공하는 역할을합니다. 따라서 Kubernetes, Nomad 또는 Consul 에서 Istio를 실행할 수 있지만 Istio와 상호 작용하는 방식은 비슷합니다.

Pilot은 실행중인 플랫폼을 인식하고 플랫폼에 관계없이 트래픽 관리가 동일하도록합니다.

Pilot은 구성을 정의하는 데 도움이되고 서비스 메시 내에서 트래픽 관리를보다 세밀하게 제어 할 수있는 Traffic Management API를 호스팅합니다.

서비스 간의 ID 및 액세스 관리는 Istio의 핵심 기능입니다. Kubernetes pod간에 보안 통신을 허용하는 데 도움이됩니다. 즉, 개발자가 안전하지 않은 TCP로 구성 요소를 설계했지만 Envoy 프록시는 포드 간의 통신이 암호화되도록 보장합니다.

인증서로 모든 포드를 구성하여 어려운 방식으로 상호 TLS를 구현할 수 있습니다. 하지만 대규모 마이크로 서비스 애플리케이션이 있다면 결국 수백 개의 인증서를 관리하게됩니다. Istio는 Citadel이라는 ID 및 액세스 관리자와 인증서 저장소를 제공하여이를 추상화합니다.

Citadel은 어떤 서비스와 통신 할 수 있는지, 그리고 서로를 식별하고 인증하는 방법을 관리하는 데 도움이됩니다.

Citadel은 사용자 인증, 자격 증명 관리, 인증서 관리 및 트래픽 암호화를 제공합니다. 포드에 유효성 검사 자격 증명이 필요한 경우 citadel이 제공합니다.

갤리

교정쇄는 서비스 메시에 대한 구성 유효성 검사, 수집, 처리 및 배포를 제공합니다. Istio 컨트롤 플레인이 상호 작용하는 기본 API에 대한 인터페이스입니다.

예를 들어 새 정책을 적용하면 교정쇄가이를 수집하고 유효성을 검사하고 처리 한 다음 서비스 메시의 올바른 구성 요소로 푸시합니다.

데이터 플레인 구성 요소

데이터 플레인 구성 요소는 Envoy 프록시로 구성됩니다. Istio는 이러한 프록시를 기반으로 서비스 검색을 촉진합니다.

이들은 수신하는 메시지의 내용을 기반으로 중요한 결정을 내릴 수있는 계층 7 프록시입니다. 비즈니스 트래픽과 상호 작용하는 유일한 구성 요소는 Envoy 프록시입니다.

다음을 제공합니다.

  • 동적 서비스 검색.
  • 부하 분산.
  • TLS 종료.
  • 백분율 기반 측정 항목을 사용한 단계적 출시.
  • 오류 주입.
  • 건강 검진.
  • 회로 차단.
  • 원격 측정 데이터 수집.

Istio 는이 데이터를 모니터링하고 시각화하기 위해 즉시 사용 가능한 PrometheusGrafana 를 제공합니다. 또한 해당 데이터를 Elastic Logstash Kibana (ELK) 스택 으로 로그 분석 도구에 전송 하여 추세를 이해하고 이러한 메트릭에 대한 기계 학습을 수행 할 수도 있습니다.

Istio는 사이드카를 사용하여 작동하므로 Kubernetes에서 실행되는 마이크로 서비스 애플리케이션을 다시 설계 할 필요가 없습니다.

개발, 보안 및 운영 팀 사이의 훌륭한 분리기입니다. 개발자는 운영 및 보안 측면에 대해 걱정할 필요없이 예전 방식대로 코드를 개발할 수 있습니다.

보안 및 운영 팀은 Istio를 사용하여 애플리케이션에 사이드카를 삽입 할 수 있으며,이를 통해 사이드카 위에 관리 및 보안 정책을 연결할 수 있습니다.

Envoy 프록시는 다음과 같은 대부분의 Istio 기능을 제공하는 데 도움이됩니다.

  • 트래픽 제어 : HTTP, TCP, Websocket 및 gRPC 트래픽에 대한 라우팅 규칙을 제공하는 등 트래픽이 서비스 메시를 통해 이동하는 방식을 제어하는 ​​데 도움이됩니다.
  • 보안 및 인증 — 올바른 포드 만 다른 포드와 상호 작용할 수 있도록 포드에 대한 ID 및 액세스 관리를 시행합니다. 또한 상호 TLS 및 트래픽 암호화를 구현하여 중간자 (man-in-the-middle) 공격을 방지합니다. 속도 제한을 제공하여 폭주 비용과 서비스 거부 공격을 방지합니다.
  • 네트워크 탄력성 — 재시도, 장애 조치, 회로 차단 및 오류 주입과 같은 네트워크 탄력성 기능을 제공하는 데 도움이됩니다.

구성 요소가 서로 상호 작용하는 방법

Istio가하는 모든 일은 Envoy 프록시를 통하는 것입니다. Istio를 통한 모든 패킷의 일반적인 흐름을 살펴 보겠습니다.

Istio의 이미지

위의 이미지를 보면 Ingress, 두 개의 마이크로 서비스 및 Egress. 서비스 A와 서비스 B는 컨테이너에서 실행되는 마이크로 서비스이며 Envoy 프록시와 동일한 포드를 공유합니다.

Istio는 배포 될 때 Envoy 프록시를 포드에 자동으로 삽입합니다. 서비스 A는 일반적인 구현 에서처럼 프런트 엔드 서비스이고 서비스 B는 백 엔드 서비스입니다.

트래픽 패킷은 다음 단계에 따라 서비스 메시를 통해 이동합니다.

입구

트래픽은 Ingress리소스를 통해 서비스 메시에 도착 합니다. Ingress 는 배치되는 즉시 Pilot에서 구성하는 하나 이상의 Envoy 프록시의 뱅크입니다.

Pilot은 Kubernetes 서비스 엔드 포인트를 사용하여 Ingress프록시 를 구성하고 프록시 Ingress는 백엔드를 인식합니다.

따라서 Ingress는 패킷을 수신 할 때 패킷을 보낼 위치를 인식합니다. 상태 확인 및로드 밸런싱을 수행하고로드, 패킷, 할당량 및 트래픽 밸런싱과 같은 정의 된 지표를 기반으로 메시지를 보내는 지능적인 결정을 내립니다.

서비스 A

Ingress첫 번째 포드로 라우팅 되면 컨테이너 대신 서비스 A 포드의 프록시에 도달 합니다.

사이드카는 마이크로 서비스 컨테이너와 동일한 포드의 일부를 형성하므로 동일한 네트워크 네임 스페이스를 공유하고 동일한 노드에 존재합니다.

두 컨테이너 모두 동일한 IP 주소를 가지며 동일한 IP 테이블 규칙을 공유합니다. 그러면 프록시가 포드를 완전히 제어하고 포드를 통과하는 모든 트래픽을 처리합니다.

Envoy 프록시는 Citadel과 상호 작용하여 시행해야하는 정책이 있는지 파악합니다. 또한 체인을 통한 트래픽을 암호화하고 백엔드 포드로 TLS를 설정해야하는지 확인합니다.

서비스 B

서비스 A는 서비스 A와 동일한 단계를 따라 암호화 된 패킷을 서비스 B로 보냅니다.

추가로 패킷 발신자를 식별하고 소스 프록시와 TLS 핸드 셰이크를 수행합니다.

신뢰가 구축되면 패킷을 받아 서비스 B 컨테이너로 전달하고 체인은 Egress계층으로 이동합니다 .

출구

메시에서 나가는 모든 트래픽은 Egress리소스를 사용 합니다.

Egress어떤 트래픽 계층을 정의 메쉬 및 사용 밖으로 갈 수 Pilot와로 구성 유사 Ingress층을 포함한다.

Egress리소스를 사용하여 아웃 바운드 트래픽을 제한하는 정책을 작성하고 필요한 서비스 만 메시 밖으로 패킷을 전송하도록 허용 할 수 있습니다.

원격 측정 데이터 수집

위의 모든 단계에서 트래픽이 프록시를 통해 이동할 때 원격 분석 데이터를 수집하여 Prometheus로 보낼 수 있습니다.

데이터는 Grafana에서 시각화하거나 ELK와 같은 외부 도구로 전송하여 메트릭의 추가 분석 및 기계 학습을 수행 할 수 있습니다.

결론

읽어 주셔서 감사합니다! 기사가 재미 있었기를 바랍니다.

다음 기사 " Kubernetes에서 Istio 시작하기 "에서는 Istio 설치에 대해 논의하고 샘플 애플리케이션을 사용하여 실습 데모를 수행 할 것입니다. 다음 부분에서 뵙겠습니다!

Suggested posts

애플의 큰 봄 이벤트는 제품의 화려 함이 될 수있다

태블릿, 노트북, M1, 오 마이

애플의 큰 봄 이벤트는 제품의 화려 함이 될 수있다

꾸준한 4 월 강우를 통해 피는 꽃처럼, Apple Spring Product Events는 열렬하지만 충분히 기대됩니다. 영리한 멀티 컬러 봄 디자인으로 자신을 발표하는 올해 봄 제품 이벤트 (미국 동부 표준시 기준 4 월 20 일 오후 1시)는 전적으로 온라인에서 제품 전략과 장치 번호면에서 Apple의 가장 풍부한 행사 중 하나가 될 것입니다.

N + 1 문제 선택

모든 것은 비용이 있습니다.

N + 1 문제 선택

개발자의 경우 ORM (Object-relational mapping)을 사용하면 삶을 상당히 단순화 할 수 있지만 알아야 할 자체 캐치 세트가 있습니다. 더 심각한 문제 중 하나는 Select N + 1 문제입니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.