Istio ServiceEntry
개요
서비스 메시 내의 구성원은 서비스 레지스트리를 통해 서로의 주소를 파악하고 관리한다.
이스티오는 컨트롤 플레인이 이 서비스 레지스트리를 관리하며 각 프록시에게 필요한 주소의 정보를 알려준다.
그러나 이스티오 이그레스 게이트웨이를 만들 때 하나의 문제가 발생하는데, 바로 클러스터 외부의 주소는 서비스 레지스트리에 기본적으로 등록되지 않는 주소라는 점이다.
그래서 서비스 메시 내의 서비스가 아닌 주소를 서비스 레지스트리에 등록하기 위해, 서비스 진입점을 만드는 리소스가 바로 ServiceEntry이다.[1]
이 리소스를 만들면, Gateway나 VirtualService에서 해당 주소에 대해 여러 설정을 할 수 있게 된다.
워크로드 엔트리와의 관계는 조금 더 공부하고 정리하겠다.
ServiceEntry 양식 작성법
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: httpbin-ext
spec:
hosts:
- httpbin.org
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
location: MESH_EXTERNAL
어떤 식으로 작성하는지 간단하게 설명한 후에 기능들을 살펴보겠다.
일단 hosts
와 ports
필드를 통해 어떤 호스트, 포트를 진입점으로 등록할 것인지 명시한다.
addresses:
- 192.192.192.192/24
endpoints:
- address: us.foo.bar.com
ports:
http: 8080
addresses
필드는 이 진입점으로 들어오기 위한 IP 대역을 나타낸다.
가상 IP라고 보면 되겠다.
endpoints
는 실제 트래픽을 보내야할 엔드포인트를 나타낸다.
이 필드가 있으면 기본적으로 서비스 엔트리가 등록될 때 hosts
필드를 이용해 DNS 쿼리를 날리지 않고, 이 주소를 사용한다.
location
필드에는 두 가지 값이 가능하다.
- MESH_EXTERNAL - 서비스가 메시 외부에 있음을 나타낸다.
- MESH_INTERNAL - 메시 내부에 있긴 하나 레지스트리에 등록되지 않은 서비스를 등록할 때 사용한다.
- 가령 클러스터 외부에 VM을 메시 내부로 들이고 싶을 때 설정한다.
- 이렇게 설정되면 서비스 간 mTLS 설정이나, 정책 적용의 영향을 받게된다.
resolution
필드는 프록시가 IP 주소를 알아내어 어떻게 라우팅할지를 지정한다.
- DNS - 일반적인 DNS 방식으로, 보통은
hosts
필드의 도메인을 보고 질의하여 IP 주소를 알아낸다. - NONE - 들어오는 요청이 이미 자체적으로 IP 주소 질의를 마쳤다고 가정한다.
- STATIC -
endpoints
필드에 명시된 IP 주소만 사용한다. - DNS_ROUND_ROBIN - DNS 로드밸런싱을 쓰는 환경에서 각 연결은 첫번째로 연결된 주소로만 연결되도록 보장한다.
예시
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: external-svc-mongocluster
spec:
hosts:
- mymongodb.somedomain # not used
addresses:
- 192.192.192.192/24 # VIPs
ports:
- number: 27018
name: mongodb
protocol: MONGO
location: MESH_INTERNAL
resolution: STATIC
endpoints:
- address: 2.2.2.2
- address: 3.3.3.3
addresses
필드로 몽고 디비로 가야할 트래픽 ip 대역을 정했다.
실제 트래픽은 endpoints
에 명시된 2.2.2.2, 3.3.3.3으로 가게 될 것이다.
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: external-svc-httpbin
namespace : egress
spec:
hosts:
- example.com
exportTo:
- "."
location: MESH_EXTERNAL
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
exportTo
필드는 이 서비스 엔트리 진입점을 인식하는 네임스페이스를 제한할 수 있다.
위 예시는 egress 네임스페이스에서만 사용할 수 있도록 한다.
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: external-svc-dns
spec:
hosts:
- foo.bar.com
location: MESH_EXTERNAL
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
endpoints:
- address: us.foo.bar.com
ports:
http: 8080
- address: uk.foo.bar.com
ports:
http: 9080
- address: in.foo.bar.com
ports:
http: 7080
엔드포인트로 도메인을 지정하는 것도 가능하다.
이 경우 HTTP_PROXY=http://localhost/
환경변수를 둔 상태로 foo.bar.com
에 요청을 하게 되면 세 엔드포인트 중 하나로 가게 된다고 한다.
(문서만 봤을 때는 잘 와닿지 않아서 테스트해봐야겠다.)
apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
name: details-svc
spec:
hosts:
- details.bookinfo.com
location: MESH_INTERNAL
ports:
- number: 80
name: http
protocol: HTTP
resolution: STATIC
workloadSelector:
labels:
app: details
프록시가 세팅되지 않은 클러스터의 워크로드에 대한 진입점을 등록할 때 workloadSelector
를 써주면 유용하다.
관련 문서
이름 | noteType | created |
---|---|---|
25.05 테크니컬 라이팅 | area | 2025-05-07 |
Envoy | knowledge | 2025-04-07 |
Istio Telemetry | knowledge | 2025-04-08 |
Istio Gateway | knowledge | 2025-04-16 |
Istio ServiceEntry | knowledge | 2025-04-17 |
Istio VirtualService | knowledge | 2025-04-21 |
Istio DestinationRule | knowledge | 2025-04-21 |
Istio EnvoyFilter | knowledge | 2025-04-21 |
Istio WasmPlugin | knowledge | 2025-04-21 |
아르고 롤아웃과 이스티오 연계 | knowledge | 2025-04-22 |
pilot-agent | knowledge | 2025-04-28 |
Kiali | knowledge | 2025-04-28 |
Istio PeerAuthentication | knowledge | 2025-05-04 |
Istio RequestAuthentication | knowledge | 2025-05-04 |
Istio AuthorizationPolicy | knowledge | 2025-05-04 |
Istio Operator | knowledge | 2025-05-09 |
istioctl | knowledge | 2025-05-12 |
Istio Sidecar | knowledge | 2025-05-13 |
Istio ProxyConfig | knowledge | 2025-05-17 |
istiod | knowledge | 2025-05-18 |
사이드카 모드 | knowledge | 2025-05-18 |
메시 배포 모델 | knowledge | 2025-05-21 |
Istio WorkloadGroup | knowledge | 2025-05-26 |
Istio WorkloadEntry | knowledge | 2025-05-26 |
앰비언트 모드 | knowledge | 2025-06-02 |
책 내용 정리 | project | 2025-04-03 |
스터디 내용 사전 정리 | project | 2025-04-03 |
1주차 - istio 소개, 첫걸음 | project | 2025-04-06 |
2주차 - 엔보이, 게이트웨이 | project | 2025-04-13 |
3주차 - 트래픽 관리 | project | 2025-04-19 |
3주차 - 네트워크 복원력 | project | 2025-04-23 |
4주차 - 이스티오 관측가능성 | project | 2025-04-27 |
5주차 - 통신 보안 | project | 2025-05-04 |
6주차 - 디버깅 | project | 2025-05-11 |
7주차 - 스케일링, 멀티 클러스터 | project | 2025-05-18 |
1W - 서비스 메시와 이스티오 | published | 2025-04-10 |
1W - 간단한 장애 상황 구현 후 대응 실습 | published | 2025-04-10 |
1W - Gateway API를 활용한 설정 | published | 2025-04-10 |
1W - 네이티브 사이드카 컨테이너 이용 | published | 2025-04-10 |
2W - 인그레스 게이트웨이 실습 | published | 2025-04-17 |
2W - 엔보이 | published | 2025-04-19 |
3W - 버츄얼 서비스를 활용한 기본 트래픽 관리 | published | 2025-04-22 |
3W - 트래픽 가중치 - flagger와 argo rollout을 이용한 점진적 배포 | published | 2025-04-22 |
3W - 트래픽 미러링 패킷 캡쳐 | published | 2025-04-22 |
3W - 서비스 엔트리와 이그레스 게이트웨이 | published | 2025-04-22 |
3W - 데스티네이션 룰을 활용한 네트워크 복원력 | published | 2025-04-26 |
3W - 타임아웃, 재시도를 활용한 네트워크 복원력 | published | 2025-04-26 |
4W - 이스티오 메트릭 확인 | published | 2025-05-03 |
4W - 이스티오 메트릭 커스텀, 프로메테우스와 그라파나 | published | 2025-05-03 |
4W - 번외 - 트레이싱용 심플 메시 서버 개발 | published | 2025-05-03 |
4W - 오픈텔레메트리 기반 트레이싱 예거 시각화, 키알리 시각화 | published | 2025-05-03 |
5W - 이스티오 mTLS와 SPIFFE | published | 2025-05-11 |
5W - 이스티오 JWT 인증 | published | 2025-05-11 |
5W - 이스티오 인가 정책 설정 | published | 2025-05-11 |
6W - 이스티오 설정 트러블슈팅 | published | 2025-05-18 |
6W - 이스티오 컨트롤 플레인 성능 최적화 | published | 2025-05-18 |
8W - 가상머신 통합하기 | published | 2025-06-01 |
8W - 엔보이와 iptables 뜯어먹기 | published | 2025-06-01 |
9W - 앰비언트 모드 구조, 원리 | published | 2025-06-07 |
9W - 앰비언트 헬름 설치, 각종 리소스 실습 | published | 2025-06-07 |
7W - 이스티오 메시 스케일링 | published | 2025-06-09 |
7W - 엔보이 필터를 통한 기능 확장 | published | 2025-06-09 |
이스티오 스케일링 | topic | 2025-05-18 |
엔보이에 와즘 플러그인 적용해보기 | topic | 2025-06-09 |
E-이스티오 설정 트러블슈팅하기 | topic/explain | 2025-05-18 |
E-이스티오 컨트롤 플레인 성능 최적화 | topic/explain | 2025-05-18 |
E-이스티오 컨트롤 플레인 메트릭 | topic/explain | 2025-05-18 |
E-이스티오의 데이터 플레인 트래픽 세팅 원리 | topic/explain | 2025-05-27 |
E-deb 파일 뜯어보기 | topic/explain | 2025-06-01 |
E-이스티오 DNS 프록시 동작 | topic/explain | 2025-06-01 |
E-이스티오 가상머신 통합 | topic/explain | 2025-06-01 |
E-이스티오에서 엔보이 기능 확장하기 | topic/explain | 2025-06-01 |
E-앰비언트 모드 헬름 세팅 | topic/explain | 2025-06-03 |
E-앰비언트 ztunnel 트래픽 경로 분석 | topic/explain | 2025-06-07 |
E-앰비언트 모드에서 메시 기능 활용 | topic/explain | 2025-06-07 |
E-이스티오 메시 스케일링 | topic/explain | 2025-06-08 |
E-istio-csr 사용 실습 | topic/explain | 2025-06-09 |
I-다른 네임스페이스 같은 포트 리스닝 서버 구현 | topic/idea | 2025-06-07 |
I-ztunnel이 다른 네임스페이스에서 요청 보내는 코드 분석 | topic/idea | 2025-06-07 |
T-엔보이 실습 with solo.io | topic/temp | 2025-04-14 |