Definir un servicio canónico
Nota: Los servicios canónicos se admiten automáticamente en Cloud Service Mesh 1.6.8 y versiones posteriores.
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, La malla de servicios de Cloud crea automáticamente recursos de servicios canónicos basados en información 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 ServiceEntry con una ubicación)
de
MESH_EXTERNAL
)
Qué define a los servicios canónicos
La malla de servicios de Cloud determina la membresía del servicio canónico leyendo el
service.istio.io/canonical-name
etiqueta
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 se encuentra en el recurso ServiceEntry de Istio
Los servicios canónicos tienen el mismo Espacio de nombres de Kubernetes como sus instancias de carga de trabajo asociadas y no pueden abarcar espacios de nombres.
Reglas de etiquetado automático
Cloud Service Mesh agrupa automáticamente tus cargas de trabajo basadas en Pods y VM en Servicios canónicos sin ninguna acción de tu parte.
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 VMs, debes agregar tus VMs a un malla de servicios configurando una Recurso WorkloadEntry en el servidor de la API de Kubernetes.
Etiquetado manual
Para aplicar o anular manualmente una etiqueta de servicio canónico, aplica la
Etiqueta service.istio.io/canonical-name
para el recurso de carga de trabajo compatible
parámetros de configuración.
Para que un servicio externo sea reconocido como Servicio canónico, debes etiquetar manualmente la ServiceEntry aplicable.
Etiquetado manual en los pods de Kubernetes
Para implementar varios Pods a la vez
Implementación,
Configura la etiqueta service.istio.io/canonical-name
en el 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:
...
Etiqueta servicios externos de forma manual
Para etiquetar el servicio canónico de un solo servicio externo o ServiceEntry, agrega el
service.istio.io/canonical-name
etiqueta a las “etiquetas” de tus
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?
- Más información sobre los servicios canónicos
- Más información sobre las prácticas recomendadas para los servicios canónicos