Istio WorkloadEntry
개요
워크로드 엔트리는 쿠버네티스 클러스터 외부의 워크로드를 서비스 메시 내부로 관리하기 위한 리소스이다.
워크로드엔트리는 서비스 메시 내에서 파드와 같이 워크로드 최소 단위로서 인식된다.
그래서 디플로이먼트가 그러하듯 이스티오 워크로드그룹을 통해 워크로드 엔트리를 통합적으로 관리하는 것이 일반적이다.
배경 - 가상 머신의 워크로드를 관리하자
일단 클러스터 외부의 워크로드를 서비스 메시 통합적으로 관리하는 상황을 생각해보자.
간단한 접근법 중 하나는 해당 워크로드에 대한 엔드포인트만 관리해서 하나의 서비스로 인식하는 것이다.
이스티오에서 클러스터 외부의 엔드포인트를 서비스로서 관리할 때는 이스티오 서비스엔트리를 활용한다.[1]
특정 호스트를 서비스로 인식하여 관리하는 것만으로 치자면 이걸로 충분하다.
그런데 가상 머신과의 통합을 통해 클러스터 외부의 워크로드를 아예 메시 환경으로 편입시킬 때는 조금 아쉬운 측면이 있다.
가상머신에 엔보이를 구동시키고 클러스터 내부 신원을 제공해서 istiod와 통신을 하게 했다고 쳐보자.
쿠버네티스 클러스터에서는 파드, 서비스를 통해 워크로드와 서비스 개념을 분리시켜 관리한다.
이때 파드는 라벨, 상태, 신원 정보를 가지고 있어 이를 기반으로 상세한 관리가 가능하다.
실제 이스티오를 운영하는 관리자는 해당 워크로드를 향한 설정을 이스티오 네이티브하게 관리할 수 있는 것이 좋을 것이다.
구체적으로 다음의 작업들을 하고 싶을 수 있다.
- 트래픽 라우팅 및 로드밸런싱
- 헬스 체크 기반 엔드포인트 관리 - 근데 이건 사실 이스티오 워크로드그룹를 통해야만 할 수 있다.
그래서 가상 머신에 대해서도 파드와 같은 수준의 정보를 세팅하고 관리할 수 있도록 고안된 것이 이 워크로드 엔트리이다.
이를 위해 워크로드 엔트리는 외부의 워크로드와 1:1로 매핑되도록 설계됐다.
기본 사용법
apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
name: details-svc
spec:
serviceAccount: details-legacy
address: 2.2.2.2
labels:
app: details-legacy
instance-id: vm1
---
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
targetPort: 8080
resolution: STATIC
workloadSelector:
labels:
app: details-legacy
가장 기본적인 사용법으로, 일단 워크로드 엔트리에는 실제 가상머신의 주소, 그리고 해당 머신이 신원으로 사용하는 서비스 어카운트, 라벨 셀렉터를 위한 라벨을 명시한다.
그 이후에는 이스티오 서비스엔트리를 통해 해당 워크로드가 가지는 호스트 이름과 통신 포트 등을 설정해주면 된다.
이렇게 세팅되면 이제 메시 내에서 details.bookinfo.com
으로 향하는 트래픽은 해당 가상머신으로 향할 수 있게 될 것이다.
IP를 고정하지 않고 address
필드에 도메인 이름을 써넣고, 서비스 엔트리 resolution: DNS
로 설정해서 트래픽을 보내는 클라 측에서 알아서 dns 리졸빙하게 하는 것도 가능하다.
당연히 이 리소스를 만든다고 갑자기 뚝딱 가상머신이 연결되고 그런 게 아니다!
가상머신에 연결 세팅을 다 해두고, 그 놈을 파드 다루듯 이스티오 네이티브하게 추적할 수 있게 매핑을 시키는 리소스로서 이해하자.
그래서 워크로드가 실제로 이스티오에 연결되면 status
필드에 상태 정보 등이 파드처럼 출력된다.
양식 작성법
apiVersion: networking.istio.io/v1
kind: WorkloadEntry
metadata:
name: details-svc
spec:
labels:
app: details-legacy
instance-id: vm1
serviceAccount: details-legacy
address: 2.2.2.2
ports:
http: 8080
grpc: 9090
network: ap-northeast-2
사용할 필드가 많지는 않다.
- labels - 이 워크로드를 라벨 셀렉터할 때 사용할 라벨로, 이걸 기반으로 서비스 엔트리를 매핑시킬 수 있게 된다.
- servicAccount - 워크로드의 신원으로 사용되는 서비스 어카운트를 나타낸다.
- address - 주소
- ip 주소를 써도 되고, 도메인 이름을 써도 된다.
- 해당 워크로드가 다른 쿠버 클러스터에 있는 경우 생략해도 된다.
- 그럼 라벨과 network 필드를 기반으로 원격 kube-apiserver로부터 정보를 읽어와 채워지게 된다.
- ports
- 파드에서 포트를 사용하는 것과 같다.
- 당연히 컨테이너 관련 개념은 아니므로 파드 양식과 같진 않다.
- 사실 그냥 서비스 엔트리에서 타겟 포트 명시가 가능해서 혼란스럽지 않게 하려면 설정 안 하는 게 낫다.
- network - L3 레벨 구분자.
- 같은 네트워크로 인식되면 클라는 해당 주소로 바로 요청을 날리게 된다.
- 아니라면 게이트웨이를 거치도록 설정된다.
- locality - 지역성 정보.
- weight - 로드밸런싱 시 사용될 가중치
관련 문서
EXPLAIN - 파생 문서
이름1 | related | 생성 일자 |
---|---|---|
이스티오 가상머신 통합 | 이스티오 확장성 | 2025-06-01 13:32 |
기타 문서
Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완이름1 | 코드 | 타입 | 생성 일자 |
---|---|---|---|
8W - 가상머신 통합하기 | Z8 | published | 2025-06-01 12:11 |