En esta página se describen situaciones habituales de servicios multiclúster (MCS). Los casos que se presentan en esta página comparten las siguientes características:
- Dos clústeres de GKE: el primer clúster de GKE está registrado en la flota de su propio proyecto. Este es el proyecto del host de la flota. El segundo clúster de GKE se registra en la misma flota, aunque, en función del caso, puede que no esté en el mismo proyecto. Ambos clústeres de GKE son clústeres nativos de VPC.
- Misma red de VPC: ambos clústeres de GKE usan subredes en la misma red de VPC compartida.
- Workload Identity Federation para GKE está habilitado en ambos clústeres.
Terminología
Los términos proyecto host de VPC compartida y proyecto host de flota de GKE tienen significados diferentes.
- El proyecto del host de VPC compartida es el proyecto que contiene la red de VPC compartida.
- El proyecto de host de flota de GKE es el proyecto que contiene la flota en la que registras los clústeres.
Situaciones
En la siguiente tabla se describen algunos casos habituales de MCS:
Situación | Proyecto de host de 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 VPC compartida como proyecto host de flota (un clúster en el proyecto host de VPC compartida y otro 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 | Otro proyecto de servicio de VPC compartida |
Requisitos previos
Antes de configurar MCS en varios proyectos, asegúrate de que conoces lo siguiente:
- Conceptos de VPC compartida
- Configurar clústeres con una VPC compartida
- Limitaciones de MCS
- Problemas conocidos de MCS
Clústeres en el mismo proyecto de servicio de VPC compartida
En esta sección se proporciona un ejemplo de configuración de MCS con dos clústeres de GKE que están en el mismo proyecto de servicio de VPC compartida:
- Ambos clústeres usan la misma red de VPC compartida en el
SHARED_VPC_HOST_PROJ
. - El primer clúster de GKE nativo de VPC
FIRST_CLUSTER_NAME
, con Workload Identity Federation para GKE habilitado, se crea enFLEET_HOST_PROJ
. El proyecto del host de la flota es un proyecto de servicio conectado alSHARED_VPC_HOST_PROJ
en este caso. - El segundo clúster de GKE nativo de VPC
SECOND_CLUSTER_NAME
, con Workload Identity Federation para GKE habilitado, también se crea enFLEET_HOST_PROJ
.
Habilitar las APIs necesarias
Habilita las APIs necesarias. El resultado de Google Cloud CLI te indica si una API ya se ha habilitado.
Habilita la API Cloud DNS:
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ
En este caso, el proyecto host de la flota es un proyecto de servicio conectado al proyecto host de la VPC compartida. La API Cloud DNS debe estar habilitada en el proyecto host de la VPC compartida, ya que es donde se encuentra la red de VPC compartida. GKE crea zonas privadas gestionadas de Cloud DNS en el proyecto host y las autoriza para la red de VPC compartida.
Habilita la API de GKE Hub (flota). La API de GKE Hub solo debe habilitarse en el proyecto host de la flota.
gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ
Si habilitas esta API en el proyecto host de la flota, se creará o se comprobará que existe la siguiente cuenta de servicio:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com
.Habilita las APIs Cloud Service Mesh, Resource Manager y Multi-cluster Service Discovery en el proyecto host de la flota:
gcloud services enable trafficdirector.googleapis.com \ cloudresourcemanager.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project FLEET_HOST_PROJ
Habilitar los servicios multiclúster en el proyecto host de la flota
Habilita los servicios de varios clústeres en el proyecto host de la flota:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ
Si habilitas los servicios multiclúster en el proyecto host de la flota, se creará o se asegurará que exista la siguiente cuenta de servicio:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
.
Crear vinculaciones de gestión de identidades y accesos
Crea un enlace de IAM que conceda a la cuenta de servicio de MCS del proyecto host de la flota el rol de agente de servicio de MCS 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
Crea un enlace de IAM que conceda a la cuenta de servicio de MCS del proyecto host de la flota el rol Usuario de red en 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
Como en este caso se usa la federación de identidades de carga 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.
Haz los cambios siguientes:
SHARED_VPC_HOST_PROJ
: el ID del proyecto host de la VPC compartidaFLEET_HOST_PROJ_NUMBER
: el número del proyecto host de la flota, que es el proyecto de servicio de VPC compartida de este casoFLEET_HOST_PROJ
: el ID de proyecto del proyecto del primer clúster.
Registrar los clústeres en la flota
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 a la que se está registrando.gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
Haz los cambios siguientes:
MEMBERSHIP_NAME_1
: identificador único de 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, que es el mismo que el del proyecto host de la VPC compartida en este caso.LOCATION
: en el caso de los clústeres zonales, la zona de Compute Engine que contiene el clúster; en el caso de los clústeres regionales, la región de Compute Engine que contiene el clúster.FIRST_CLUSTER_NAME
: el nombre del primer clúster.
Registra el segundo clúster en el proyecto de 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
Haz los cambios siguientes:
MEMBERSHIP_NAME_2
: identificador único de 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, que es el mismo que el del proyecto host de la VPC compartida en este caso.LOCATION
: en el caso de los clústeres zonales, la zona de Compute Engine que contiene el clúster; en el caso de los clústeres regionales, la región de Compute Engine que contiene el clúster.SECOND_CLUSTER_NAME
: el nombre del segundo clúster.
Crear un espacio de nombres común para los clústeres
Asegúrate de que cada clúster tenga un espacio de nombres para compartir servicios. Si es necesario, crea un espacio de nombres con el siguiente comando en cada clúster:
kubectl create ns NAMESPACE
Sustituye
NAMESPACE
por el nombre del espacio de nombres.
Proyecto host de VPC compartida como proyecto host de flota
En esta sección se proporciona un ejemplo de configuración de MCS que incluye dos clústeres de GKE:
- Se ha creado el primer clúster de GKE nativo de VPC
FIRST_CLUSTER_NAME
, con Workload Identity Federation for GKE habilitado, enFLEET_HOST_PROJ
. El proyecto host de la flota también es el proyecto host de la VPC compartida en este caso. - Se ha creado el segundo clúster de GKE nativo de VPC
SECOND_CLUSTER_NAME
, con Workload Identity Federation para GKE habilitado, enSECOND_CLUSTER_PROJ
.
Habilitar las APIs necesarias
Habilita las APIs necesarias. El resultado de Google Cloud CLI te indica si una API ya se ha habilitado.
Habilita la API Cloud DNS:
gcloud services enable dns.googleapis.com \ --project FLEET_HOST_PROJ
En este caso, el proyecto del host de la flota también es el proyecto del host de la VPC compartida. La API Cloud DNS debe estar habilitada en el proyecto host de VPC compartida, ya que es donde se encuentra la red de VPC compartida. GKE crea zonas privadas gestionadas de Cloud DNS en el proyecto host y las autoriza para la red de VPC compartida.
Habilita la API de GKE Hub (flota). La API de GKE Hub solo debe habilitarse en el proyecto host de la flota.
gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ
Al habilitar la API de GKE Hub en el proyecto host de la flota, se crea o se asegura que exista la siguiente cuenta de servicio:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com
.Habilita las APIs Cloud Service Mesh, Resource Manager y Multi-cluster Service Discovery en el proyecto host de la flota y 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
Habilitar los servicios multiclúster en el proyecto host de la flota
Habilita los servicios de varios clústeres en el proyecto host de la flota:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ
Si habilitas los servicios multiclúster en el proyecto host de la flota, se creará o se asegurará que exista la siguiente cuenta de servicio:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
.
Crear vinculaciones de gestión de identidades y accesos
Crea un enlace de gestión de identidades y accesos que conceda a la cuenta de servicio de flota de GKE del proyecto de host de la flota el rol de agente de servicio de GKE 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
Crea un enlace de gestión de identidades y accesos que conceda a la cuenta de servicio de MCS del proyecto host de la flota el rol de agente de servicio de MCS 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
Crea un enlace de gestión de identidades y accesos que conceda a la cuenta de servicio de MCS de cada proyecto el rol de usuario de red en 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
Como en este caso se usa la federación de identidades de carga de trabajo para GKE, la cuenta de servicio de MCS Importer de cada proyecto necesita el rol Usuario de red para su propio proyecto.
Haz los cambios siguientes:
SECOND_CLUSTER_PROJ
: el ID del proyecto del segundo clústerFLEET_HOST_PROJ
: el ID de proyecto 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 del proyecto host de la VPC compartida en este caso.
Registrar los clústeres en la flota
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 está registrando.gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
Haz los cambios siguientes:
MEMBERSHIP_NAME_1
: identificador único de 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, que es idéntico al proyecto host de la VPC compartida en este caso.LOCATION
: en el caso de los clústeres zonales, la zona de Compute Engine que contiene el clúster; en el caso de los clústeres regionales, la región de Compute Engine que contiene el clúster.FIRST_CLUSTER_NAME
: el nombre del primer clúster.
Registra el segundo clúster en la flota. La marca
--gke-uri
debe usarse en este comando porque el segundo clúster no se encuentra en el mismo proyecto que la flota. Para obtener el URI completo del clúster, ejecutagcloud 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
Haz los cambios siguientes:
MEMBERSHIP_NAME_2
: identificador único de 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, que es el mismo que el del proyecto host de la VPC compartida en este caso.LOCATION
: sustituyeLOCATION
por:- La zona de Compute Engine del clúster si se trata de un clúster de zona
- La región de Compute Engine del clúster si se trata de un clúster regional
SECOND_CLUSTER_PROJECT
: el proyecto que contiene el segundo clúster.SECOND_CLUSTER_NAME
: el nombre del segundo clúster.
Crear un espacio de nombres común para los clústeres
Asegúrate de que cada clúster tenga un espacio de nombres para compartir servicios. Si es necesario, crea un espacio de nombres con el siguiente comando en cada clúster:
kubectl create ns NAMESPACE
Sustituye
NAMESPACE
por el nombre del espacio de nombres.
Clústeres en diferentes proyectos de servicio de VPC compartida
En esta sección se proporciona un ejemplo de configuración de MCS que incluye dos clústeres de GKE que se encuentran en proyectos de servicio de VPC compartida diferentes.
- Ambos clústeres usan la misma red de VPC compartida en el
SHARED_VPC_HOST_PROJ
. - Se ha creado el primer clúster de GKE nativo de VPC
FIRST_CLUSTER_NAME
, con Workload Identity Federation for GKE habilitado, enFLEET_HOST_PROJ
. El proyecto del host de la flota es un proyecto de servicio conectado alSHARED_VPC_HOST_PROJ
en este caso. - El segundo clúster de GKE nativo de VPC
SECOND_CLUSTER_NAME
, con Workload Identity Federation for GKE habilitado,SECOND_CLUSTER_PROJ
se ha creado en el. ElSECOND_CLUSTER_PROJ
también es un proyecto de servicio conectado alSHARED_VPC_HOST_PROJ
en este caso.
Habilitar las APIs necesarias
Habilita las APIs necesarias. El resultado de Google Cloud CLI te indica si una API ya se ha habilitado.
Habilita la API Cloud DNS:
gcloud services enable dns.googleapis.com \ --project SHARED_VPC_HOST_PROJ
En este caso, el proyecto host de la flota es un proyecto de servicio conectado al proyecto host de la VPC compartida. La API Cloud DNS debe estar habilitada en el proyecto host de la VPC compartida, ya que es donde se encuentra la red de VPC compartida. GKE crea zonas privadas gestionadas de Cloud DNS en el proyecto host y las autoriza para la red de VPC compartida.
API de GKE Hub (flota). La API de GKE Hub debe estar habilitada solo en el proyecto host de la flota
FLEET_HOST_PROJ
.gcloud services enable gkehub.googleapis.com \ --project FLEET_HOST_PROJ
Si habilitas esta API en el proyecto host de la flota, se creará o se comprobará que existe la siguiente cuenta de servicio:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com
.Habilita las APIs Cloud Service Mesh, Resource Manager y Multi-cluster Service Discovery en el proyecto host de la flota y 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
Habilitar los servicios multiclúster en el proyecto host de la flota
Habilita los servicios de varios clústeres en el proyecto host de la flota:
gcloud container fleet multi-cluster-services enable \ --project FLEET_HOST_PROJ
Si habilitas los servicios multiclúster en el proyecto host de la flota, se creará o se asegurará que exista la siguiente cuenta de servicio:
service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com
.
Crear vinculaciones de gestión de identidades y accesos
Crea un enlace de gestión de identidades y accesos que conceda a la cuenta de servicio de GKE Hub del proyecto host de la flota el rol de agente de servicio de GKE 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
Crea un enlace de gestión de identidades y accesos que conceda a la cuenta de servicio de MCS del proyecto host de la flota el rol de agente de servicio de MCS 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
Crea un enlace de IAM que conceda a la cuenta de servicio de MCS del proyecto host de la flota el rol de agente de servicio de MCS 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
Crea un enlace de gestión de identidades y accesos que conceda a la cuenta de servicio de MCS de cada proyecto el rol de usuario de red en 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
Como en este caso se usa la federación de identidades de carga de trabajo para GKE, la cuenta de servicio de MCS Importer de cada proyecto necesita el rol Usuario de red para su propio proyecto.
Sustituye 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 de ellos se encuentra en el proyecto host de la VPC compartida.FLEET_HOST_PROJ
: el ID de proyecto del proyecto del primer clúster.FLEET_HOST_PROJ_NUMBER
: número del proyecto host de la flota.
Registrar los clústeres en la flota
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 está registrando.gcloud container fleet memberships register MEMBERSHIP_NAME_1 \ --project FLEET_HOST_PROJ \ --enable-workload-identity \ --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
Haz los cambios siguientes:
MEMBERSHIP_NAME_1
: identificador único de 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, que es el mismo que el del proyecto host de la VPC compartida en este caso.LOCATION
: en el caso de los clústeres zonales, la zona de Compute Engine que contiene el clúster; en el caso de los clústeres regionales, la región de Compute Engine que contiene el clúster.FIRST_CLUSTER_NAME
: el nombre del primer clúster.
Registra el segundo clúster en la flota. La marca
--gke-uri
debe usarse en este comando porque el segundo clúster no se encuentra en el mismo proyecto que la flota. Para obtener el URI completo del clúster, ejecutagcloud 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
Haz los cambios siguientes:
MEMBERSHIP_NAME_2
: identificador único de 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, que es el mismo que el del proyecto host de la VPC compartida en este caso.LOCATION
: sustituyeLOCATION
por:- La zona de Compute Engine del clúster si se trata de un clúster de zona
- La región de Compute Engine del clúster si se trata de un clúster regional
SECOND_CLUSTER_PROJECT
: el proyecto que contiene el segundo clúster.SECOND_CLUSTER_NAME
: el nombre del segundo clúster.
Crear un espacio de nombres común para los clústeres
Asegúrate de que cada clúster tenga un espacio de nombres para compartir servicios. Si es necesario, crea un espacio de nombres con el siguiente comando en cada clúster:
kubectl create ns NAMESPACE
Sustituye
NAMESPACE
por el nombre del espacio de nombres.
Siguientes pasos
- Consulta cómo usar MCS.