- Gateways
- virtual Services
- Destination rules
istio의 두번째 기능은 Traffic Management ( 라우팅 ) 이다. 수백 수천개의 마이크로 서비스들 간의 라우팅 체계와 그에 대한 정책들을 istio에서 관리한다.
이를 관리하는 istio의 resource는 Gateway / virtual Service / Destination rule 세가지를 사용한다.
1. GATEWAY
Gateway 리소스는 사용할 istio-ingress-gateway를 입력하는 yaml이다.
또한 어떠한 트래픽을 ingress-gateway로 받아들일지 프로토콜 및 포트를 선택할수 있습니다.
Kubernetes Ingress API와 같이 시스템에 들어오는 트래픽을 제어하는 다른 메커니즘과 달리 Istio 게이트웨이를 사용하면 Istio 트래픽 라우팅의 모든 기능과 유연성을 사용할 수 있습니다.
Istio의 게이트웨이 리소스를 사용하면 노출할 포트, TLS 설정 등과 같은 계층 4-6 로드 밸런싱 속성을 구성할 수 있기 때문에 동일한 API 리소스에 애플리케이션 계층 트래픽 라우팅(L7)을 추가하는 대신 Istio Virtual Service 를 게이트웨이에 바인딩 하여 사용합니다.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
2. Virtual Service
Virtual Service 는 Destination rule과 함께 istio의 핵심 리소스입니다.
Virtual Service 를 사용하면 Istio 및 플랫폼에서 제공하는 기본 연결 및 검색을 기반으로 Istio 서비스 메시 내에서 서비스로 요청을 라우팅하는 방법을 구성할 수 있습니다.
ingress-gateway를 구현하는 Gateway 리소스에 연결하여 istio의 기능들을 사용할수 있으며
핵심적인 기능은 라우팅 방법과 규칙을 구현하는데 있습니다. Istio가 Virtual Service 에 대한 각 요청을 메시 내의 특정 실제 대상 ( kubectl svc ) 과 일치시킬 수 있습니다.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
3. Destination Rule
Virtual Service는 트래픽을 어떤 지정된 대상으로 라우팅하는 방법을 관리하며, weight 옵션을 통해서 가중치를 선정할수 있습니다.
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 75
- destination:
host: reviews
subset: v2
weight: 25
Destination Rule은 Virtual Service와 함께 istio의 핵심 리소스에 속합니다.
Destination Rule은 가상 서비스가 지정해준 트래픽을 어떻게 보내는가에 대한 방법을 관리합니다.
또한 로드밸런싱 규칙이 설정되어 있지 않은 경우 라운드 로빈으로 동일한 트래픽을 분산합니다.
Virtual Service와 마찬가지로 Weighted 옵션을 통해서 가중치를 정하여 로드밸런싱을 할수도 있습니다.
- Random: Requests are forwarded at random to instances in the pool.
- Weighted: Requests are forwarded to instances in the pool according to a specific percentage.
- Least requests: Requests are forwarded to instances with the least number of requests.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-destination-rule
spec:
host: my-svc
trafficPolicy:
loadBalancer:
simple: RANDOM
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
- name: v3
labels:
version: v3
'컨테이너 > istio' 카테고리의 다른 글
[istio] (3) istio Telemetry (0) | 2021.12.09 |
---|---|
[istio] (2) istio 설치 (0) | 2021.12.07 |
[istio] (1) istio란 무엇인가? (0) | 2020.12.21 |