Configura servicios de varios clústeres con una VPC compartida


En esta página, se describen situaciones comunes de los Services de varios clústeres (MCS). Las situaciones que se presentan en esta página comparten las siguientes características:

  • Dos clústeres de GKE: El primer clúster de GKE se registra en la flota de su propio proyecto. Este es el proyecto host de la flota. El segundo clúster de GKE se registra en la misma flota. Sin embargo, según la situación, es posible que no esté en el mismo proyecto. Ambos clústeres de GKE son clústeres nativos de la VPC.
  • La misma red de VPC: ambos clústeres de GKE usan subredes en la misma red de VPC compartida.
  • La federación de identidades para cargas de trabajo para GKE está habilitada en ambos clústeres.

Terminología

Los términos proyecto host de la VPC compartida y proyecto host de la flota de GKE tienen significados diferentes.

  • El proyecto host de la VPC compartida es el proyecto que contiene la red de VPC compartida.
  • El proyecto host de la flota de GKE es el proyecto que contiene la flota en la que registras los clústeres.

Situaciones

En la siguiente tabla, se describen situaciones comunes de MCS:

Situación Proyecto host de la flota (proyecto que contiene el primer clúster) La ubicación del segundo clúster
Clústeres en el mismo proyecto de servicio de VPC compartida Un proyecto de servicio de VPC compartida El mismo proyecto de servicio de VPC compartida que el primer clúster
Proyecto host de la VPC compartida como proyecto host de la flota (un clúster en el proyecto host de la VPC compartida, un segundo clúster en un proyecto de servicio de VPC compartida) El proyecto host de la VPC compartida Un proyecto de servicio de VPC compartida
Clústeres en diferentes proyectos de servicio de VPC compartida Un proyecto de servicio de VPC compartida Un proyecto de servicio de VPC compartida diferente

Requisitos previos

Antes de establecer una configuración de MCS entre proyectos, completa los siguientes pasos:

Clústeres en el mismo proyecto de servicio de VPC compartida

En esta sección, se proporciona una configuración de MCS de ejemplo que involucra dos clústeres de GKE existentes en el mismo proyecto de servicio de VPC compartida:

  • Ambos clústeres usan la misma red de VPC compartida en SHARED_VPC_HOST_PROJ.
  • El primer clúster de GKE nativo de VPC, FIRST_CLUSTER_NAME, con la federación de identidades para cargas de trabajo para GKE habilitada, se crea en FLEET_HOST_PROJ. En este caso, el proyecto host de la flota es un proyecto de servicio conectado a SHARED_VPC_HOST_PROJ.
  • El segundo clúster de GKE nativo de VPC, SECOND_CLUSTER_NAME, con la federación de identidades para cargas de trabajo para GKE habilitada, también se crea en FLEET_HOST_PROJ.

Habilita las APIs obligatorias

Habilita las API necesarias. En la salida de la CLI de Google Cloud, se muestra si ya se habilitó una API.

  1. Habilita la API de Cloud DNS.

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    En esta situación, el proyecto host de la flota es un proyecto de servicio conectado al proyecto host de VPC compartida. La API de Cloud DNS debe estar habilitada en el proyecto host de la VPC compartida, ya que allí es donde se encuentra la red de VPC compartida. GKE crea zonas privadas administradas de Cloud DNS en el proyecto host y las autoriza para la red de VPC compartida.

  2. Habilita la API de GKE Hub (flota). La API de GKE Hub solo debe estar habilitada en el proyecto host de la flota.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    La habilitación de esta API en el proyecto host de la flota crea o garantiza que exista la siguiente cuenta de servicio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Habilita las API de Traffic Director, Resource Manager y descubrimiento de servicios de varios clústeres en el proyecto host de la flota:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    

Habilita Services de varios clústeres en el proyecto host de la flota

  1. Habilita Services de varios clústeres en el proyecto host de la flota:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    La habilitación de los servicios de varios clústeres en el proyecto host de la flota crea o garantiza que exista la siguiente cuenta de servicio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crea vinculaciones de IAM

  1. Crea una vinculación de IAM que otorgue a la cuenta de servicio de MCS del proyecto host de la flota el rol MCS Service Agent en el proyecto host de la VPC compartida:

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  2. Crea una vinculación de IAM que otorgue a la cuenta de servicio de MCS del proyecto host de la flota el rol Network User para su propio proyecto:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Debido a que en esta situación se usa la federación de identidades para cargas de trabajo para GKE, la cuenta de servicio de GKE del importador de MCS del proyecto host de la flota necesita el rol de usuario de red para su propio proyecto.

    Reemplaza lo siguiente:

    • SHARED_VPC_HOST_PROJ: El ID del proyecto del proyecto host de VPC compartida
    • FLEET_HOST_PROJ_NUMBER: el número del proyecto host de la flota, que es el proyecto de servicio de VPC compartida para esta situación
    • FLEET_HOST_PROJ: el ID del proyecto del primer clúster.

Registra los clústeres en la flota

  1. Registra el primer clúster en la flota. La marca --gke-cluster se puede usar en este comando porque el primer clúster se encuentra en el mismo proyecto que la flota en la que se registra.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME_1: un identificador único para este clúster en esta flota. Por ejemplo, puedes usar el nombre del primer clúster de GKE.
    • FLEET_HOST_PROJ: el ID del proyecto host de la flota, idéntico al proyecto host de la VPC compartida en esta situación.
    • LOCATION: para clústeres zonales, la zona de Compute Engine que contiene el clúster; para los clústeres regionales, la región de Compute Engine que contiene el clúster.
    • FIRST_CLUSTER_NAME: el nombre del primer clúster.
  2. Registra el segundo clúster en el proyecto host de la flota. La marca --gke-cluster se puede usar en este comando porque el segundo clúster también se encuentra en el proyecto host de la flota.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/SECOND_CLUSTER_NAME
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME_2: un identificador único para este clúster en esta flota. Por ejemplo, puedes usar el nombre del segundo clúster de GKE.
    • FLEET_HOST_PROJ: el ID del proyecto host de la flota, idéntico al proyecto host de la VPC compartida en esta situación.
    • LOCATION: para clústeres zonales, la zona de Compute Engine que contiene el clúster; para los clústeres regionales, la región de Compute Engine que contiene el clúster.
    • SECOND_CLUSTER_NAME: el nombre del segundo clúster.

Crea un espacio de nombres común para los clústeres

  1. Asegúrate de que cada clúster tenga un espacio de nombres en el que pueda compartir Services. Si es necesario, crea un espacio de nombres mediante el siguiente comando en cada clúster:

    kubectl create ns NAMESPACE
    

    Reemplaza NAMESPACE por un nombre para el espacio de nombres.

Proyecto host de la VPC compartida como proyecto host de la flota

En esta sección, se proporciona una configuración de MCS de ejemplo que involucra dos clústeres de GKE existentes:

  • El primer clúster de GKE nativo de VPC, FIRST_CLUSTER_NAME, con la federación de identidades para cargas de trabajo para GKE habilitada, se creó en FLEET_HOST_PROJ. En este caso, el proyecto host de la flota también es el proyecto host de la VPC compartida.
  • El segundo clúster de GKE nativo de VPC, SECOND_CLUSTER_NAME, con la federación de identidades para cargas de trabajo para GKE habilitada, se creó en SECOND_CLUSTER_PROJ.

Habilita las APIs obligatorias

Habilita las API necesarias. En la salida de la CLI de Google Cloud, se muestra si ya se habilitó una API.

  1. Habilita la API de Cloud DNS.

    gcloud services enable dns.googleapis.com \
        --project FLEET_HOST_PROJ
    

    En esta situación, el proyecto host de la flota también es el proyecto host de la VPC compartida. La API de Cloud DNS debe estar habilitada en el proyecto host de la VPC compartida, ya que allí es donde se encuentra la red de VPC compartida. GKE crea zonas privadas administradas de Cloud DNS en el proyecto host y las autoriza para la red de VPC compartida.

  2. Habilita la API de GKE Hub (flota). La API de GKE Hub solo debe estar habilitada en el proyecto host de la flota.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    La habilitación de la API de GKE Hub en el proyecto host de la flota crea o garantiza que exista la siguiente cuenta de servicio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Habilita las API de Traffic Director, Resource Manager y descubrimiento de servicios de varios clústeres tanto en el proyecto host de la flota como en el proyecto del segundo clúster:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Habilita Services de varios clústeres en el proyecto host de la flota

  1. Habilita Services de varios clústeres en el proyecto host de la flota:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    La habilitación de los servicios de varios clústeres en el proyecto host de la flota crea o garantiza que exista la siguiente cuenta de servicio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crea vinculaciones de IAM

  1. Crea una vinculación de IAM que otorgue a la cuenta de servicio de la flota de GKE del proyecto host de la flota el rol GKE Service Agent en el proyecto del segundo clúster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \
        --role roles/gkehub.serviceAgent
    
  2. Crea una vinculación de IAM que otorgue a la cuenta de servicio de MCS del proyecto host de la flota el rol MCS Service Agent en el proyecto del segundo clúster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Crea una vinculación de IAM que otorgue a la cuenta de servicio de MCS de cada proyecto el rol Network User para su propio proyecto:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    
    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Debido a que en esta situación se usa la federación de identidades para cargas de trabajo para GKE, la cuenta de servicio de GKE del importador de MCS de cada proyecto necesita el rol de usuario de red para su propio proyecto.

    Reemplaza lo siguiente:

    • SECOND_CLUSTER_PROJ: el ID del proyecto del segundo clúster
    • FLEET_HOST_PROJ: el ID del proyecto del primer clúster.
    • FLEET_HOST_PROJ_NUMBER: el número del proyecto host de la flota, que es el mismo que el proyecto host de la VPC compartida para esta situación.

Registra los clústeres en la flota

  1. Registra el primer clúster en la flota. La marca --gke-cluster se puede usar en este comando porque el primer clúster se encuentra en el mismo proyecto que la flota en la que se registra.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME_1: un identificador único para este clúster en esta flota. Por ejemplo, puedes usar el nombre del primer clúster de GKE.
    • FLEET_HOST_PROJ: el ID del proyecto host de la flota, idéntico al proyecto host de la VPC compartida en esta situación.
    • LOCATION: para clústeres zonales, la zona de Compute Engine que contiene el clúster; para los clústeres regionales, la región de Compute Engine que contiene el clúster.
    • FIRST_CLUSTER_NAME: el nombre del primer clúster.
  2. Registra el segundo clúster en la flota. Se debe usar la marca --gke-uri para este comando porque el segundo clúster no se encuentra en el mismo proyecto que la flota. Puedes obtener el URI de clúster completo si ejecutas gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME_2: un identificador único para este clúster en esta flota. Por ejemplo, puedes usar el nombre del segundo clúster de GKE.
    • FLEET_HOST_PROJ: el ID del proyecto host de la flota, idéntico al proyecto host de la VPC compartida en esta situación.
    • LOCATION: Reemplazar LOCATION por:
      • La zona de Compute Engine del clúster si el clúster es zonal
      • La región de Compute Engine del clúster si el clúster es regional
    • SECOND_CLUSTER_PROJECT: el proyecto que contiene el segundo clúster.
    • SECOND_CLUSTER_NAME: el nombre del segundo clúster.

Crea un espacio de nombres común para los clústeres

  1. Asegúrate de que cada clúster tenga un espacio de nombres en el que pueda compartir Services. Si es necesario, crea un espacio de nombres mediante el siguiente comando en cada clúster:

    kubectl create ns NAMESPACE
    

    Reemplaza NAMESPACE por un nombre para el espacio de nombres.

Clústeres en diferentes proyectos de servicio de VPC compartida

En esta sección, se proporciona una configuración de MCS de ejemplo que involucra dos clústeres de GKE existentes, cada uno en un proyecto de servicio de VPC compartida diferente.

  • Ambos clústeres usan la misma red de VPC compartida en SHARED_VPC_HOST_PROJ.
  • El primer clúster de GKE nativo de VPC, FIRST_CLUSTER_NAME, con la federación de identidades para cargas de trabajo para GKE habilitada, se creó en FLEET_HOST_PROJ. En este caso, el proyecto host de la flota es un proyecto de servicio conectado a SHARED_VPC_HOST_PROJ.
  • El segundo clúster de GKE nativo de VPC, SECOND_CLUSTER_NAME, con la federación de identidades para cargas de trabajo para GKE habilitada, se creó en SECOND_CLUSTER_PROJ. En este caso, SECOND_CLUSTER_PROJ también es un proyecto de servicio conectado a SHARED_VPC_HOST_PROJ.

Habilita las APIs obligatorias

Habilita las API necesarias. En la salida de la CLI de Google Cloud, se muestra si ya se habilitó una API.

  1. Habilita la API de Cloud DNS.

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    En esta situación, el proyecto host de la flota es un proyecto de servicio conectado al proyecto host de VPC compartida. La API de Cloud DNS debe estar habilitada en el proyecto host de la VPC compartida, ya que allí es donde se encuentra la red de VPC compartida. GKE crea zonas privadas administradas de Cloud DNS en el proyecto host y las autoriza para la red de VPC compartida.

  2. API de GKE Hub (flota). La API de GKE Hub solo debe estar habilitada en el proyecto host de la flota, FLEET_HOST_PROJ.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    La habilitación de esta API en el proyecto host de la flota crea o garantiza que exista la siguiente cuenta de servicio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Habilita las API de Traffic Director, Resource Manager y descubrimiento de servicios de varios clústeres tanto en el proyecto host de la flota como en el proyecto del segundo clúster:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project=FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Habilita Services de varios clústeres en el proyecto host de la flota

  1. Habilita Services de varios clústeres en el proyecto host de la flota:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    La habilitación de los servicios de varios clústeres en el proyecto host de la flota crea o garantiza que exista la siguiente cuenta de servicio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crea vinculaciones de IAM

  1. Crea una vinculación de IAM que otorgue a la cuenta de servicio de GKE Hub del proyecto host de la flota el rol GKE Service Agent en el proyecto del segundo clúster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \
        --role roles/gkehub.serviceAgent
    
  2. Crea una vinculación de IAM que otorgue a la cuenta de servicio de MCS del proyecto host de la flota el rol MCS Service Agent en el proyecto del segundo clúster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Crea una vinculación de IAM que otorgue a la cuenta de servicio de MCS del proyecto host de la flota el rol MCS Service Agent en el proyecto host de la VPC compartida:

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  4. Crea una vinculación de IAM que otorgue a la cuenta de servicio de MCS de cada proyecto el rol Network User para su propio proyecto:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    
    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Debido a que en esta situación se usa la federación de identidades para cargas de trabajo para GKE, la cuenta de servicio de GKE del importador de MCS de cada proyecto necesita el rol de usuario de red para su propio proyecto.

    Reemplaza lo siguiente según sea necesario en los comandos anteriores:

    • SECOND_CLUSTER_PROJ: el ID del proyecto del segundo clúster.
    • SHARED_VPC_HOST_PROJ: el ID del proyecto host de la VPC compartida. En este ejemplo, ambos clústeres usan la misma red de VPC compartida, pero ninguno se encuentra en el proyecto host de la VPC compartida.
    • FLEET_HOST_PROJ: el ID del proyecto del primer clúster.
    • FLEET_HOST_PROJ_NUMBER: el número del proyecto host de la flota.

Registra los clústeres en la flota

  1. Registra el primer clúster en la flota. La marca --gke-cluster se puede usar en este comando porque el primer clúster se encuentra en el mismo proyecto que la flota en la que se registra.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME_1: un identificador único para este clúster en esta flota. Por ejemplo, puedes usar el nombre del primer clúster de GKE.
    • FLEET_HOST_PROJ: el ID del proyecto host de la flota, idéntico al proyecto host de la VPC compartida en esta situación.
    • LOCATION: para clústeres zonales, la zona de Compute Engine que contiene el clúster; para los clústeres regionales, la región de Compute Engine que contiene el clúster.
    • FIRST_CLUSTER_NAME: el nombre del primer clúster.
  2. Registra el segundo clúster en la flota. Se debe usar la marca --gke-uri para este comando porque el segundo clúster no se encuentra en el mismo proyecto que la flota. Puedes obtener el URI de clúster completo si ejecutas gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME_2: un identificador único para este clúster en esta flota. Por ejemplo, puedes usar el nombre del segundo clúster de GKE.
    • FLEET_HOST_PROJ: el ID del proyecto host de la flota, idéntico al proyecto host de la VPC compartida en esta situación.
    • LOCATION: Reemplazar LOCATION por:
      • La zona de Compute Engine del clúster si el clúster es zonal
      • La región de Compute Engine del clúster si el clúster es regional
    • SECOND_CLUSTER_PROJECT: el proyecto que contiene el segundo clúster.
    • SECOND_CLUSTER_NAME: el nombre del segundo clúster.

Crea un espacio de nombres común para los clústeres

  1. Asegúrate de que cada clúster tenga un espacio de nombres en el que pueda compartir Services. Si es necesario, crea un espacio de nombres mediante el siguiente comando en cada clúster:

    kubectl create ns NAMESPACE
    

    Reemplaza NAMESPACE por un nombre para el espacio de nombres.

¿Qué sigue?

  • Obtén información sobre cómo usar MCS.