하에서는 Mirroring과 Outbound Traffic Control을 알아보겠다. 

 

Mirroring

미러링은 실시간 트래픽을 다른 서비스로 복제하여 보내는 기술이다. 즉 v1으로 트래픽이 왔을 때 v2로도 트래픽이 복제돼서 보내진다. 

 

 

하는 방법은 어렵지 않고, VirtualService를 조금만 수정해 주면 된다.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: test
spec:
hosts:
- "test.io"
gateways:
- test-gateway
http:
- route:
- destination:
host: test
subset: version-v1
weight: 100
mirror: # 트래픽이 미러링 됨
host: test
subset: version-v2

 

요청을 보내보고, v2파드에서 로그를 확인해보면 된다. 

 

Outbound Traffic Control

Istio는 외부 서비스로 나가는 아웃바운드 트래픽도 제어할 수 있고 모니터링할 수 있다. 이는 외부 트래픽에 대한 정책을 정의하거나 허가되지 않은 트래픽을 차단하는 데 사용할 수 있다.

K8s Service의 엔드포인트들은 Service Registry에 모이게 된다. ALLOW_ANY옵션이 디폴트로 외부로 트래픽을 보낼 수 있지만 아래처럼 REGISTRY_ONLY로 설정했을 때 외부의 엔드포인트들은 없기에 외부로 트래픽이 나갈 수 없게 된다. 

istioctl install --set profile=demo \
--set meshConfig.outboundTrafficPolicy.mode=REGISTRY_ONLY

 

이때 Service Entry라는 것을 설정해주면 Service Regsitry에 등록돼 사용할 수 있게 된다.

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: naver-test
spec:
hosts:
- naver.com
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS

 

이전에는 naver.com의 요청이 나갈 수 없었지만 이렇게 등록한 후에는 가능하다.

 

또한 위의 방법으로 ALLOW_ANY인 상태에서 외부로 트래픽을 보낼 수는 있지만, Passthrough 상태로 인식돼서 모니터링 매트릭이 빈약하게 수집되는 문제 또한 해결할 수 있다.