Search

Istio ServiceEntry - 외부 서비스에 대한 흐름 파악을 위한 가시성 확보

생성일
2024/11/16 07:17
Category
Kubernetes
태그
Istio
ServiceMesh

Istio ServiceEntry - 외부 서비스에 대한 흐름 파악을 위한 가시성 확보

Istio ServiceEntry 란?

ServiceEntry 는 Istio 의 다채로운 여러가지 기능 중 한가지 입니다.
ServiceEntry 는 보이지 않는 트래픽에 대해서도 확인이 가능하도록 해줍니다.
만약 Istio 를 사용하지 않는다면 가늠조차 해볼 수 없을텐데요.
그만큼 Istio 를 잘 활용하고, 잘 사용한다면 Kubernetes 인프라 환경에서 여러가지 시도를 해볼 수 있도록 해줍니다.

외부 트래픽에 대한 모니터링

Kubernetes 환경에서 애플리케이션이 외부 서비스로 트래픽을 보낼 때, 어떤 외부 서비스로 빠져나가는지 알 수 있는 방법은 기본적으로는 없습니다.
또한, Istio 가 있는 환경에서도 외부 트래픽이 어디로 빠져나가는지 알 수 없는데요.

PassthroughCluster

Istio 에서 외부 트래픽에 대한 대상은 아래처럼 PassthroughCluster 로 표시가 됩니다.

ServiceEntry - HTTPS

서두에 설명했던 것처럼 애플리케이션에서 외부로 빠져나가는 트래픽에 대한 흐름을 파악하고 모니터링을 할 수가 있습니다.
ServiceEntry 에서도 여러가지 옵션을 사용할 수 있습니다.
예를들어, 아래와 같이 HTTPS 기반인 경우 아래처럼 구성할 수 있습니다.
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: foobar-https namespace: foobar spec: hosts: - www.naver.com location: MESH_EXTERNAL ports: - number: 443 name: https protocol: HTTPS resolution: DNS
JSON
복사
HTTPS
주요 라인에 대해 하나씩 살펴보죠.
hosts 는 애플리케이션이 연결되는 외부 서비스의 식별자 입니다.
아래에서는 www.naver.com 이 되겠죠.
그리고, protocolHTTPS 입니다.
즉, https://www.naver.com 로 호출이 되는 것이죠.

ServiceEntry - TCP

특정 Port 를 사용하는 경우 위와 같이 HTTPS 를 사용하면 serviceEntry 는 정상적으로 동작하지 않습니다.
예를들어, DB 나 Kafka 처럼 특정 Port 를 사용하는 서비스라면 TCP Port 를 명시해서 사용해야 하는데요.
바로 아래처럼 말이죠.
kind: ServiceEntry metadata: name: foobar-tcp spec: hosts: - seoul.foo.bar.com addresses: - 10.10.10.20 ports: - name: tcp-foobar number: 8088 protocol: TCP resolution: DNS location: MESH_EXTERNAL
YAML
복사
TCP
보이시나요?
TCP 를 사용하려면 addresses 도 추가해줘야 합니다.
여기서 resolution 라는 필드가 눈에 띄는데요.
이 옵션은 아래에서 설명 하도록 하겠습니다.

Resolution

resolution 필드는 Istio 가 트래픽을 라우팅할 대상을 결정하는 방법에 대한 정의입니다.
가능한 옵션은 아래와 같습니다.

NONE

트래픽을 별도의 DNS 조회 없이 전달합니다.
어떤 경우에 사용 되나요?
외부 서비스가 아닌 IP 주소나 CIDR 범위를 대상으로 하는 경우
예) addresses 에 IP범위를 지정하고, DNS hosts 를 사용하지 않는 경우
protocol: TCP 와 사용되는 경우가 많습니다.

STATIC

Static(고정) IP 주소를 사용합니다.
어떤 경우에 사용 되나요?
트래픽 대상이 고정 IP 주소로만 접근 가능한 경우
예) DB 서버나 특정 IP 로 제한된 네트워크 장치에 접근하는 경우
hosts 대신 addresses 를 사용합니다.

DNS

DNS hosts 를 사용하여 트래픽 대상을 동적으로 확인합니다.
어떤 경우에 사용 되나요?
외부 또는 내부 DNS 기반 hosts 이름으로 서비스를 라우팅하는 경우
예) hosts 에 DNS 이름을 명시하는 일반적인 상황의 경우
protocol: HTTPS 와 사용되는 경우가 많습니다.