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 이 되겠죠.
그리고, protocol 은 HTTPS 입니다.
즉, 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 와 사용되는 경우가 많습니다.