Visão geral do Diretório de serviços para o GKE

O Diretório de serviços para o Google Kubernetes Engine (GKE) oferece uma visão única de todos os serviços em todas as implantações do GKE e muito mais. É possível adicionar vários tipos de serviços do GKE, fazer anotações neles e depois conferir esses serviços no Diretório de Serviços.

Diretório de serviços para GKE oferece os seguintes recursos:

  • Ele permite descobrir serviços por gRPC e HTTP e resolver serviços por DNS usando zonas de DNS do Diretório de serviços. Com a integração do Diretório de serviços e do Cloud DNS, é possível configurar uma zona DNS do Diretório de serviços.
  • O Diretório de serviços registra serviços fora do GKE, permitindo que serviços do GKE e de terceiros se descubram facilmente.
  • O Diretório de serviços aplica permissões do IAM e verificações do VPC Service Controls para garantir a segurança e a privacidade adequadas dos dados dos clientes.
  • É possível configurar o Diretório de serviços para GKE com clusters do GKE Autopilot ou Standard. Para informações sobre os dois modos, consulte Escolher um modo de operação do GKE.

Para saber como configurar o Diretório de serviços para registrar automaticamente seus serviços do GKE com o Diretório de serviços, consulte Como configurar o Service Directory para o GKE.

Mapeamento de serviços

Ao registrar um serviço no Diretório de serviços, um serviço é criado no projeto da Google Cloud frota usando o nome do namespace do Kubernetes e a região do cluster do GKE. A tabela a seguir descreve como as propriedades do serviço do GKE são mapeadas para as propriedades do serviço criado no Diretório de serviços para todos os tipos de serviço do GKE.

Propriedades de nível superior

Propriedade do Service Directory Propriedade do GKE
Projeto Projeto da frota
Região Região do cluster
Namespace Namespace do Kubernetes

LoadBalancer tipo de serviço

O exemplo a seguir mostra como um serviço LoadBalancer do GKE é mapeado para o Diretório de serviços. O serviço do Service Directory existe em um namespace com o mesmo nome do namespace do Kubernetes no projeto da frota e na região do cluster do GKE.

Propriedade do Service Directory Propriedade do GKE
Nome do serviço Nome do serviço
Nome do endpoint Gerado automaticamente pelo controlador do Diretório de serviços
Endereço IP do endpoint Entrada LoadBalancer
Porta do endpoint Porta do serviço LoadBalancer
Rede de endpoints Rede VPC do cluster

Confira abaixo um exemplo de serviço LoadBalancer do GKE:

apiVersion: v1
kind: Service
metadata:
  name: hello-app
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: hello-app
    sd-import: "true"
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: hello-app
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 10.140.0.5

Confira um exemplo de serviço do Diretório de serviços:

service:
  endpoints:
  - address: 10.140.0.5
    metadata:
       cloud.google.com/load-balancer-type: "Internal"
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-12345
    port: 80
    network: projects/my-project/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app

NodePort tipo de serviço

O exemplo a seguir mostra como um serviço NodePort do GKE é mapeado para o Diretório de serviços. O serviço do Service Directory existe em um namespace com o mesmo nome do namespace do Kubernetes no projeto do hub e da região do cluster do GKE.

Propriedade do Service Directory Propriedade do GKE
Nome do serviço Nome do serviço
Nome do endpoint Gerado automaticamente pelo controlador do Diretório de serviços
Endereço IP do endpoint Endereço IP interno do nó para cada nó que executa um pod para o serviço
Porta do endpoint Porta do nó estático
Rede de endpoints Rede VPC do cluster

Confira abaixo um exemplo de serviço NodePort do GKE:

apiVersion: v1
kind: Service
metadata:
  name: hello-app
  annotations:
    key1: "value1"
spec:
  ports:
  - nodePort: 30007
    port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: hello-app
  type: NodePort
  

Confira abaixo um exemplo de nós do GKE:

apiVersion: v1
items:
- apiVersion: v1
  kind: Node
  metadata:
    name: gke-hello-cluster-default-pool-a40cbab6-d2rr
  status:
    addresses:
    - address: 10.142.0.27
      type: InternalIP
    - address: 34.73.248.170
- apiVersion: v1
  kind: Node
  metadata:
    name: gke-hello-cluster-default-pool-a40cbab6-kb38
  status:
    addresses:
    - address: 10.142.0.29
      type: InternalIP
    - address: 35.196.219.215
      type: ExternalIP
- apiVersion: v1
  kind: Node
  metadata:
    name: gke-hello-cluster-default-pool-a40cbab6-x34q
  status:
    addresses:
    - address: 10.142.0.28
      type: InternalIP
    - address: 34.75.202.26
      type: ExternalIP
    

Confira um exemplo de serviço do Diretório de serviços:

service:
  endpoints:
  - address: 10.142.0.27
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-12345
    port: 30007
    network: projects/my-project/locations/global/networks/default
  - address: 10.142.0.28
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-23456
    port: 30007
    network: projects/my-project/locations/global/networks/default
  - address: 10.142.0.29
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-34567
    port: 30007
    network: projects/my-project/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app
  

Serviço ClusterIP

O exemplo a seguir mostra como um serviço ClusterIP do GKE é mapeado para o Diretório de serviços. O serviço do Service Directory existe em um namespace com o mesmo nome do namespace do Kubernetes no projeto e na região da frota do cluster do GKE.

Propriedade do Service Directory Propriedade do GKE
Nome do serviço Nome do serviço
Nome do endpoint Gerado automaticamente pelo controlador do Diretório de serviços
Endereço IP do endpoint ClusterIP
Porta do endpoint Porta de serviço
Rede de endpoints Rede VPC do cluster

Confira um exemplo de serviço ClusterIP do GKE:

apiVersion: v1
kind: Service
metadata:
  name: hello-app
  annotations:
    key1: "value1"
  labels:
    app: hello-app
    sd-import: "true"
spec:
  clusterIP: 10.15.254.17
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: hello-app
  type: ClusterIP
  

Confira um exemplo de serviço do Diretório de serviços:

service:
  endpoints:
  - address: 10.15.254.17
    metadata:
      key1: value1
    name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app/endpoints/gke-hello-cluster-12345
    port: 80
    network: projects/my-project/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app
  

A seguir