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.
Scenarios
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, asegúrate de estar familiarizado con lo siguiente:
- Conceptos de VPC compartida
- Configura clústeres con 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 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 enFLEET_HOST_PROJ
. En este caso, el proyecto host de la flota es un proyecto de servicio conectado aSHARED_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 enFLEET_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.
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.
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
.Habilita Cloud Service Mesh, Resource Manager y el servicio de varios clústeres APIs de descubrimiento 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
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
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
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 compartidaFLEET_HOST_PROJ_NUMBER
: el número del proyecto host de la flota, que es el proyecto de servicio de VPC compartida para esta situaciónFLEET_HOST_PROJ
: el ID del proyecto del primer clúster.
Registra 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 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.
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
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ó enFLEET_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ó enSECOND_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.
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.
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
.Habilita las APIs de Cloud Service Mesh, Resource Manager y de 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
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
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
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
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ústerFLEET_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
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.
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 ejecutasgcloud 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
: ReemplazarLOCATION
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
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ó enFLEET_HOST_PROJ
. En este caso, el proyecto host de la flota es un proyecto de servicio conectado aSHARED_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ó enSECOND_CLUSTER_PROJ
. En este caso,SECOND_CLUSTER_PROJ
también es un proyecto de servicio conectado aSHARED_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.
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.
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
.Habilita las APIs de Cloud Service Mesh, Resource Manager y de 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
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
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
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
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
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
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.
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 ejecutasgcloud 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
: ReemplazarLOCATION
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
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.