Configura el Directorio de servicios para GKE

En esta página, se proporciona información para configurar Directorio de servicios con Google Kubernetes Engine (GKE) y registrar automáticamente tus clústeres de GKE en Directorio de servicios. Puedes configurar el Directorio de servicios para GKE con clústeres de GKE Autopilot o clústeres de GKE Standard. Para obtener información sobre los dos modos, consulta Elige un modo de operación de GKE.

Para obtener más información sobre el Directorio de servicios para GKE, consulta la descripción general del Directorio de servicios para GKE.

Limitaciones

El Directorio de servicios para GKE tiene las siguientes limitaciones:

  • Solo puedes registrar servicios con la integración de Directorio de servicios y GKE. Debes registrar las entradas, las puertas de enlace y otros recursos de forma manual con la API de Directorio de servicios.
  • Debes registrar tus clústeres de GKE con Flotas antes de poder sincronizar los servicios de esos clústeres con Directorio de servicios. Si deseas obtener más información para registrar tus clústeres de GKE, consulta Registra un clúster.
  • Todos los recursos de Service Directory se registran en el proyecto de la flota, no en el proyecto del clúster.
  • No puedes modificar las entidades de Directorio de servicios registradas con esta integración. Debes realizar todos los cambios en los recursos del servicio de GKE para que se propaguen al Directorio de servicios.

Antes de comenzar

  • Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  • 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.

  • Debes registrar tu clúster de GKE en una flota. Para registrar tu clúster de GKE, sigue las instrucciones en Registra un clúster.

Configura el clúster de GKE

Para configurar el clúster de GKE, sigue estos pasos.

  • Habilita la función de flota de Service Directory de GKE.
  • Configura la política de registro del Directorio de servicios.
  • Implementa el servicio de GKE.

Habilita la función de flota de Service Directory de GKE

Para habilitar la función de flota de Service Directory de GKE, ejecuta el comando gcloud container hub.

gcloud

gcloud alpha container hub service-directory enable

Configura la política de registro del Directorio de servicios para el servicio

La política de registro define qué tipos de servicios dentro de GKE importa automáticamente el Directorio de servicios. En la siguiente lista, se muestran las opciones configurables para esta política:

  • resources: Es el tipo de recursos de GKE que se importan. Puedes especificar varios tipos de recursos. Los recursos se identifican con Group y Kind. De forma predeterminada, el valor de Group es core. Solo está disponible Kind: service.
  • selector: Es un selector de etiquetas de GKE que coincide con las etiquetas de clave:valor que se aplican en el recurso de GKE. De forma predeterminada, no se selecciona ningún recurso.
  • annotationsToSync: Son las claves de anotación en el recurso que se sincronizan con Directorio de servicios. Si esta lista está vacía, los recursos se sincronizan con Directorio de servicios sin anotaciones.

Cada espacio de nombres debe definir una sola política. Esta política debe tener name: "default". El controlador no permite ni concilia otros nombres.

Configura un ServiceDirectoryRegistrationPolicy.

En el siguiente manifiesto, se describe un 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
      

Reemplaza lo siguiente:

  • NAMESPACE: Es el nombre del espacio de nombres. Solo puede haber un ServiceDirectoryRegistrationPolicy en un espacio de nombres. Si hay varias políticas en un solo espacio de nombres, GKE elige una política para que sea la activa y marca las demás como inactivas.
  • LABELS: Es el selector de etiquetas, por ejemplo, sd-import: "true". Este valor se aplica a los recursos especificados en kind. De forma predeterminada, no se selecciona ningún recurso.
  • ANNOTATIONS: Es una lista de anotaciones que coinciden y se importan, como - cloud.google.com/load-balancer-type. Si un recurso de GKE seleccionado tiene una de las anotaciones de la lista, la anotación y sus valores se sincronizan con Directorio de servicios junto con el recurso. Si esta lista está vacía, los recursos se sincronizan con Directorio de servicios sin anotaciones.

Guarda el manifiesto como registration_policy.yaml:

Aplica el manifiesto al clúster.

Para aplicar el manifiesto a tu clúster, ejecuta el comando kubectl apply -f:

kubectl apply -f registration_policy.yaml

Implementa el servicio de GKE

Implementa el servicio y la aplicación del balanceador de cargas de red de transferencia externo regional de GKE en el clúster de GKE de tu región. Por ejemplo, si tu región es us-central1, impleméntalo en un clúster de GKE gke-us-central1.

Esto importa tu servicio de GKE a Directorio de servicios.

Crea un archivo YAML y aplícalo como cualquier otro recurso de GKE. A continuación, se muestra un manifiesto para un servicio de 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

A continuación, se muestra un manifiesto de un 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 verificarlo, ejecuta la consulta de Directorio de servicios para tu servicio con el comando gcloud service-directory services resolve:

gcloud

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

Reemplaza lo siguiente:

  • SERVICE_NAME: Es el nombre o el identificador completamente calificado del servicio, por ejemplo, hello-app-service.
  • LOCATION: Es el nombre de la región del servicio, por ejemplo, us-central1.
  • NAMESPACE: Es el nombre del espacio de nombres del servicio, por ejemplo, default.

El resultado muestra tu servicio y es similar al siguiente:

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

Facturación

Directorio de servicios no cobra por los recursos creados por la integración de GKE. Sin embargo, sí se aplican cargos por las llamadas a la API. Para obtener detalles sobre los precios, consulta Precios del Directorio de servicios.

¿Qué sigue?