표준 서비스 정의

참고: 표준 서비스는 Cloud Service Mesh 버전 1.6.8 이상에서 자동으로 지원됩니다.

표준 서비스는 동일한 서비스 및 API를 구현하는 워크로드 그룹입니다. 지원되는 워크로드 유형의 경우 Cloud Service Mesh는 Kubernetes API 서버의 기존 정보를 기반으로 자동으로 표준 서비스 리소스를 만듭니다. 이 페이지에서는 자동으로 표준 서비스를 정의하는 라벨과 서비스 경계를 직접 조정하는 방법을 설명합니다.

지원되는 워크로드 인스턴스 유형은 다음과 같습니다.

  • Kubernetes 포드 (Kubernetes 배포, Kube Run 서비스 등을 통한 정보 포함)
  • 메시 외부 서비스 (특히 MESH_EXTERNAL 위치의 ServiceEntry 리소스)

무엇이 표준 서비스를 정의하는가?

Cloud Service Mesh는 각 워크로드 인스턴스와 연결된 Kubernetes 구성 리소스에서 service.istio.io/canonical-name 라벨을 읽고 표준 서비스 멤버십을 결정합니다.

  • 포드의 경우 라벨은 Kubernetes 포드 리소스에 있음
  • 외부 서비스의 경우 라벨은 Istio ServiceEntry 리소스에 있습니다.

표준 서비스는 연결된 워크로드 인스턴스와 동일한 Kubernetes 네임스페이스를 가지며 네임스페이스를 포괄할 수 없습니다.

자동 라벨 지정 규칙

Cloud Service Mesh는 개발자 측에서 아무런 조치를 취하지 않아도 워크로드를 표준 서비스로 자동 그룹화합니다. 사용자는 다음과 같은 작업만 수행하면 됩니다.

  • 사용자 또는 독자의 이해를 돕기 위해 라벨 조정
  • 기본 동작을 재정의

Kubernetes 포드에서 자동 라벨 지정

정규 서비스는 Kubernetes app.kubernetes.io/name 및 app 라벨 주변에 중점을 둡니다. 이때 이전 라벨이 우선 적용됩니다. 워크로드에서 이 두 라벨 중 하나를 사용하면 추가 작업이 필요하지 않습니다.

수동 라벨 지정

표준 서비스 라벨을 수동으로 적용하거나 재정의하려면 지원되는 워크로드 리소스 구성에 service.istio.io/canonical-name 라벨을 적용합니다. 외부 서비스를 표준 서비스로 인식하려면 해당 ServiceEntry에 수동으로 라벨을 지정해야 합니다.

Kubernetes pod에서 수동 라벨 지정

배포를 사용하여 여러 포드를 한 번에 배포하려면 PodTemplateSpec에서 service.istio.io/canonical-name 라벨을 설정하세요.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  namespace: my-namespace
spec:
  replicas: 3
  template:
    metadata:
      labels:
        service.istio.io/canonical-name: my-service
    spec:
      containers:
        ...

단일 pod의 표준 서비스에 라벨을 지정하려면 pod 구성의 labels 섹션에 service.istio.io/canonical-name 라벨을 추가합니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-test-pod
  namespace: my-namespace
  labels:
    service.istio.io/canonical-name: my-service
spec:
  ...

외부 서비스 수동 라벨 지정

단일 외부 서비스/ServiceEntry의 표준 서비스에 라벨을 지정하려면 ServiceEntry 구성의 'labels' 섹션에 service.istio.io/canonical-name 라벨을 추가합니다.

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: example-com
  namespace: my-namespace
  labels:
    service.istio.io/canonical-name: an-external-service
spec:
   location: MESH_EXTERNAL
  ...

다음 단계