Configura el Directorio de servicios para GKE

En esta página, se proporciona información para configurar el Directorio de servicios con Google Kubernetes Engine (GKE) y registrar automáticamente tus clústeres de GKE en el Directorio de servicios. Puedes configurar el Directorio de servicios para GKE con Autopilot clústeres de GKE 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 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 del Directorio de servicios.
  • Debes registrar tus clústeres de GKE con flotas antes de que puedas sincronizar los servicios de esos clústeres con el Directorio de servicios. Para obtener detalles sobre cómo registrar tus clústeres de GKE, consulta Cómo registrar un clúster.
  • Todos los recursos del Directorio de servicios se registran en el proyecto de la flota, no en el proyecto del clúster.
  • No puedes modificar las entidades del 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 Google Cloud cuenta de. 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 que se indican en Cómo registrar 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 GKE del Directorio de servicios.
  • Configura la política de registro del Directorio de servicios.
  • Implementa el servicio de GKE.

Habilita la función de flota de GKE del Directorio de servicios

Para habilitar la función de flota de GKE del Directorio de servicios, ejecuta el gcloud container hub comando.

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 por Group y Kind. De forma predeterminada, el Group es core. Solo está disponible Kind: service.
  • selector: Es un selector de etiquetas de GKE que coincide con las etiquetas key:value que se aplican en el recurso de GKE. De forma predeterminada, no se selecciona ningún recurso.
  • annotationsToSync: Son las claves de anotación del recurso que se sincronizan con el Directorio de servicios. Si esta lista está vacía, los recursos se sincronizan con el 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 reconcilia 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 uno 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 política activa y marca las demás como inactivas.
  • LABELS: Es el selector de etiquetas, como 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 el Directorio de servicios con el recurso. Si esta lista está vacía, los recursos se sincronizan con el Directorio de servicios sin anotaciones.

Guarda el manifiesto como registration_policy.yaml.

Aplica el manifiesto al clúster.

Para aplicar el manifiesto al 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 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 al Directorio de servicios.

Crea un archivo YAML y aplícalo como cualquier otro recurso de GKE. Aquí hay 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

Aquí hay un manifiesto para una 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 del Directorio de servicios para tu servicio con el gcloud service-directory services resolve comando:

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

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

¿Qué sigue?