Definir um serviço canónico
Nota: os serviços canónicos são suportados automaticamente na versão 1.6.8 e superiores do Cloud Service Mesh.
Os serviços canónicos são um grupo de cargas de trabalho que implementam os mesmos serviços e APIs. Para os tipos de carga de trabalho suportados, o Cloud Service Mesh cria automaticamente recursos de serviço canónico com base nas informações existentes do servidor da API Kubernetes. Esta página explica o que são as etiquetas que definem automaticamente os serviços canónicos e como pode ajustar manualmente os limites dos seus serviços. Os tipos de instâncias de cargas de trabalho atualmente suportados são:
- Pods do Kubernetes (inclusive através de implementações do Kubernetes, serviços do Kube Run, etc.)
 - Instâncias de máquinas virtuais
 - Serviços externos de malha (especificamente, recursos ServiceEntry com uma localização de 
MESH_EXTERNAL) 
O que define os serviços canónicos
O Cloud Service Mesh determina a associação ao serviço canónico lendo a etiqueta  no recurso de configuração do Kubernetes associado a cada instância de carga de trabalho:service.istio.io/canonical-name
- Para os pods, a etiqueta está no recurso de pod do Kubernetes
 - Para VMs, a etiqueta no recurso WorkloadEntry do Istio
 - Para serviços externos, a etiqueta encontra-se no recurso ServiceEntry do Istio
 
Os serviços canónicos têm o mesmo namespace do Kubernetes que as respetivas instâncias de carga de trabalho associadas e não podem abranger namespaces.
Regras de etiquetagem automática
A malha de serviços na nuvem agrupa automaticamente as suas cargas de trabalho baseadas em VMs e pods em serviços canónicos sem que tenha de fazer nada. Só tem de tomar medidas para:
- Ajuste as etiquetas para maior clareza para o utilizador/leitor
 - Substitua o comportamento predefinido.
 
Etiquetagem automática em pods do Kubernetes
Os serviços canónicos focam-se nas etiquetas app.kubernetes.io/name e app do Kubernetes. Tenha em atenção que a etiqueta anterior tem precedência.
Se usar qualquer uma destas duas etiquetas nas suas cargas de trabalho, não é necessário fazer mais nada.
Etiquetagem automática em máquinas virtuais
Para criar serviços canónicos nas suas VMs, tem de adicionar as VMs a uma malha de serviços configurando um recurso WorkloadEntry no servidor da API Kubernetes.
Etiquetagem manual
Para aplicar ou substituir manualmente uma etiqueta de serviço canónico, aplique a etiqueta service.istio.io/canonical-name às configurações de recursos de carga de trabalho suportadas.
Para que um serviço externo seja reconhecido como um serviço canónico, tem de etiquetar manualmente a ServiceEntry aplicável.
Etiquetagem manual em pods do Kubernetes
Para implementar muitos pods em simultâneo através de uma
implementação,
defina a etiqueta service.istio.io/canonical-name no 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 o serviço canónico de um único pod, adicione a etiqueta service.istio.io/canonical-name à secção labels da configuração do pod:
apiVersion: v1
kind: Pod
metadata:
  name: my-test-pod
  namespace: my-namespace
  labels:
    service.istio.io/canonical-name: my-service
spec:
  ...
Etiquete máquinas virtuais manualmente
Para etiquetar o serviço canónico de uma única VM/WorkloadEntry, adicione a etiqueta service.istio.io/canonical-name à secção "labels" da configuração do 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:
  ...
Etiquete serviços externos manualmente
Para etiquetar o serviço canónico de um único serviço externo/ServiceEntry, adicione a etiqueta service.istio.io/canonical-name à secção "labels" da configuração 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
  ...
O que se segue?
- Saiba mais sobre os serviços canónicos
 - Saiba mais sobre as práticas recomendadas nos serviços canónicos