본문 바로가기
WIKI 기술 지식 베이스

ExternalWorkload

원문 보기 위키 갱신

Linkerd의 메시 확장(mesh expansion) 기능을 쓰면 Kubernetes 밖의 워크로드도 메시에 합류시킬 수 있어요.

출처: Linkerd ExternalWorkload

본문

핵심적으로 이 동작은 ExternalWorkload 리소스로 제어돼요. Linkerd는 이 리소스를 사용해서 Kubernetes 밖에 사는 워크로드를 디스커버리와 정책용으로 기술해요. 이 리소스에는 워크로드의 아이덴티티, 구체적인 IP 주소, 이 워크로드가 연결을 받는 포트 같은 정보가 담겨요.

ExternalWorkloads

ExternalWorkload는 포트 집합과 메시 안에서 도달 가능한 IP 주소를 정의하는 네임스페이스 리소스예요. Linkerd는 이 정보를 EndpointSlice로 변환해서 Service 객체에 붙여요.

Spec

  • meshTLS (필수) — 이 워크로드에 암호화된 연결을 맺는 데 Linkerd가 요구하는 아이덴티티 정보를 지정해요.
  • workloadIPs (필수, 최대 1개) — 이 워크로드에 도달 가능한 IP 주소예요.
  • ports — 워크로드가 노출하는 포트 정의 목록이에요.

MeshTLS

  • identity (필수) — 워크로드의 TLS 아이덴티티예요. 프록시는 이 값이 있어야 워크로드와 TLS 연결을 맺을 수 있어요.
  • serverName (필수) — 다른 피어가 TLS 연결을 시작하려고 할 때 워크로드의 프록시가 ClientHello SNI TLS 확장에서 기대하는 값이에요.

Port

  • name — ports 집합 안에서 고유해야 해요. 각 이름 붙은 포트는 서비스가 참조할 수 있어요.
  • port (필수) — 워크로드가 리슨하고 있는 포트 번호예요.
  • protocol — 포트가 노출하는 프로토콜이에요.

Status

  • conditions — 조건(condition) 객체들의 목록이에요.

Condition

  • lastProbeTime — 헬스체크 엔드포인트가 마지막으로 프로브된 시각이에요.
  • lastTransitionTime — 조건이 한 상태에서 다른 상태로 전환된 마지막 시각이에요.
  • status — 조건의 상태예요 (True, False, Unknown 중 하나).
  • type — 조건의 유형이에요 (Ready는 디스커버리 가능 여부를 나타내는 데 쓰여요).
  • reason — 조건의 마지막 전환 이유를 나타내는 프로그램 식별자예요.
  • message — 전환에 대한 세부 사항을 나타내는 사람이 읽을 수 있는 메시지예요.

예제

다음은 여러 포트를 지정하고 서비스가 선택하는 ExternalWorkload 리소스의 예시예요.

apiVersion: workload.linkerd.io/v1beta1
kind: ExternalWorkload
metadata:
  name: external-workload
  namespace: mixed-env
  labels:
    location: vm
    workload_name: external-workload
spec:
  meshTLS:
    identity: "spiffe://root.linkerd.cluster.local/external-workload"
    serverName: "external-workload.cluster.local"
  workloadIPs:
    - ip: 193.1.4.11
  ports:
    - port: 80
      name: http
    - port: 9980
      name: admin
status:
  conditions:
    - type: Ready
      status: "True"
---
apiVersion: v1
kind: Service
metadata:
  name: external-workload
  namespace: mixed-env
spec:
  type: ClusterIP
  selector:
    workload_name: external-workload
  ports:
    - port: 80
      protocol: TCP
      name: http
    - port: 9980
      protocol: TCP
      name: admin

더 알아보기 (Learn more)