Definir un servicio canónico

{b> Nota: Los servicios canónicos son compatibles de forma automática con la versión 1.6.8 y versiones posteriores de Cloud Service Mesh.

Los servicios canónicos son un grupo de cargas de trabajo que implementan los mismos servicios y las mismas API. Para los tipos de cargas de trabajo compatibles, Cloud Service Mesh crea automáticamente recursos del servicio canónico según la información existente del servidor de la API de Kubernetes. En esta página, se explica qué etiquetas definen de forma automática los servicios canónicos y cómo puedes ajustar los límites de tus servicios de forma manual. Los tipos de instancia de carga de trabajo compatibles actualmente son los siguientes:

  • Pods de Kubernetes (incluidas las implementaciones de Kubernetes, KubeRun, etcétera)
  • Instancias de máquina virtual
  • Servicios externos de malla (específicamente, recursos de ServiceEntry con una ubicación de MESH_EXTERNAL)

Qué define a los servicios canónicos

Cloud Service Mesh determina la membresía del servicio canónico mediante la lectura de la etiqueta service.istio.io/canonical-name en el recurso de configuración de Kubernetes asociado a cada instancia de carga de trabajo:

  • Para los pods, la etiqueta está en el recurso de pod de Kubernetes.
  • Para las VM, la etiqueta es la del recurso WorkloadEntry de Istio
  • Para los servicios externos, la etiqueta está en el recurso ServiceEntry de Istio.

Los servicios canónicos tienen el mismo espacio de nombres de Kubernetes que sus instancias de carga de trabajo asociadas y no pueden abarcar los espacios de nombres.

Reglas de etiquetado automático

Cloud Service Mesh agrupa de forma automática tus cargas de trabajo basadas en Pods y VM en servicios canónicos sin que debas realizar ninguna acción. Solo tienes que hacer lo siguiente:

  • Ajustar etiquetas para brindar claridad al usuario/lector
  • Anular el comportamiento predeterminado

Etiquetado automático en pods de Kubernetes

Los servicios canónicos se enfocan en las etiquetas app.kubernetes.io/name y app de Kubernetes. Ten en cuenta que la etiqueta anterior tiene prioridad. Si usas alguna de estas dos etiquetas en tus cargas de trabajo, no se requiere trabajo adicional.

Etiquetado automático en máquinas virtuales

Para compilar servicios canónicos en tus VM, debes agregarlas a una malla de servicios mediante la configuración de un recurso de WorkloadEntry en tu servidor de la API de Kubernetes.

Etiquetado manual

Para aplicar o anular de forma manual una etiqueta del servicio canónico, aplica la etiqueta service.istio.io/canonical-name a las configuraciones de recursos de carga de trabajo compatibles. Para que un servicio externo se reconozca como un servicio canónico, debes etiquetar de forma manual la ServiceEntry aplicable.

Etiquetado manual en los pods de Kubernetes

Para implementar muchos Pods a la vez mediante un Deployment, configura la etiqueta service.istio.io/canonical-name en PodTemplateSpec:

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:
        ...

Para etiquetar el servicio canónico de un solo pod, agrega la etiqueta service.istio.io/canonical-name a la sección labels de tu configuración de pod:

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

Etiqueta máquinas virtuales de forma manual

Para etiquetar el servicio canónico de una sola VM/WorkloadEntry, agrega la etiqueta service.istio.io/canonical-name a la sección "etiquetas" de tu configuración de WorkloadEntry:

apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
  name: my-vm-123
  namespace: my-namespace
  labels:
    service.istio.io/canonical-name: my-service
spec:
  ...

Etiquetar servicios externos de forma manual

Para etiquetar el servicio canónico de un solo ServiceEntry externo, agrega la etiqueta service.istio.io/canonical-name a la sección “labels” de tu configuración de ServiceEntry:

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
  ...

¿Qué sigue?