k8s - Istio를 이용한 CORS 설정

dddwsd·2022년 5월 25일
0

Istio 알아보기

service mesh란?

Service mesh는 API등을 통해 마이크로 서비스간의 통신을 안전하고, 빠르고, 신뢰할 수 있게 만들기 위해 설계된 전용 인프라 계층이다.

Service mesh는 보통 Application 서비스에 경량화 Proxy를 sidecar방식으로 배치하여 서비스간 통신을 제어하며 service discovery, load balancing, dynamic request routing, retry and timeout, TLS, Metric 수집, Access control, A/B testing 등의 기능을 지원한다

MSA 시스템에서 수백개의 마이크로 서비스가 동작할 수 있기 때문에 이를 관리하기는 매우 복잡하며 이들 사이의 network에 대한 latency, reliability, stability를 보장할 수 없다.
이러한 문제점들을 application 단에서 해결할 수도 있지만 application language & runtime에 dependency가 생기고, 기능 변경을 할 때마다 비용이 발생하기 때문에 마이크로 서비스를 운영할 때는 별도의 소스 수정이 필요없이 인프라 레벨에서 안정적으로 관리할 수 있는 service mesh가 필요하다.

Istio란?

Istio는 service mesh를 구현할 수 있는 오픈소스 솔루션이다.
Istio를 통해 서비스 코드 변경 없이 로드밸런싱, 서비스 간 인증, 모니터링 등을 적용하여 마이크로 서비스를 쉽게 관리할 수 있다.

마이크로 서비스 간의 모든 네트워크 통신을 담당할 수 있는 proxy인 enovy를 sidecar pattern으로 마이크로 서비스들에 배포한 다음 proxy들의 설정값 저장 및 관리/감독을 수행하고, proxy들에 설정값을 전달하는 컨트롤러 역할을 수행한다.

각각의 마이크로 서비스에 sidecar pattern으로 배포된 Enovy proxy를 Data plane이라 하고, Data plane을 컨트롤하는 부분을 Control Plane이라 한다.

cf-1) proxy란?
보안상의 문제를 방지하기 위해 직접 통신하지 않고 중계자를 거친다는 개념이다.
client <-> proxy server <-> internet

cf-2) sidecar
application container와 독립적으로 동작하는 별도의 conatiner를 붙이는 패턴이다. 이 때문에 application container의 수정없이 독립적으로 동작하는 container를 붙였다 뗄 수 있다.

Istio 구조


Data Plane

  • Enovy Proxy 세트로 구성되어 있다. Enovy는 sidecar 방식으로 각각의 마이크로 서비스에 배포되어 서비스로 들어오고 나가는 모든 트래픽을 통제한다.
  • Enovy를 통해서 서비스를 호출할 때 호출하는 서비스의 IP주소는 Pilot에 저장된 endpoint 정보를 활용하게 된다.

Control Plane

  • Istiod라는 모듈을 통해 Data plane인 Enovy를 control하는 부분이다.
  • service discovery, configuration management, certificate management등을 수행한다.

CORS란?

CORS는 Cross-Origin REsource Sharing의 약자로 HTTP-header를 통해서 실행중인 web application이 다른 위치의(도메인, 프로토콜, 포트) resource에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제다.

web application은 다른 위치(도메인, 프로토콜, 포트)에 있는 resource를 요청하려면 cross-origin HTTP 요청을 실행한다. 이때 브라우저는 보안상의 이유로 스크립트 안에서 시작되는 cross-origin HTTP 요청들을 제한한다.
ex) front-end code가 https://ddwsd1.com에서 https://dddwsd2.com/data.json에 대한 요청을 하면 이것이 cross-origin HTTP 요청이다.

Refer

profile
Github - https://github.com/dddwsd

0개의 댓글