이스티오에 대한 아키텍처 및 기능 소개와 사용법을 소개한다.
요약에서는 실제 사용법을 제거하고 간략화했다
- 서비스 메시: 조건과 토폴로지의 끊임없는 변경과 관계없이, 기대하는 네트워크 동작을 강제하고 워크로드를 위한 정책 기반 네트워크를 제공
- 마이크로 서비스의 관찰(통찰력), 트래픽 제어, 보안 기능을 단일화 하는 인프라 계층
- 어플리케이션 코드와 인프라 관심사의 밀접한 결합을 분리
- 컨테이너 오케스트레이터가 제공하지 못하는 인프라 서비스 수준 요구사항을 달성하기 위해 사용한다
- 주로 메시 내부의 이스트-웨스트 트래픽을 관리하도록 설계한다
- 이스티오의 요약
- 인그레스, 이그레스 게이트웨이: 메시로 들어오고 나가는 데이터에 대한 프록시 역할
- 데이터 플레인: 서비스 프록시를 통해 모든 패킷을 가로채며 상태 확인, 라우팅, 로드 밸런싱, 관찰 데이터 생성 등을 담당한다
- 컨트롤 플레인: 서비스 프록시를 위한 정책 및 구성을 위한 단일 관리 지점 제공
- 관리 플레인: 모니터링, 감사 등 측정과 관련된 플레인
- 컨트롤 플레인의 구성
- 파일럿: 서비스 실행 상태와 위치를 추적하고 기반 플랫폼(ex: k8s)와 동기화 상태를 유지한다
- 갤리: 메시 구성 프로토콜을 구성 제공하거나 배포 매커니즘으로 사용한다
- 기본 구성 레지스트리 역할로 구성 구문의 유효성 검사도 담당
- 믹서: 인프라 백엔드를 추상화하고 할당량 관리 및 메트릭 데이터 전송에 대한 책임을 진다
- 시타델
- mTLS(서로에게 인증서를 제시하는 TLS)를 사용해 강력한 인증을 제공한다
- id 발급 및 회전 담당
- 서비스 프록시
- 서비스의 실제 네트워크 트래픽(헬스 체크, 로드 밸런싱, 라우팅 등)에 관한 조절을 담당한다
- iptables 규칙을 이용하여 트래픽을 투명하게 차단하고 서비스로 리디렉션한다
- 이스티오는 서비스 프록시로 envoy를 사용한다
- 통신을 위해 하나 이상의 리스너를 노출하며 물리적 리스너는 포트 바인딩으로 트래픽을 전달 받고, 가상 리스너는 전달에 사용된다
- 파드-로컬 네트워크(루프백)을 사용해 서비스와 통신한다
- 보안과 id
- 초 단위 워크로드 변경에 대응하기 위해 이스티오에서는 모든 워크로드에 id를 발급한다
- 서비스 메시는 모든 서비스에 id가 할당되는 단일 네임스페이스로 정의 할 수 있다
- 인증
- 시타델에서 id 요청 수락, 인증, 승인 및 인증서 발급을 담당한다
- 노드 에이전트
- 워크로드의 모든 노드에 배포되며 envoy와 시타델 간 간단한 프로토콜 어댑터 역할을 한다
- 신뢰할 수 있는 에이전트로써 워크로드 환경을 검증하고 키를 로컬에 분배한다
- 인가
- 이스티오의 승인 정책은 RBAC 시스템을 사용한다
- 서비스 간의 통신에 초점을 맞추고 서로 간의 통신을 승인하는데 목적이 있다
- 파일럿
- 배포에서의 설정을 프로그래밍하고 환경을 모델링하는 역할
- 메시 구성, 네트워킹 구성, 서비스 디스커버리를 통해 환경 및 배포 상태 모델을 생성
- 트래픽에 영향을 미치는 정책의 정의
- 트래픽 관리
- 역방향 프록시 보다는 envoy의 클라이언트 로드 밸런싱을 이용한다
- URI, 헤더 와 같은 메타데이터로 트래픽 라우팅을 수행할 수 있다
- gateway
- ip 주소 대신 신뢰 경계를 넘는 이름의 노출
- L7이 아닌 L4 동작을 구성
- virtualServices
- 이름으로 주소가 지정된 트래픽이 대상 집합(목적지)로 가는 방법을 설명
- L7 동작을 구성
- 재시도 및 타임 아웃 설정
- serviceEntry
- 이스티오 네트워킹 핵심 API. 클라이언트가 호출을 위해 사용되는 호스트 이름 세트로 서비스를 정의
- 서비스 레지스트리에서 서비스 목록을 추가/제거하는 수단
- destinationRule
- 클라이언트 구성(로드 밸런싱 전략, 커넥션 풀 설정, TLS 설정, 서킷 브레이커 등 )
- 단일 서비스를 레이블 기준의 서브셋으로 분할할 수도 있다
- 게이트웨이
- 인그레스: 클러스터 외부의 클라이언트 측 서비스 프록시 역할
- 이그레스: 내부 클러스터 서비스의 프록시 역할
- 믹서
- 컨트롤 플레인에 위치하여 데이터 플레인과 관리 플레인 사이를 연결하는 역할
- 원격 측정과 정책 시행 두 범주의 기능을 가진다
- 정책 시행
- 사전 조건(ACL, 인증) 확인 및 할당량 관리(속도 제한 등)의 수행
- 2차 캐시로써 동작하여 정책 트래픽 양과 평가 오버헤드를 줄인다
- 원격 측정
- 메트릭, 로그 및 trace 를 추가 할 수 있다
- 속성을 정의하여 원격 측정 서버로 데이터를 전송하는 역할
- 어댑터
- 믹서를 다양한 인프라 모니터링 백엔드와 통합하는 역할
- 추적은 주로 OpenTelemetry 사양을 구현하는 라이브러리 사용
- 로그는 주로 FluentBit 라이브러리 사용
- 디버깅 팁
- 이스티오 구성 요소를 내부 상태를 쉽게 검사하고 조작할 수 있도록 ControlZ 패키지를 제공
- 사용자 UID 1337을 피해서 사용해야 한다 → Envoy 서비스 프록시가 사용함
- 각 포트의 컨테이너 사양에서 containerPortConfiguration 설정을 하지 않으면 Envoy 프록시를 사용하지 않는다
- Pod 구성은 쿠버네티스 NET_ADMIN 기능을 허용해야 한다
- 노스-사우스 트래픽: 서비스 인프라의 바깥과 안쪽의 트래픽을 의미
- 원격 측정에서 가장 가성비가 좋은 것은 분산 추적이고, 가장 저렴한건 메트릭이다
- 포워드 프록시: 성능 향상 및 요청 필터링을 목표로 아웃바운드 트래픽이 초점
- 리버스 프록시: 요청을 보호하고 필터링 및 로드 밸런싱을 목표로 인바운드 트래픽이 초점