Configurar o Service Directory para o GKE

Nesta página, você encontra informações sobre como configurar o Diretório de serviços com o Google Kubernetes Engine (GKE) e registrar automaticamente seus clusters do GKE no Diretório de serviços. É possível configurar o Diretório de serviços para o GKE com clusters do GKE Autopilot ou clusters do GKE Standard. Para informações sobre os dois modos, consulte Escolher um modo de operação do GKE.

Para saber mais sobre o Diretório de serviços para o GKE, consulte Visão geral do Diretório de serviços para o GKE.

Limitações

O Diretório de serviços para o GKE tem as seguintes limitações:

  • Só é possível registrar serviços usando a integração do Diretório de serviços com o GKE. É necessário registrar entradas, gateways e outros recursos manualmente usando a API do Diretório de serviços.
  • É necessário registrar os clusters do GKE usando as frotas antes de sincronizar os serviços nesses clusters com o Diretório de serviços. Para detalhes sobre como registrar clusters do GKE, consulte Como registrar um cluster.
  • Todos os recursos do Diretório de serviços são registrados no projeto da frota, não no projeto do cluster.
  • Não é possível modificar as entidades do Diretório de serviços registradas usando essa integração. É necessário fazer todas as mudanças nos recursos de serviço do GKE para que elas sejam propagadas ao Diretório de serviços.

Antes de começar

  • Faça login na sua Google Cloud conta do. Se você não conhece o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Verify that billing is enabled for your Google Cloud project.

  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Verify that billing is enabled for your Google Cloud project.

  • É necessário registrar o cluster do GKE em uma frota. Para registrar o cluster do GKE, siga as instruções em Como registrar um cluster.

Configurar o cluster do GKE

Para configurar o cluster do GKE, siga estas etapas.

  • Ative o recurso de frota do Diretório de serviços do GKE.
  • Configure a política de registro do Diretório de serviços.
  • Implante o serviço do GKE.

Ativar o recurso de frota do Diretório de serviços do GKE

Para ativar o recurso de frota do Diretório de serviços do GKE, execute o gcloud container hub comando.

gcloud

gcloud alpha container hub service-directory enable

Configurar a política de registro do Diretório de serviços para o serviço

A política de registro define quais tipos de serviços no GKE são importados automaticamente pelo Diretório de serviços. A lista a seguir mostra as opções configuráveis para essa política:

  • resources: o tipo de recursos do GKE que são importados. É possível especificar vários tipos de recursos. Os recursos são identificados por Group e Kind. Por padrão, o Group é core. Somente Kind: service está disponível.
  • selector: um seletor de rótulos do GKE que corresponde a rótulos de chave:valor aplicados ao recurso do GKE. Por padrão, nenhum recurso é selecionado.
  • annotationsToSync: as chaves de anotação no recurso que são sincronizadas com o Diretório de serviços. Se essa lista estiver vazia, os recursos serão sincronizados com o Diretório de serviços sem anotações.

Cada namespace precisa definir uma única política. Essa política precisa ter name: "default". O controlador não permite nem reconcilia outros nomes.

Configurar uma ServiceDirectoryRegistrationPolicy.

O manifesto a seguir descreve uma ServiceDirectoryRegistrationPolicy:

apiVersion: networking.gke.io/v1alpha1
kind: ServiceDirectoryRegistrationPolicy
metadata:
    # Only the name "default" is allowed.
    name: default
    # The ServiceDirectoryRegistrationPolicy is a namespaced resource
    namespace: NAMESPACE
spec:
  resources:
    # Kind specifies the types of Kubernetes resources that can be synced into Service Directory.
    - kind: Service
      # Selector is a label selector for the resource types specified in Kind.
      selector:
        matchLabels:
          LABELS
      # annotationsToSync specifies the annotations that are matched and imported.
      # Any annotations that do not match this set of keys will not be imported into Service Directory.
      annotationsToSync:
      - ANNOTATIONS
      

Substitua:

  • NAMESPACE: o nome do namespace. Só pode haver um ServiceDirectoryRegistrationPolicy em um namespace. Se houver várias políticas em um único namespace, o GKE escolherá uma política para ser a ativa e marcará as outras como inativas.
  • LABELS: o seletor de rótulos, como sd-import: "true". Esse valor se aplica aos recursos especificados no tipo. Por padrão, nenhum recurso é selecionado.
  • ANNOTATIONS: uma lista de anotações que são correspondentes e importadas, como - cloud.google.com/load-balancer-type. Se um recurso do GKE selecionado tiver uma das anotações na lista, a anotação e os valores dela serão sincronizados com o Diretório de serviços com o recurso. Se essa lista estiver vazia, os recursos serão sincronizados com o Diretório de serviços sem anotações.

Salve o manifesto como registration_policy.yaml.

Aplique o manifesto ao cluster.

Para aplicar o manifesto ao cluster, execute o comando kubectl apply -f:

kubectl apply -f registration_policy.yaml

Implantar o serviço do GKE

Implante o serviço e o aplicativo do balanceador de carga de rede de passagem externa do GKE no cluster do GKE da sua região. Por exemplo, se sua região for us-central1, implante-o em um cluster do GKE gke-us-central1.

Isso importa o serviço do GKE para o Diretório de serviços.

Crie um arquivo YAML e aplique-o como qualquer outro recurso do GKE. Confira um manifesto para um serviço do tipo LoadBalancer:

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

Confira um manifesto para uma Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: hello
  name: hello-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        name: hello
        ports:
        - containerPort: 8080
          protocol: TCP

Para verificar, execute a consulta do Diretório de serviços para o serviço usando o gcloud service-directory services resolve comando:

gcloud

gcloud beta service-directory services resolve SERVICE_NAME \
  --location=LOCATION \
  --namespace=NAMESPACE

Substitua:

  • SERVICE_NAME: o nome ou identificador totalmente qualificado do serviço, por exemplo, hello-app-service
  • LOCATION: o nome da região do serviço, por exemplo, us-central1
  • NAMESPACE: o nome do namespace do serviço, por exemplo, default

A saída mostra o serviço e é semelhante a esta:

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-service/endpoints/my-cluster-12345
    port: 80
    network: projects/123456789/locations/global/networks/default
  name: projects/my-project/locations/us-central1/namespaces/default/services/hello-app-service

Faturamento

O Diretório de serviços não cobra pelos recursos criados pela integração do GKE. No entanto, há uma cobrança pelas chamadas de API. Para detalhes de preços, consulte Preços do Diretório de serviços.

A seguir