En esta guía, se muestra cómo crear dos clústeres de Google Kubernetes Engine (GKE) en proyectos separados que usan una VPC compartida. Para obtener información general sobre las Herramientas de redes de GKE, consulta la Descripción general de la red.
Descripción general
Con una VPC compartida, designas un proyecto como el proyecto host y vinculas otros, llamados proyectos de servicio, a ese proyecto host. Puedes crear redes, subredes, rangos de direcciones secundarios, reglas de firewall y otros recursos de red en el proyecto host. Luego, puedes compartir las subredes seleccionadas, incluidos los rangos secundarios, con los proyectos de servicio. Los componentes que se ejecutan en un proyecto de servicio pueden usar la VPC compartida para comunicarse con los componentes que se ejecutan en otros proyectos de servicio.
Puedes usar la VPC compartida con clústeres de Autopilot y con clústeres de Standard zonales y regionales.Los clústeres estándar que usan una VPC compartida no pueden usar redes heredadas y deben tener habilitado el enrutamiento de tráfico nativo de la VPC. Los clústeres de Autopilot siempre habilitan el enrutamiento de tráfico nativo de la VPC.
Puedes configurar la VPC compartida cuando creas un clúster nuevo. GKE no admite la conversión de clústeres existentes al modelo de VPC compartida.
Se aplican algunas cuotas y límites al uso de VPC compartidas. Por ejemplo, existe una cuota por la cantidad de redes de un proyecto y hay un límite para la cantidad de proyectos de servicio que se pueden vincular a un proyecto host. Para obtener más detalles, consulta Cuotas y límites.
Acerca de los ejemplos
En los ejemplos de esta guía, se configura la infraestructura para una aplicación web de dos niveles, como se señala en la Descripción general de la VPC compartida.
Antes de comenzar
Antes de comenzar a configurar un clúster con VPC compartida:
- Asegúrate de tener una organización de Google Cloud.
- Asegúrate de que tu organización tenga tres proyectos de Google Cloud.
- Asegúrate de estar familiarizado con los conceptos de la VPC compartida, incluidos los diferentes roles de Identity and Access Management (IAM) que usa la VPC compartida. Un administrador de VPC compartida puede realizar las tareas de esta guía.
- Asegúrate de estar familiarizado con las restricciones de las políticas de la organización que se aplican a tu organización, carpeta o a tus proyectos. Un administrador de políticas de la organización podría tener restricciones definidas que limitan qué subredes se pueden compartir o qué proyectos pueden ser proyectos host de VPC compartida. Consulta las restricciones de políticas de la organización para obtener más información.
Antes de realizar los ejercicios de esta guía, sigue estos pasos:
- Elige uno de tus proyectos para que sea el proyecto host.
- Elige dos de tus proyectos para que sean proyectos de servicio.
Todos los proyectos tienen un nombre, un ID y un número. En algunos casos, el nombre y el ID coinciden. En esta guía, se usan los siguientes marcadores de posición y nombres descriptivos para referirse a tus proyectos:
Nombre descriptivo | Marcador de posición del ID del proyecto |
Marcador de posición del número del proyecto |
---|---|---|
El proyecto host | HOST_PROJECT_ID |
HOST_PROJECT_NUM |
Tu primer proyecto de servicio | SERVICE_PROJECT_1_ID |
SERVICE_PROJECT_1_NUM |
El segundo proyecto de servicio | SERVICE_PROJECT_2_ID |
SERVICE_PROJECT_2_NUM |
Busca los ID y números del proyecto
Puedes encontrar el ID y los números del proyecto con la CLI de gcloud o la consola de Google Cloud.
Console
Ve a la página principal de la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto que elegiste para ser el host.
En Información del proyecto, puedes ver su nombre, ID y número. Toma nota del ID y el número para más adelante.
Haz lo mismo con todos los proyectos que elegiste para que sean los de servicio.
gcloud
Enumera tus proyectos con el siguiente comando:
gcloud projects list
En la salida, se muestran los nombres, ID y números de los proyectos. Toma nota de los números y los ID para más adelante:
PROJECT_ID NAME PROJECT_NUMBER
host-123 host 1027xxxxxxxx
srv-1-456 srv-1 4964xxxxxxxx
srv-2-789 srv-2 4559xxxxxxxx
Habilita la API de GKE en tus proyectos
Antes de continuar con los ejercicios de esta guía, asegúrate de que la API de GKE esté habilitada en los tres proyectos. Cuando se habilita la API en un proyecto, se crea una cuenta de servicio de GKE. Para realizar las tareas restantes de esta guía, cada uno de tus proyectos debe tener una cuenta de servicio de GKE.
Puedes habilitar la API de GKE mediante la consola de Google Cloud o la CLI de Google Cloud.
Console
Ve a la página API y servicios en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto que elegiste para que sea el host.
Si la API de Kubernetes Engine aparece en la lista, eso significa que ya está habilitada y no es necesario que hagas nada. De lo contrario, haz clic en Habilitar API y servicios. Busca
Kubernetes Engine API
. Haz clic en la tarjeta API de Kubernetes Engine y, luego, en Habilitar.Repite estos pasos en todos los proyectos que elegiste para que sean de servicio. Es posible que cada operación tome un tiempo en completarse.
gcloud
Habilita la API de GKE para los tres proyectos. Es posible que cada operación tarde un poco en completarse:
gcloud services enable container.googleapis.com --project HOST_PROJECT_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_1_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_2_ID
Crea una red y dos subredes
En esta sección, realizarás las siguientes tareas:
- En tu proyecto host, crea una red llamada
shared-net
. - Crea dos subredes llamadas
tier-1
ytier-2
. - En cada subred crea dos rangos de direcciones secundarios: uno para objetos Service y otro para Pods.
Console
Ve a la página Redes de VPC en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto host.
Haz clic en add_box Crear red de VPC.
En Nombre, ingresa
shared-net
.En Modo de creación de subred, selecciona Personalizado.
Dentro de la casilla Subred nueva, en Nombre, ingresa
tier-1
.En Región, elige una región.
En Tipo de pila de IP, selecciona IPv4 (pila única).
En el Rango de IPv4, ingresa
10.0.4.0/22
.Haz clic en Crear rango IPv4 secundario. En Nombre de rango de subred, ingresa
tier-1-services
y, en Rango de IPv4 secundario, ingresa10.0.32.0/20
.Haz clic en Agregar rango de IP. En Nombre de rango de subred, ingresa
tier-1-pods
y, en Rango de IPv4 secundario, ingresa10.4.0.0/14
.Haz clic en Agregar subred.
En Nombre, ingresa
tier-2
.En Región, elige la misma región que seleccionaste para la subred anterior.
En el Rango de IPv4, ingresa
172.16.4.0/22
.Haz clic en Crear rango IPv4 secundario. En Nombre de rango de subred, ingresa
tier-2-services
y, en Rango de IPv4 secundario, ingresa172.16.16.0/20
.Haz clic en Agregar rango de IP. En Nombre de rango de subred, ingresa
tier-2-pods
y, en Rango de IPv4 secundario, ingresa172.20.0.0/14
.Haz clic en Crear.
gcloud
En tu proyecto host, crea una red llamada shared-net
:
gcloud compute networks create shared-net \
--subnet-mode custom \
--project HOST_PROJECT_ID
En tu red nueva, crea una subred llamada tier-1
:
gcloud compute networks subnets create tier-1 \
--project HOST_PROJECT_ID \
--network shared-net \
--range 10.0.4.0/22 \
--region COMPUTE_REGION \
--secondary-range tier-1-services=10.0.32.0/20,tier-1-pods=10.4.0.0/14
Crea otra subred llamada tier-2
:
gcloud compute networks subnets create tier-2 \
--project HOST_PROJECT_ID \
--network shared-net \
--range 172.16.4.0/22 \
--region COMPUTE_REGION \
--secondary-range tier-2-services=172.16.16.0/20,tier-2-pods=172.20.0.0/14
Reemplaza COMPUTE_REGION
por una
región de Compute Engine.
Determina los nombres de las cuentas de servicio en tus proyectos de servicio
Tienes dos proyectos de servicio y cada uno de ellos tiene varias cuentas de servicio. En esta sección se tratan las cuentas de servicio de GKE y las cuentas de servicio de las API de Google. Necesitarás los nombres de estas cuentas de servicio en la próxima sección.
En la siguiente tabla, se enumeran los nombres de las cuentas de servicio de GKE y las API de Google en tus dos proyectos de servicio:
Tipo de cuenta de servicio | Nombre de la cuenta de servicio |
---|---|
GKE | service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com |
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com | |
API de Google | SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com |
SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com |
Habilita la VPC compartida y asigna funciones
Para realizar las tareas de esta sección, asegúrate de que tu organización haya definido una función de administrador de VPC compartida.
En esta sección, realizarás las siguientes tareas:
- En tu proyecto host, habilita la VPC compartida.
- Vincula los dos proyectos de servicio al proyecto host.
- Otorga las funciones de IAM adecuadas a las cuentas de servicio que pertenecen a tus proyectos de servicio:
- En tu primer proyecto de servicio, otorga a dos cuentas de servicio la función
Compute Network User
en la subredtier-1
de tu proyecto host. - En tu segundo proyecto de servicio, otorga a dos cuentas de servicio la función
Compute Network User
en la subredtier-2
de tu proyecto host.
- En tu primer proyecto de servicio, otorga a dos cuentas de servicio la función
Console
Realiza los siguientes pasos para habilitar la VPC compartida, vincular proyectos de servicio y otorgar roles:
Ve a la página VPC compartida en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto host.
Haz clic en Configurar VPC compartida. Aparecerá la pantalla Habilitar proyecto host.
Haz clic en Guardar y continuar. Aparecerá la página Seleccionar subredes.
En Modo de uso compartido, selecciona Subredes individuales.
En Subredes que se compartirán, marca tier-1 y tier-2. Desmarca todas las otras casillas de verificación.
Haz clic en Continuar. Aparecerá la página Otorgar permisos.
En Vincular proyectos de servicio, marca tus dos proyectos de servicio. Desmarca todas las otras casillas de verificación en Vincular proyectos de servicio.
En Acceso a Kubernetes Engine, marca Habilitado.
Haz clic en Guardar. Aparecerá una página nueva.
En Permisos individuales de la subred, marca tier-1.
En el panel de la derecha, borra las cuentas de servicio que pertenezcan a tu segundo proyecto de servicio. Es decir, las que contengan
SERVICE_PROJECT_2_NUM
.En el panel de la derecha, busca los nombres de las cuentas de servicio de Kubernetes Engine y las API de Google que pertenezcan a tu primer proyecto de servicio. Deberías ver los nombres de ambas cuentas en la lista. Si alguna de ellas no aparece, ingresa su nombre en Agregar miembros y haz clic en Agregar.
En el panel central, en Permisos individuales de la subred, marca tier-2 y desmarca tier-1.
En el panel de la derecha, borra las cuentas de servicio que pertenezcan a tu primer proyecto de servicio. Es decir, las que contengan
SERVICE_PROJECT_1_NUM
.En el panel de la derecha, busca los nombres de las cuentas de servicio de Kubernetes Engine y las API de Google que pertenezcan a tu segundo proyecto de servicio. Deberías ver los nombres de ambas cuentas en la lista. Si alguna de ellas no aparece, ingresa su nombre en Agregar miembros y haz clic en Agregar.
gcloud
Habilita la VPC compartida en tu proyecto host. El comando que uses depende de la función administrativa requerida que tengas.
Si tienes una función de administrador de VPC compartida a nivel de organización, usa este comando:
gcloud compute shared-vpc enable HOST_PROJECT_ID
Si tienes una función de administrador de VPC compartida a nivel de carpeta, usa este comando:
gcloud beta compute shared-vpc enable HOST_PROJECT_ID
Vincula el primer proyecto de servicio a tu proyecto host:
gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_1_ID \ --host-project HOST_PROJECT_ID
Vincula el segundo proyecto de servicio a tu proyecto host:
gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_2_ID \ --host-project HOST_PROJECT_ID
Obtén la política de IAM para la subred
tier-1
:gcloud compute networks subnets get-iam-policy tier-1 \ --project HOST_PROJECT_ID \ --region COMPUTE_REGION
El resultado contiene un campo
etag
. Toma nota del valor deetag
.Crea un archivo llamado
tier-1-policy.yaml
que tenga el siguiente contenido:bindings: - members: - serviceAccount:SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com - serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com role: roles/compute.networkUser etag: ETAG_STRING
Reemplaza
ETAG_STRING
por el valor deetag
que anotaste antes.Establece la política de IAM para la subred
tier-1
:gcloud compute networks subnets set-iam-policy tier-1 \ tier-1-policy.yaml \ --project HOST_PROJECT_ID \ --region COMPUTE_REGION
Obtén la política de IAM para la subred
tier-2
:gcloud compute networks subnets get-iam-policy tier-2 \ --project HOST_PROJECT_ID \ --region COMPUTE_REGION
El resultado contiene un campo
etag
. Toma nota del valor deetag
.Crea un archivo llamado
tier-2-policy.yaml
que tenga el siguiente contenido:bindings: - members: - serviceAccount:SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com - serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com role: roles/compute.networkUser etag: ETAG_STRING
Reemplaza
ETAG_STRING
por el valor deetag
que anotaste antes.Establece la política de IAM para la subred
tier-2
:gcloud compute networks subnets set-iam-policy tier-2 \ tier-2-policy.yaml \ --project HOST_PROJECT_ID \ --region COMPUTE_REGION
Administra recursos de firewall
Si deseas que un clúster de GKE en un proyecto de servicio cree y administre los recursos de firewall en tu proyecto host, a la cuenta de servicio de GKE del proyecto de servicio se le debe otorgar los permisos de IAM adecuados mediante una de las siguientes estrategias:
Otorga a la cuenta de servicio de GKE del proyecto de servicio la función
Compute Security Admin
para el proyecto host.
Console
En la consola de Google Cloud, ve a la página IAM.
Selecciona el Proyecto host.
Haz clic en
Otorgar acceso y, luego, ingresa el principal de la cuenta de servicio de GKE del proyecto de servicio,service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com
.Selecciona la función
Compute Security Admin
en la lista desplegable.Haz clic en Guardar.
gcloud
Otorga a la cuenta de servicio de GKE del proyecto de servicio la función Compute
Security Admin
para el proyecto host.
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com \
--role=roles/compute.securityAdmin
Reemplaza lo siguiente:
HOST_PROJECT_ID
: El ID del proyecto host de VPC compartidaSERVICE_PROJECT_NUM
: El ID del proyecto de servicio que contiene la cuenta de servicio de GKE
Para un enfoque más detallado, crea una función de IAM personalizada que incluya solo los siguientes permisos:
compute.networks.updatePolicy
,compute.firewalls.list
,compute.firewalls.get
,compute.firewalls.create
,compute.firewalls.update
ycompute.firewalls.delete
. Otorga a la cuenta de servicio de GKE del proyecto de servicio esa función personalizada para el proyecto host.
Console
Crea un rol personalizado en el proyecto host que contiene los permisos de IAM que se mencionaron antes:
En la consola de Google Cloud, ve a la página Roles.
En la lista desplegable de la parte superior de la página, selecciona el proyecto host.
Haz clic en Crear función.
Ingresa un Título, una Descripción, un ID y una Etapa de lanzamiento de la función para la función. El nombre de la función no se puede cambiar después de que se crea la función.
Haz clic en Agregar permisos.
Filtra
compute.networks
y selecciona los permisos de IAM que se mencionaron antes.Una vez que hayas seleccionado todos los permisos necesarios, haz clic en Agregar.
Haz clic en Crear.
Otorga a la cuenta de servicio de GKE del proyecto de servicio la función personalizada recién creada en el proyecto host:
En la consola de Google Cloud, ve a la página IAM.
Selecciona el Proyecto host.
Haz clic en
Otorgar acceso y, luego, ingresa el principal de la cuenta de servicio de GKE del proyecto de servicio,service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com
.Filtra el Título de la función personalizada recién creada y selecciónala.
Haz clic en Guardar.
gcloud
Crea un rol personalizado en el proyecto host que contiene los permisos de IAM que se mencionaron antes:
gcloud iam roles create ROLE_ID \ --title="ROLE_TITLE" \ --description="ROLE_DESCRIPTION" \ --stage=LAUNCH_STAGE \ --permissions=compute.networks.updatePolicy,compute.firewalls.list,compute.firewalls.get,compute.firewalls.create,compute.firewalls.update,compute.firewalls.delete \ --project=HOST_PROJECT_ID
Otorga a la cuenta de servicio de GKE del proyecto de servicio la función personalizada recién creada en el proyecto host:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com \ --role=projects/HOST_PROJECT_ID/roles/ROLE_ID
Reemplaza lo siguiente:
ROLE_ID
: Es el nombre de la función, comogkeFirewallAdmin
.ROLE_TITLE
es un título descriptivo para la función, comoGKE Firewall Admin
.ROLE_DESCRIPTION
es una descripción breve de la función, comoGKE service account FW permissions
.LAUNCH_STAGE
: Es la etapa de lanzamiento de la función en su ciclo de vida, comoALPHA
,BETA
oGA
.HOST_PROJECT_ID
: El ID del proyecto host de VPC compartidaSERVICE_PROJECT_NUM
: El ID del proyecto de servicio que contiene la cuenta de servicio de GKE
Si tienes clústeres en más de un proyecto de servicio, debes elegir una de las estrategias y repetirla para la cuenta de servicio de GKE del proyecto de servicio.
Resumen de las funciones otorgadas en las subredes
Este es un resumen de las funciones otorgadas en las subredes:
Cuenta de servicio | Función | Subred |
---|---|---|
service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com | Usuario de la red de Compute | tier-1 |
SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com | Usuario de la red de Compute | tier-1 |
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com | Usuario de la red de Compute | tier-2 |
SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com | Usuario de la red de Compute | tier-2 |
Acceso a Kubernetes Engine
Cuando se vincula un proyecto de servicio, habilitar el acceso a Kubernetes Engine otorga a la cuenta de servicio de GKE del proyecto de servicio los permisos para realizar operaciones de administración de red en el proyecto host.
GKE asigna automáticamente el siguiente rol en el proyecto host cuando se habilita el acceso a Kubernetes Engine:
Miembro | Función | Recurso |
---|---|---|
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Usuario del agente de servicio de host | Cuenta de servicio de GKE en el proyecto host |
Sin embargo, debes agregar el permiso Compute Network User
de IAM de forma manual a la cuenta de servicio de GKE del proyecto de servicio para acceder a la red host.
Miembro | Función | Recurso |
---|---|---|
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Usuario de la red de Compute | Subred específica o proyecto host completo |
Si se vinculó un proyecto de servicio sin habilitar el acceso a Kubernetes Engine, siempre y cuando se haya habilitado la API de Kubernetes Engine en el proyecto host y en el de servicio, puedes asignar de forma manual los permisos a la cuenta de servicio de GKE del proyecto de servicio mediante las siguientes vinculaciones de funciones de IAM en el proyecto host.
Miembro | Función | Recurso |
---|---|---|
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Usuario de la red de Compute | Subred específica o proyecto host completo |
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Usuario del agente de servicio de host | Cuenta de servicio de GKE en el proyecto host |
Otorga la función Usuario de agente de servicio de host
Cada cuenta de servicio de GKE del proyecto de servicio debe tener una vinculación para la función de usuario del agente de servicios de host en el proyecto host. La cuenta de servicio de GKE adopta el siguiente formato:
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com
En el ejemplo anterior, SERVICE_PROJECT_NUM
es el número del proyecto de servicio.
Esta vinculación permite que la cuenta de servicio de GKE del proyecto de servicio realice operaciones de administración de red en el proyecto host, como si fuera la cuenta de servicio de GKE de ese proyecto. Esta función solo se puede otorgar a una cuenta de servicio de GKE de un proyecto de servicio.
Console
Si usas la consola de Google Cloud, no es necesario que otorgues la función Usuario de agente de servicio de host de forma explícita, ya que esto se hizo de forma automática cuando vinculaste tus proyectos de servicio al proyecto host con la consola de Google Cloud.
gcloud
Para tu primer proyecto, otorga la función de usuario del agente de servicios de host a la cuenta de servicio de GKE del proyecto. Esta función se otorga en el proyecto host:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com \ --role roles/container.hostServiceAgentUser
Para tu segundo proyecto, otorga la función de usuario del agente de servicios de host a la cuenta de servicio de GKE del proyecto. Esta función se otorga en el proyecto host:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com \ --role roles/container.hostServiceAgentUser
Verifica los rangos de IP secundarios y las subredes que se pueden usar
Cuando creas un clúster, debes especificar una subred y los rangos de IP secundarios que se usarán para los pods y los objetos Service del clúster. Existen varios motivos por los que un rango de direcciones IP puede no estar disponible. Cuando crees el clúster con la consola de Google Cloud o gcloud CLI, debes especificar rangos de direcciones IP que se pueden usar.
Un rango de direcciones IP se puede usar para los servicios del clúster nuevo si aún no está en uso. El rango de direcciones IP que especificas para los Pods del clúster nuevo puede ser uno que no hayas usado o uno compartido con los Pods de tus otros clústeres. Los rangos de direcciones IP que se crean y administran en GKE no se pueden usar en el clúster.
Para enumerar los rangos de direcciones IP secundarios y las subredes que se pueden usar de un proyecto, usa la gcloud CLI.
gcloud
gcloud container subnets list-usable \
--project SERVICE_PROJECT_ID \
--network-project HOST_PROJECT_ID
Reemplaza SERVICE_PROJECT_ID
por el ID del proyecto de servicio.
Si omites la opción --project
o --network-project
, el comando de
gcloud CLI usa el proyecto predeterminado de tu
configuración activa. Debido a que el proyecto
host y el de red son distintos, debes especificar
--project
o --network-project
, o ambos.
El resultado es similar al siguiente:
PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-2
RANGE: 172.16.4.0/22
SECONDARY_RANGE_NAME: tier-2-services
IP_CIDR_RANGE: 172.20.0.0/14
STATUS: usable for pods or services
SECONDARY_RANGE_NAME: tier-2-pods
IP_CIDR_RANGE: 172.16.16.0/20
STATUS: usable for pods or services
PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-1
RANGE: 10.0.4.0/22
SECONDARY_RANGE_NAME: tier-1-services
IP_CIDR_RANGE: 10.0.32.0/20
STATUS: usable for pods or services
SECONDARY_RANGE_NAME: tier-1-pods
IP_CIDR_RANGE: 10.4.0.0/14
STATUS: usable for pods or services
El comando list-usable
muestra una lista vacía en las siguientes situaciones:
- Cuando la cuenta de servicio de Kubernetes Engine del proyecto de servicio no tiene la función de usuario del agente de servicios de host para el proyecto host.
- Cuando la cuenta de servicio de Kubernetes Engine no existe en el proyecto host (por ejemplo, si la borraste por accidente).
- Cuando la API de Kubernetes Engine no está habilitada en el proyecto host, lo que implica que falta la cuenta de servicio de Kubernetes Engine en el proyecto host.
Para obtener más información, consulta la sección de solución de problemas.
Notas sobre rangos secundarios
Puedes crear 30 rangos secundarios en una subred. Necesitas dos rangos secundarios por cada clúster: uno para los pods y otro para los objetos Service.
Crea un clúster en el primer proyecto de servicio
Para crear un clúster en el primer proyecto de servicio, realiza los siguientes pasos con la CLI de gcloud o la consola de Google Cloud.
Console
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En el selector de proyectos, selecciona el primer proyecto de servicio.
Haz clic en add_box Crear.
En la sección Autopilot o Standard, haz clic en Configurar.
En Nombre, ingresa
tier-1-cluster
.En la lista desplegable Región, selecciona la misma región que usaste para las subredes.
En el panel de navegación, haz clic en Herramientas de redes.
Selecciona Redes compartidas conmigo (del proyecto host).
En Red, selecciona shared-net.
En Subred del nodo, selecciona tier-1.
En Rango de CIDR secundario de pods, selecciona pods de tier-1.
En Rango de CIDR secundario de servicios, selecciona tier-1-services.
Haz clic en Crear.
Cuando finalice la creación, haz clic en tier-1-cluster en la lista de clústeres.
En la página Detalles del clúster, haz clic en la pestaña Nodos.
En Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas inspeccionar.
En Grupos de instancias, haz clic en el nombre del grupo de instancias que quieres inspeccionar. Por ejemplo, gke-tier-1-cluster-default-pool-5c5add1f-grp.
En la lista de instancias, verifica que las direcciones IP internas de tus nodos se encuentren en el rango principal de la subred tier-1:
10.0.4.0/22
.
gcloud
Crea un clúster llamado tier-1-cluster
en tu primer proyecto de servicio:
gcloud container clusters create-auto tier-1-cluster \
--project=SERVICE_PROJECT_1_ID \
--location=COMPUTE_REGION \
--network=projects/HOST_PROJECT_ID/global/networks/shared-net \
--subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-1 \
--cluster-secondary-range-name=tier-1-pods \
--services-secondary-range-name=tier-1-services
Cuando finalice la creación, verifica que los nodos de tu clúster se encuentren en el rango principal de la subred tier-1: 10.0.4.0/22
gcloud compute instances list --project SERVICE_PROJECT_1_ID
En los resultados, se mostrarán las direcciones IP internas de los nodos:
NAME ZONE ... INTERNAL_IP
gke-tier-1-cluster-... ZONE_NAME ... 10.0.4.2
gke-tier-1-cluster-... ZONE_NAME ... 10.0.4.3
gke-tier-1-cluster-... ZONE_NAME ... 10.0.4.4
Crea un clúster en el segundo proyecto de servicio
Para crear un clúster en el segundo proyecto de servicio, realiza los siguientes pasos con la CLI de gcloud o la consola de Google Cloud.
Console
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En el selector de proyectos, selecciona el segundo proyecto de servicio.
Haz clic en add_box Crear.
En la sección Standard o Autopilot, haz clic en Configurar.
En Nombre, ingresa
tier-2-cluster
.En la lista desplegable Región, selecciona la misma región que usaste para las subredes.
En el panel de navegación, haz clic en Herramientas de redes.
En Red, selecciona shared-net.
En Subred del nodo, selecciona tier-2.
En Rango de CIDR secundario de pods, selecciona tier-2-pods.
En Rango de CIDR secundario de servicios, selecciona tier-2-services.
Haz clic en Crear.
Cuando finalice la creación, haz clic en tier-2-cluster en la lista de clústeres.
En la página Detalles del clúster, haz clic en la pestaña Nodos.
En Grupos de nodos, haz clic en el nombre del grupo de nodos que deseas inspeccionar.
En Grupos de instancias, haz clic en el nombre del grupo de instancias que quieres inspeccionar. Por ejemplo,
gke-tier-2-cluster-default-pool-5c5add1f-grp
En la lista de instancias, verifica que las direcciones IP internas de tus nodos se encuentren en el rango principal de la subred tier-2:
172.16.4.0/22
.
gcloud
Crea un clúster llamado tier-2-cluster
en el segundo proyecto de servicio:
gcloud container clusters create-auto tier-2-cluster \
--project=SERVICE_PROJECT_2_ID \
--location=COMPUTE_REGION \
--network=projects/HOST_PROJECT_ID/global/networks/shared-net \
--subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-2 \
--cluster-secondary-range-name=tier-2-pods \
--services-secondary-range-name=tier-2-services
Cuando finalice la creación, verifica que los nodos de tu clúster se encuentren en el rango principal de la subred tier-2: 172.16.4.0/22
.
gcloud compute instances list --project SERVICE_PROJECT_2_ID
En los resultados, se mostrarán las direcciones IP internas de los nodos:
NAME ZONE ... INTERNAL_IP
gke-tier-2-cluster-... ZONE_NAME ... 172.16.4.2
gke-tier-2-cluster-... ZONE_NAME ... 172.16.4.3
gke-tier-2-cluster-... ZONE_NAME ... 172.16.4.4
Crea reglas de firewall
Para permitir el tráfico en la red y entre los clústeres dentro de la red, debes crear firewalls. En las siguientes secciones, se muestra cómo crear y actualizar reglas de firewall:
- Crea una regla de firewall para habilitar la conexión SSH a un nodo: Demuestra cómo crear una regla de firewall que habilite el tráfico desde fuera de los clústeres mediante SSH.
Actualiza la regla de firewall para hacer ping entre nodos: Demuestra cómo actualizar la regla de firewall para permitir el tráfico ICMP entre los clústeres.
Se usan ICMP y SSH como ejemplos; debes crear reglas de firewall que te permitan cumplir con los requisitos de red de tu aplicación específica.
Crea una regla de firewall para habilitar la conexión SSH con un nodo
En tu proyecto host, crea una regla de firewall para la red shared-net
.
Permite que el tráfico ingrese en el puerto TCP 22
, lo que te permite conectarte con los nodos del clúster mediante SSH.
Console
Ve a la página Firewall en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto host.
En el menú Herramientas de redes de VPC, haz clic en Crear regla de firewall.
En Nombre, ingresa
my-shared-net-rule
.En Red, selecciona shared-net.
En Dirección del tráfico, selecciona Ingress.
En Acción en caso de coincidencia, selecciona Permitir.
En Destinos, haz clic en Todas las instancias de la red.
En Filtro de origen, selecciona Rangos de IP.
En Rangos de IP de origen, ingresa
0.0.0.0/0
.En Protocolos y puertos, selecciona Puertos y protocolos especificados. En el cuadro, ingresa
tcp:22
.Haz clic en Crear.
gcloud
Crea una regla de firewall para tu red compartida:
gcloud compute firewall-rules create my-shared-net-rule \
--project HOST_PROJECT_ID \
--network shared-net \
--direction INGRESS \
--allow tcp:22
Conéctate a un nodo mediante SSH
Después de crear el firewall que permite el tráfico de entrada en el puerto TCP 22
, conéctate al nodo mediante SSH.
Console
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En el selector de proyectos, selecciona el primer proyecto de servicio.
Haz clic en tier-1-cluster.
En la página Detalles del clúster, haz clic en la pestaña Nodos.
En Grupos de nodos, haz clic en el nombre del grupo de nodos.
En Grupos de instancias, haz clic en el nombre del grupo de instancias. Por ejemplo, gke-tier-1-cluster-default-pool-faf87d48-grp.
En la lista de nodos, toma nota de la dirección IP interna de los nodos. Las direcciones se encuentran en el rango
10.0.4.0/22
.En uno de tus nodos, haz clic en SSH. Esto funciona porque SSH usa el puerto TCP
22
, que tu regla de firewall permite.
gcloud
Haz una lista de los nodos de tu primer proyecto de servicio:
gcloud compute instances list --project SERVICE_PROJECT_1_ID
En el resultado aparecerán los nombres de los nodos de tu clúster:
NAME ...
gke-tier-1-cluster-default-pool-faf87d48-3mf8 ...
gke-tier-1-cluster-default-pool-faf87d48-q17k ...
gke-tier-1-cluster-default-pool-faf87d48-x9rk ...
Conéctate a uno de los nodos con SSH:
gcloud compute ssh NODE_NAME \
--project SERVICE_PROJECT_1_ID \
--zone COMPUTE_ZONE
Reemplaza lo siguiente:
NODE_NAME
: Es el nombre de uno de tus nodos.COMPUTE_ZONE
: Es el nombre de una zona de Compute Engine dentro de la región.
Actualiza la regla de firewall para hacer ping entre nodos
En la ventana de la línea de comandos de SSH, inicia la caja de herramientas de CoreOS:
/usr/bin/toolbox
En la shell de la caja de herramientas, haz ping a uno de tus otros nodos del mismo clúster. Por ejemplo:
ping 10.0.4.4
El comando
ping
funciona porque ambos nodos están en el rango10.0.4.0/22
.Ahora intenta hacer ping en un nodo del clúster del otro proyecto de servicio. Por ejemplo:
ping 172.16.4.3
Esta vez, el comando
ping
fallará porque tu regla de firewall no permite el tráfico del Protocolo de mensajes de control de Internet (ICMP).En un símbolo de sistema normal, no en la shell de tu caja de herramientas, actualiza tu regla de firewall para que permita el ICMP:
gcloud compute firewall-rules update my-shared-net-rule \ --project HOST_PROJECT_ID \ --allow tcp:22,icmp
En la shell de tu caja de herramientas, vuelve a hacer ping al nodo. Por ejemplo:
ping 172.16.4.3
Esta vez, el comando
ping
se ejecuta de forma correcta.
Crea reglas de firewall adicionales
Puedes crear reglas de firewall adicionales para permitir la comunicación entre nodos, pods y objetos Service en tus clústeres.
Por ejemplo, la siguiente regla permite que el tráfico ingrese desde cualquier nodo, objeto Service o pod de tier-1-cluster
en cualquier puerto TCP o UDP:
gcloud compute firewall-rules create my-shared-net-rule-2 \
--project HOST_PROJECT_ID \
--network shared-net \
--allow tcp,udp \
--direction INGRESS \
--source-ranges 10.0.4.0/22,10.4.0.0/14,10.0.32.0/20
La siguiente regla permite que el tráfico ingrese desde cualquier nodo, objeto Service o pod de tier-2-cluster
en cualquier puerto TCP o UDP:
gcloud compute firewall-rules create my-shared-net-rule-3 \
--project HOST_PROJECT_ID \
--network shared-net \
--allow tcp,udp \
--direction INGRESS \
--source-ranges 172.16.4.0/22,172.20.0.0/14,172.16.16.0/20
Kubernetes también intentará crear y administrar los recursos del firewall cuando sea necesario, por ejemplo, cuando crees un servicio de balanceador de cargas. Si Kubernetes no puede cambiar las reglas de firewall debido a un problema de permisos, se generará un evento de Kubernetes para indicarte cómo realizar los cambios.
Si deseas otorgar permiso a Kubernetes para cambiar las reglas de firewall, consulta Administra recursos de firewall.
En el caso de los balanceadores de cargas de Ingress, si Kubernetes no puede modificar las reglas de firewall debido a que no cuenta con los permisos suficientes, se emitirá un evento firewallXPNError
cada algunos minutos. En GLBC 1.4 y versiones posteriores, puedes silenciar el evento firewallXPNError
si agregas la anotación networking.gke.io/suppress-firewall-xpn-error: "true"
al recurso de entrada. Podrás quitar esta anotación en cualquier momento para dejar de silenciar el evento.
Crea un clúster privado en una VPC compartida
Puedes usar la VPC compartida con clústeres privados.
Esto requiere que otorgues los siguientes permisos en el proyecto host, ya sea a la cuenta de usuario o a la cuenta de servicio, que se usa para crear el clúster:
compute.networks.get
compute.networks.updatePeering
También debes asegurarte de que el rango direcciones IP del plano de control no se superponga con otros rangos reservados en la red compartida.
Para los clústeres privados creados antes del 15 de enero de 2020, la cantidad máxima de clústeres privados de GKE que puedes tener por red de VPC se limita a la cantidad de conexiones de intercambio de tráfico de una sola red de VPC. Los clústeres privados nuevos vuelven a usar las conexiones de intercambio de tráfico de red de VPC, lo que quita esta limitación. Para habilitar la reutilización del intercambio de tráfico de red de VPC en clústeres privados más antiguos, puedes borrar el clúster y volver a crearlo. La actualización del clúster no hace que este vuelva a usar una conexión de intercambio de tráfico de red de VPC existente.
En esta sección, crearás un clúster nativo de la VPC llamado private-cluster-vpc
en una red de VPC compartida predefinida.
Console
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
Haz clic en add_box Crear.
En la sección Autopilot o Standard, haz clic en Configurar.
En Nombre, ingresa
private-cluster-vpc
.En el panel de navegación, haz clic en Herramientas de redes.
Selecciona Clúster privado.
(Opcional para Autopilot): Configura el Rango de IP del plano de control como
172.16.0.16/28
.En la lista desplegable Red, selecciona la red de VPC que creaste antes.
En la lista desplegable Subred del nodo, selecciona la subred compartida que creaste antes.
Configura tu clúster según sea necesario.
Haz clic en Crear.
gcloud
Ejecuta el siguiente comando para crear un clúster llamado private-cluster-vpc
en una VPC compartida predefinida:
gcloud container clusters create-auto private-cluster-vpc \
--project=PROJECT_ID \
--location=COMPUTE_REGION \
--network=projects/HOST_PROJECT/global/networks/shared-net \
--subnetwork=SHARED_SUBNETWORK \
--cluster-secondary-range-name=tier-1-pods \
--services-secondary-range-name=tier-1-services \
--enable-private-nodes \
--master-ipv4-cidr=172.16.0.0/28
Realiza una limpieza
Después de completar los ejercicios de esta guía, realiza las siguientes tareas para quitar los recursos y evitar que se apliquen cargos no deseados a tu cuenta:
Borra los clústeres
Borra los dos clústeres que creaste.
Console
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.
En el selector de proyectos, selecciona el primer proyecto de servicio.
Selecciona tier-1-cluster y haz clic en Borrar.
En el selector de proyectos, selecciona el segundo proyecto de servicio.
Selecciona tier-2-cluster y haz clic en Borrar.
gcloud
gcloud container clusters delete tier-1-cluster \
--project SERVICE_PROJECT_1_ID \
--zone COMPUTE_ZONE
gcloud container clusters delete tier-2-cluster \
--project SERVICE_PROJECT_2_ID \
--zone COMPUTE_ZONE
Inhabilita la VPC compartida
Inhabilita la VPC compartida en tu proyecto host.
Console
Ve a la página VPC compartida en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto host.
Haz clic en Inhabilitar VPC compartida.
Ingresa
HOST_PROJECT_ID
en el campo y haz clic en Inhabilitar.
gcloud
gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_1_ID \
--host-project HOST_PROJECT_ID
gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_2_ID \
--host-project HOST_PROJECT_ID
gcloud compute shared-vpc disable HOST_PROJECT_ID
Borra las reglas de firewall
Quita las reglas de firewall que creaste.
Console
Ve a la página Firewall en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto host.
En la lista de reglas, selecciona my-shared-net-rule, my-shared-net-rule y my-shared-net-rule.
Haz clic en Borrar.
gcloud
Borra las reglas de firewall:
gcloud compute firewall-rules delete \
my-shared-net-rule \
my-shared-net-rule-2 \
my-shared-net-rule-3 \
--project HOST_PROJECT_ID
Borra la red compartida
Borra la red compartida que creaste.
Console
Ve a la página Redes de VPC en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto host.
En la lista de redes, selecciona shared-net.
Haz clic en Borrar red de VPC.
gcloud
gcloud compute networks subnets delete tier-1 \
--project HOST_PROJECT_ID \
--region COMPUTE_REGION
gcloud compute networks subnets delete tier-2 \
--project HOST_PROJECT_ID \
--region COMPUTE_REGION
gcloud compute networks delete shared-net --project HOST_PROJECT_ID
Quita la función de usuario del agente de servicios de host
Quita las funciones de usuario del agente de servicios de host de tus dos proyectos de servicio.
Console
Ve a la página de IAM en la consola de Google Cloud.
En el selector de proyectos, selecciona el proyecto host.
En la lista de miembros, selecciona la fila que muestra que
service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com
tiene la función de usuario del agente de servicios de host de Kubernetes Engine.Selecciona la fila que muestra que
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com
tiene la función de usuario del agente de servicios de host de Kubernetes Engine.Haga clic en Quitar acceso.
gcloud
Quita la función Usuario de agente de servicio de host de la cuenta de servicio de GKE de tu primer proyecto de servicio:
gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \ --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com \ --role roles/container.hostServiceAgentUser
Quita la función Usuario de agente de servicio de host de la cuenta de servicio de GKE de tu segundo proyecto de servicio:
gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \ --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com \ --role roles/container.hostServiceAgentUser
Soluciona problemas
Permiso denegado
Síntoma:
Failed to get metadata from network project. GCE_PERMISSION_DENIED: Google Compute Engine: Required 'compute.projects.get' permission for 'projects/HOST_PROJECT_ID
La API de Kubernetes Engine no se habilitó en el proyecto host.
La cuenta de servicio de GKE del proyecto host no existe. Por ejemplo, puede que se haya borrado.
La cuenta de servicio de GKE del proyecto host no tiene la función de agente de servicio de Kubernetes Engine (
container.serviceAgent
) en el proyecto host. Es posible que la vinculación se haya quitado por accidente.La cuenta de servicio de GKE del proyecto de servicio no tiene la función de usuario del agente de servicio de host en el proyecto host.
Opciones para solucionar el problema: Determina si existe la cuenta de servicio de GKE del proyecto host. Si no existe, haz lo siguiente:
Si la API de Kubernetes Engine no está habilitada en el proyecto host, habilítala. De esta manera, se crea la cuenta de servicio de GKE del proyecto host y se le otorga la función de agente de servicio de Kubernetes Engine (
container.serviceAgent
) en el proyecto host.Si la API de Kubernetes Engine está habilitada en el proyecto host, significa que se borró la cuenta de servicio de GKE del proyecto host o que no tiene la función de agente de servicio de Kubernetes Engine (
container.serviceAgent
) en el proyecto host. Para restablecer la cuenta de servicio de GKE o la vinculación de funciones, debes inhabilitar y volver a habilitar la API de Kubernetes Engine. Para obtener más información, consulta Soluciona problemas de Google Kubernetes Engine.
¿Qué sigue?
- Lee la descripción general de la VPC compartida.
- Obtén más información sobre cómo aprovisionar de la VPC compartida.
- Lee la descripción general de redes de GKE.
- Obtén más información sobre las reglas de firewall creadas automáticamente.
- Obtén información sobre cómo solucionar problemas de conectividad entre instancias de máquina virtual (VM) con direcciones IP internas.