Definir un servicio canónico
Nota: Los servicios canónicos se admiten automáticamente en Cloud Service Mesh versión 1.6.8 y posteriores.
Los servicios canónicos son un grupo de cargas de trabajo que implementan los mismos servicios y APIs. En el caso de los tipos de cargas de trabajo admitidos, Cloud Service Mesh crea automáticamente recursos de servicio canónico a partir de la información del servidor de la API de Kubernetes. En esta página se explica qué etiquetas definen automáticamente los servicios canónicos y cómo puedes ajustar manualmente los límites de tus servicios. Los tipos de instancias de carga de trabajo admitidos actualmente son los siguientes:
- Pods de Kubernetes (incluidos los de los despliegues de Kubernetes, los servicios de ejecución de Kube, etc.)
- Instancias de máquina virtual
- Servicios externos a la malla (en concreto, recursos ServiceEntry con un valor de location
de
MESH_EXTERNAL
)
Qué define los servicios canónicos
Cloud Service Mesh determina la pertenencia al servicio canónico leyendo la service.istio.io/canonical-name
etiqueta
del recurso de configuración de Kubernetes asociado a cada instancia de carga de trabajo:
- En el caso de los pods, la etiqueta se encuentra en el recurso de pod de Kubernetes.
- En el caso de las VMs, la etiqueta del recurso WorkloadEntry de Istio
- En el caso de 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 que sus instancias de carga de trabajo asociadas y no pueden abarcar espacios de nombres.
Reglas de etiquetado automáticas
Cloud Service Mesh agrupa automáticamente tus cargas de trabajo basadas en pods y máquinas virtuales en servicios canónicos sin que tengas que hacer nada. Solo tienes que hacer lo siguiente:
- Ajustar las etiquetas para que los usuarios o lectores las entiendan mejor
- Anula el comportamiento predeterminado.
Etiquetado automático en pods de Kubernetes
Los servicios canónicos se centran en las etiquetas app.kubernetes.io/name
y app
de Kubernetes. Ten en cuenta que la primera etiqueta tiene prioridad.
Si usas alguna de estas dos etiquetas en tus cargas de trabajo, no tienes que hacer nada más.
Etiquetado automático en máquinas virtuales
Para crear servicios canónicos en tus VMs, debes añadir tus VMs a una malla de servicios configurando un recurso WorkloadEntry en tu 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
a las configuraciones de recursos de carga de trabajo compatibles.
Para que un servicio externo se reconozca como un servicio canónico, debes etiquetar manualmente el ServiceEntry aplicable.
Etiquetado manual en pods de Kubernetes
Para implementar muchos pods a la vez mediante un Deployment (Despliegue),
define 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, añade la etiqueta service.istio.io/canonical-name
a la sección labels
de la configuración del pod:
apiVersion: v1
kind: Pod
metadata:
name: my-test-pod
namespace: my-namespace
labels:
service.istio.io/canonical-name: my-service
spec:
...
Etiquetar máquinas virtuales manualmente
Para etiquetar el servicio canónico de una sola VM o WorkloadEntry, añade la etiqueta service.istio.io/canonical-name
a la sección "labels" de la 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 manualmente
Para etiquetar el servicio canónico de un único servicio externo o ServiceEntry, añade la etiqueta service.istio.io/canonical-name
a la sección "labels" de la 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
...
Siguientes pasos
- Información sobre los servicios canónicos
- Consulta las prácticas recomendadas de los servicios canónicos.