Crear clústeres privados


En esta página se explica cómo crear un clúster privado de Google Kubernetes Engine (GKE), que es un tipo de clúster nativo de VPC. En un clúster privado, los nodos solo tienen direcciones IP internas, lo que significa que los nodos y los pods están aislados de Internet de forma predeterminada. Puede elegir si quiere tener acceso al plano de control, si quiere que sea limitado o si no quiere tener acceso.

.

Restricciones y limitaciones

Los clústeres privados deben ser clústeres nativos de VPC. Los clústeres nativos de VPC no admiten redes antiguas.

Intervalos secundarios de pods a nivel de grupo de nodos: al crear un clúster de GKE, si especificas un intervalo secundario de pods inferior a /24 por grupo de nodos mediante la interfaz de usuario, es posible que se produzca el siguiente error:

Getting Pod secondary range 'pod' must have a CIDR block larger or equal to /24

GKE no admite que se especifique un intervalo inferior a /24 en el nivel del grupo de nodos. Sin embargo, se admite especificar un intervalo más pequeño a nivel de clúster. Para ello, puedes usar Google Cloud CLI con el argumento --cluster-ipv4-cidr. Para obtener más información, consulta Crear un clúster con un intervalo CIDR específico.

Despliega las secciones siguientes para ver las reglas sobre los intervalos de direcciones IP y el tráfico al crear un clúster.

Antes de empezar

Antes de empezar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.

Crear un clúster privado sin acceso de cliente al endpoint público

En esta sección, crearás los siguientes recursos:

  • Un clúster privado llamado private-cluster-0 que tiene nodos privados y que no tiene acceso de cliente al endpoint público.
  • Una red llamada my-net-0.
  • Una subred llamada my-subnet-0.

Consola

Crear una red y una subred

  1. Ve a la página Redes de VPC de la Google Cloud consola.

    Ir a redes de VPC

  2. Haz clic en Crear red VPC.

  3. En Nombre, escribe my-net-0.

  4. En Modo de creación de subred, selecciona Personalizado.

  5. En la sección Nueva subred, en Nombre, introduce my-subnet-0.

  6. En la lista Región, selecciona la que quieras.

  7. En Intervalo de direcciones IP, introduce 10.2.204.0/22.

  8. Activa Acceso privado de Google.

  9. Haz clic en Listo.

  10. Haz clic en Crear.

Crear un clúster privado

  1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear y, a continuación, en la sección Estándar o Autopiloto, haz clic en Configurar.

  3. En Nombre, especifica private-cluster-0.

  4. En el panel de navegación, haz clic en Redes.

  5. En la lista Red, selecciona my-net-0.

  6. En la lista Subred de nodos, selecciona my-subnet-0.

  7. Selecciona el botón de selección Clúster privado.

  8. Desmarque la casilla Acceder al plano de control con su dirección IP externa.

  9. (Opcional para Autopilot): asigna el valor Intervalo de direcciones IP del plano de control a 172.16.0.32/28.

  10. Haz clic en Crear.

gcloud

  • En los clústeres Autopilot, ejecuta el siguiente comando:

    gcloud container clusters create-auto private-cluster-0 \
        --create-subnetwork name=my-subnet-0 \
        --enable-master-authorized-networks \
        --enable-private-nodes \
        --enable-private-endpoint
    
  • En los clústeres estándar, ejecuta el siguiente comando:

    gcloud container clusters create private-cluster-0 \
        --create-subnetwork name=my-subnet-0 \
        --enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --enable-private-endpoint \
        --master-ipv4-cidr 172.16.0.32/28
    

donde:

  • --create-subnetwork name=my-subnet-0 hace que GKE cree automáticamente una subred llamada my-subnet-0.
  • --enable-master-authorized-networks especifica que el acceso al endpoint público está restringido a los intervalos de direcciones IP que autorices.
  • --enable-ip-alias hace que el clúster sea nativo de VPC (no es necesario para Autopilot).
  • --enable-private-nodes indica que los nodos del clúster no tienen direcciones IP externas.
  • --enable-private-endpoint indica que el clúster se gestiona mediante la dirección IP interna del endpoint de la API del plano de control.
  • --master-ipv4-cidr 172.16.0.32/28 especifica un intervalo de direcciones IP internas para el plano de control (opcional en Autopilot). Este ajuste es permanente para este clúster y debe ser único en la VPC. Se admite el uso de direcciones IP internas que no sean de RFC 1918.

API

Para crear un clúster sin un plano de control accesible públicamente, especifica el campo enablePrivateEndpoint: true en el recurso privateClusterConfig.

En este punto, estas son las únicas direcciones IP que tienen acceso al plano de control:

  • El intervalo principal de my-subnet-0.
  • Intervalo secundario que se usa para los pods.

Por ejemplo, supongamos que has creado una VM en el intervalo principal de my-subnet-0. A continuación, en esa máquina virtual, puedes configurar kubectl para que use la dirección IP interna del plano de control.

Si quieres acceder al plano de control desde fuera de my-subnet-0, debes autorizar al menos un intervalo de direcciones para que tenga acceso al endpoint privado.

Supongamos que tienes una VM en la red predeterminada, en la misma región que tu clúster, pero no en my-subnet-0.

Por ejemplo:

  • my-subnet-0: 10.0.0.0/22
  • Intervalo secundario de pods: 10.52.0.0/14
  • Dirección de la VM: 10.128.0.3

Puedes autorizar a la VM para que acceda al plano de control con este comando:

gcloud container clusters update private-cluster-0 \
    --enable-master-authorized-networks \
    --master-authorized-networks 10.128.0.3/32

Crear un clúster privado con acceso limitado al endpoint público

Cuando creas un clúster privado con esta configuración, puedes usar una subred generada automáticamente o una subred personalizada.

Usar una subred generada automáticamente

En esta sección, creará un clúster privado llamado private-cluster-1, donde GKE generará automáticamente una subred para los nodos del clúster. La subred tiene habilitado el Acceso privado de Google. En la subred, GKE crea automáticamente dos intervalos secundarios: uno para los pods y otro para los servicios.

Puedes usar la CLI de Google Cloud o la API de GKE.

gcloud

  • En los clústeres Autopilot, ejecuta el siguiente comando:

    gcloud container clusters create-auto private-cluster-1 \
        --create-subnetwork name=my-subnet-1 \
        --enable-master-authorized-networks \
        --enable-private-nodes
    
  • En los clústeres estándar, ejecuta el siguiente comando:

    gcloud container clusters create private-cluster-1 \
        --create-subnetwork name=my-subnet-1 \
        --enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --master-ipv4-cidr 172.16.0.0/28
    

donde:

  • --create-subnetwork name=my-subnet-1 hace que GKE cree automáticamente una subred llamada my-subnet-1.
  • --enable-master-authorized-networks especifica que el acceso al endpoint público está restringido a los intervalos de direcciones IP que autorices.
  • --enable-ip-alias hace que el clúster sea nativo de VPC (no es necesario para Autopilot).
  • --enable-private-nodes indica que los nodos del clúster no tienen direcciones IP externas.
  • --master-ipv4-cidr 172.16.0.0/28 especifica un intervalo de direcciones IP internas para el plano de control (opcional para Autopilot). Este ajuste es permanente para este clúster y debe ser único en la VPC. Se admite el uso de direcciones IP internas que no sean de RFC 1918.

API

Especifica el campo privateClusterConfig en el recurso de la API Cluster:

{
  "name": "private-cluster-1",
  ...
  "ipAllocationPolicy": {
    "createSubnetwork": true,
  },
  ...
    "privateClusterConfig" {
      "enablePrivateNodes": boolean # Creates nodes with internal IP addresses only
      "enablePrivateEndpoint": boolean # false creates a cluster control plane with a publicly-reachable endpoint
      "masterIpv4CidrBlock": string # CIDR block for the cluster control plane
      "privateEndpoint": string # Output only
      "publicEndpoint": string # Output only
  }
}

En este punto, estas son las únicas direcciones IP que tienen acceso al plano de control del clúster:

  • El intervalo principal de my-subnet-1.
  • Intervalo secundario que se usa para los pods.

Imagina que tienes un grupo de máquinas fuera de tu red de VPC que tienen direcciones en el intervalo 203.0.113.0/29. Puedes autorizar a esas máquinas para que accedan al endpoint público introduciendo este comando:

gcloud container clusters update private-cluster-1 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

Ahora, estas son las únicas direcciones IP que tienen acceso al plano de control:

  • El intervalo principal de my-subnet-1.
  • Intervalo secundario que se usa para los pods.
  • Intervalos de direcciones que hayas autorizado, como 203.0.113.0/29.

Usar una subred personalizada

En esta sección, crearás los siguientes recursos:

  • Un clúster privado llamado private-cluster-2.
  • Una red llamada my-net-2.
  • Una subred llamada my-subnet-2, con el intervalo principal 192.168.0.0/20, para los nodos del clúster. Tu subred tiene los siguientes intervalos de direcciones secundarias:
    • my-pods para las direcciones IP de los pods.
    • my-services para las direcciones IP de servicio.

Consola

Crear una red, una subred y rangos secundarios

  1. Ve a la página Redes de VPC de la Google Cloud consola.

    Ir a redes de VPC

  2. Haz clic en Crear red VPC.

  3. En Nombre, escribe my-net-2.

  4. En Modo de creación de subred , selecciona Personalizado.

  5. En la sección Nueva subred, en Nombre, introduce my-subnet-2.

  6. En la lista Región, selecciona la que quieras.

  7. En Intervalo de direcciones IP, introduce 192.168.0.0/20.

  8. Haz clic en Crear intervalo de IPs secundario. En Nombre del intervalo de subred, escribe my-services y, en Intervalo de IP secundario, escribe 10.0.32.0/20.

  9. Haz clic en Añadir intervalo de IPs. En Nombre del intervalo de subred, escribe my-pods y, en Intervalo de IP secundario, escribe 10.4.0.0/14.

  10. Activa Acceso privado de Google.

  11. Haz clic en Listo.

  12. Haz clic en Crear.

Crear un clúster privado

Crea un clúster privado que use tu subred:

  1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear y, a continuación, en la sección Estándar o Autopiloto, haz clic en Configurar.

  3. En Nombre, escribe private-cluster-2.

  4. En el panel de navegación, haz clic en Redes.

  5. Selecciona el botón de selección Clúster privado.

  6. Para crear un plano de control al que se pueda acceder desde intervalos de IP externas autorizadas, mantén marcada la casilla Acceder al plano de control con su dirección IP externa.

  7. (Opcional para Autopilot) Asigna el valor 172.16.0.16/28 a Intervalo de direcciones IP del plano de control.

  8. En la lista Red, selecciona my-net-2.

  9. En la lista Subred de nodos, selecciona my-subnet-2.

  10. Desmarca la casilla Crear automáticamente intervalos secundarios.

  11. En la lista Intervalo CIDR secundario de pods, selecciona my-pods.

  12. En la lista Intervalo CIDR secundario de servicios, selecciona my-services.

  13. Marca la casilla Habilitar redes autorizadas del plano de control.

  14. Haz clic en Crear.

gcloud

Crear una red

Primero, crea una red para tu clúster. El siguiente comando crea una red, my-net-2:

gcloud compute networks create my-net-2 \
    --subnet-mode custom

Crear una subred e intervalos secundarios

A continuación, crea una subred, my-subnet-2, en la red my-net-2, con los intervalos secundarios my-pods para los pods y my-services para los servicios:

gcloud compute networks subnets create my-subnet-2 \
    --network my-net-2 \
    --range 192.168.0.0/20 \
    --secondary-range my-pods=10.4.0.0/14,my-services=10.0.32.0/20 \
    --enable-private-ip-google-access

Crear un clúster privado

Ahora, crea un clúster privado, private-cluster-2, con la red, la subred y los intervalos secundarios que has creado.

  • En los clústeres Autopilot, ejecuta el siguiente comando:

    gcloud container clusters create-auto private-cluster-2 \
        --enable-master-authorized-networks \
        --network my-net-2 \
        --subnetwork my-subnet-2 \
        --cluster-secondary-range-name my-pods \
        --services-secondary-range-name my-services \
        --enable-private-nodes
    
  • En los clústeres estándar, ejecuta el siguiente comando:

    gcloud container clusters create private-cluster-2 \
        --enable-master-authorized-networks \
        --network my-net-2 \
        --subnetwork my-subnet-2 \
        --cluster-secondary-range-name my-pods \
        --services-secondary-range-name my-services \
        --enable-private-nodes \
        --enable-ip-alias \
        --master-ipv4-cidr 172.16.0.16/28 \
        --no-enable-basic-auth \
        --no-issue-client-certificate
    

En este punto, estas son las únicas direcciones IP que tienen acceso al plano de control:

  • El intervalo principal de my-subnet-2.
  • El intervalo secundario my-pods.

Supongamos que tienes un grupo de máquinas fuera de my-net-2 que tienen direcciones en el intervalo 203.0.113.0/29. Puedes autorizar a esas máquinas para que accedan al endpoint público introduciendo este comando:

gcloud container clusters update private-cluster-2 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

En este punto, estas son las únicas direcciones IP que tienen acceso al plano de control:

  • El intervalo principal de my-subnet-2.
  • El intervalo secundario my-pods.
  • Intervalos de direcciones que hayas autorizado, como 203.0.113.0/29.

Usar Cloud Shell para acceder a un clúster privado

Si has habilitado un endpoint privado, no podrás acceder a tu plano de control de GKE con Cloud Shell.

Si quieres usar Cloud Shell para acceder a tu clúster, debes añadir la dirección IP externa de Cloud Shell a la lista de redes autorizadas del clúster.

Para hacer esto:

  1. En la ventana de la línea de comandos de Cloud Shell, usa dig para buscar la dirección IP externa de Cloud Shell:

    dig +short myip.opendns.com @resolver1.opendns.com
    
  2. Añade la dirección externa de tu Cloud Shell a la lista de redes autorizadas de tu clúster:

    gcloud container clusters update CLUSTER_NAME \
        --enable-master-authorized-networks \
        --master-authorized-networks EXISTING_AUTH_NETS,SHELL_IP/32
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre de tu clúster.
    • EXISTING_AUTH_NETS: las direcciones IP de tu lista de redes autorizadas. Puede encontrar sus redes autorizadas en la consola o ejecutando el siguiente comando:

      gcloud container clusters describe CLUSTER_NAME --format "flattened(masterAuthorizedNetworksConfig.cidrBlocks[])"
      
    • SHELL_IP: la dirección IP externa de tu Cloud Shell.

  3. Obtén las credenciales para poder usar kubectl y acceder al clúster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --internal-ip
    

    Sustituye PROJECT_ID por el ID del proyecto.

  4. Usa kubectl en Cloud Shell para acceder a tu clúster:

    kubectl get nodes
    

    El resultado debería ser similar al siguiente:

    NAME                                               STATUS   ROLES    AGE    VERSION
    gke-cluster-1-default-pool-7d914212-18jv   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-3d9p   Ready    <none>   104m   v1.21.5-gke.1302
    gke-cluster-1-default-pool-7d914212-wgqf   Ready    <none>   104m   v1.21.5-gke.1302
    

Crear un clúster privado con acceso ilimitado al endpoint público

En esta sección, creará un clúster privado en el que cualquier dirección IP podrá acceder al plano de control.

Consola

  1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear y, a continuación, en la sección Estándar o Autopiloto, haz clic en Configurar.

  3. En Nombre, escribe private-cluster-3.

  4. En el panel de navegación, haz clic en Redes.

  5. Selecciona la opción Clúster privado.

  6. Mantén marcada la casilla Acceder al plano de control con su dirección IP externa.

  7. (Opcional para Autopilot) Asigna el valor 172.16.0.32/28 a Intervalo de direcciones IP del plano de control.

  8. Deja Red y Subred de nodos configurados como default. De esta forma, GKE genera una subred para tu clúster.

  9. Desmarca la casilla Habilitar redes autorizadas del plano de control.

  10. Haz clic en Crear.

gcloud

  • En los clústeres Autopilot, ejecuta el siguiente comando:

    gcloud container clusters create-auto private-cluster-3 \
        --create-subnetwork name=my-subnet-3 \
        --no-enable-master-authorized-networks \
        --enable-private-nodes
    
  • En los clústeres estándar, ejecuta el siguiente comando:

    gcloud container clusters create private-cluster-3 \
        --create-subnetwork name=my-subnet-3 \
        --no-enable-master-authorized-networks \
        --enable-ip-alias \
        --enable-private-nodes \
        --master-ipv4-cidr 172.16.0.32/28
    

donde:

  • --create-subnetwork name=my-subnet-3 hace que GKE cree automáticamente una subred llamada my-subnet-3.
  • --no-enable-master-authorized-networks inhabilita las redes autorizadas del clúster.
  • --enable-ip-alias hace que el clúster sea nativo de VPC (no es necesario para Autopilot).
  • --enable-private-nodes indica que los nodos del clúster no tienen direcciones IP externas.
  • --master-ipv4-cidr 172.16.0.32/28 especifica un intervalo de direcciones IP internas para el plano de control (opcional para Autopilot). Este ajuste es permanente para este clúster y debe ser único en la VPC. Se admite el uso de direcciones IP internas que no sean de RFC 1918.

Añadir reglas de cortafuegos para casos prácticos específicos

En esta sección se explica cómo añadir una regla de firewall a un clúster. De forma predeterminada, las reglas de cortafuegos restringen el plano de control de tu clúster para que solo inicie conexiones TCP con tus nodos y pods en los puertos 443 (HTTPS) y 10250 (kubelet). Para algunas funciones de Kubernetes, es posible que tengas que añadir reglas de cortafuegos para permitir el acceso a puertos adicionales. No cree reglas de cortafuegos ni reglas de políticas de cortafuegos jerárquicas que tengan una prioridad más alta que las reglas de cortafuegos creadas automáticamente.

Entre las funciones de Kubernetes que requieren reglas de cortafuegos adicionales se incluyen las siguientes:

Si añades una regla de cortafuegos, se permitirá el tráfico del plano de control del clúster a todos los elementos siguientes:

  • El puerto especificado de cada nodo (hostPort).
  • El puerto especificado de cada pod que se ejecuta en estos nodos.
  • El puerto especificado de cada servicio que se ejecuta en estos nodos.

Para obtener información sobre las reglas de cortafuegos, consulta el artículo Reglas de cortafuegos de la documentación de Cloud Load Balancing.

Para añadir una regla de cortafuegos a un clúster, debes registrar el bloque CIDR del plano de control del clúster y el destino utilizado. Una vez que lo hayas registrado, podrás crear la regla.

Ver el bloque CIDR del plano de control

Necesitas el bloque CIDR del plano de control del clúster para añadir una regla de cortafuegos.

Consola

  1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster.

En la pestaña Detalles, en Redes, anota el valor del campo Intervalo de direcciones del plano de control.

gcloud

Ejecuta el siguiente comando:

gcloud container clusters describe CLUSTER_NAME

Sustituye CLUSTER_NAME por el nombre de tu clúster.

En el resultado del comando, anota el valor del campo masterIpv4CidrBlock.

Ver las reglas de cortafuegos

Debe especificar el destino (en este caso, los nodos de destino) que usan las reglas de firewall del clúster.

Consola

  1. Ve a la página Políticas de cortafuegos de la consola de Google Cloud .

    Ir a Políticas de cortafuegos

  2. En la tabla de filtros de las reglas de cortafuegos de VPC, introduce gke-CLUSTER_NAME.

En los resultados, anota el valor del campo Objetivos.

gcloud

Ejecuta el siguiente comando:

gcloud compute firewall-rules list \
    --filter 'name~^gke-CLUSTER_NAME' \
    --format 'table(
        name,
        network,
        direction,
        sourceRanges.list():label=SRC_RANGES,
        allowed[].map().firewall_rule().list():label=ALLOW,
        targetTags.list():label=TARGET_TAGS
    )'

En el resultado del comando, anota el valor del campo Targets (Objetivos).

Para ver las reglas de cortafuegos de una VPC compartida, añade la marca --project HOST_PROJECT_ID al comando.

Añadir una regla de cortafuegos

Consola

  1. Ve a la página Políticas de cortafuegos de la consola de Google Cloud .

    Ir a Políticas de cortafuegos

  2. Haz clic en Crear regla de cortafuegos.

  3. En Nombre, introduce el nombre de la regla de cortafuegos.

  4. En la lista Red, selecciona la red correspondiente.

  5. En Dirección del tráfico, haga clic en Entrada.

  6. En Acción tras coincidencia, haz clic en Permitir.

  7. En la lista Objetivos, seleccione Etiquetas de objetivo especificadas.

  8. En Etiquetas de destino, introduce el valor de destino que has anotado antes.

  9. En la lista Filtro de origen, selecciona Intervalos de IPv4.

  10. En Intervalos IPv4 de origen, introduce el bloque CIDR del plano de control del clúster.

  11. En Protocolos y puertos, haz clic en Protocolos y puertos especificados, selecciona la casilla del protocolo correspondiente (tcp o udp) e introduce el número de puerto en el campo del protocolo.

  12. Haz clic en Crear.

gcloud

Ejecuta el siguiente comando:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges CONTROL_PLANE_RANGE \
    --rules PROTOCOL:PORT \
    --target-tags TARGET

Haz los cambios siguientes:

  • FIREWALL_RULE_NAME: el nombre que elijas para la regla de firewall.
  • CONTROL_PLANE_RANGE: el intervalo de direcciones IP del plano de control del clúster (masterIpv4CidrBlock) que has recogido anteriormente.
  • PROTOCOL:PORT: el puerto y su protocolo, tcp o udp.
  • TARGET: el valor de destino (Targets) que has recogido anteriormente.

Para añadir una regla de cortafuegos a una VPC compartida, añade las siguientes marcas al comando:

--project HOST_PROJECT_ID
--network NETWORK_ID

Verificar que los nodos no tengan direcciones IP externas

Una vez que hayas creado un clúster privado, comprueba que los nodos del clúster no tengan direcciones IP externas.

Consola

  1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster.

  3. En el caso de los clústeres de Autopilot, en la sección Información básica del clúster, consulta el campo Endpoint externo. El valor es Inhabilitado.

En los clústeres estándar, haz lo siguiente:

  1. En la página Clústeres, haz clic en la pestaña Nodos.
  2. En Grupos de nodos, haz clic en el nombre del grupo de nodos.
  3. En la página Detalles del grupo de nodos, en Grupos de instancias, haz clic en el nombre del grupo de instancias. Por ejemplo, gke-private-cluster-0-default-pool-5c5add1f-grp.
  4. En la lista de instancias, comprueba que tus instancias no tengan direcciones IP externas.

gcloud

Ejecuta el siguiente comando:

kubectl get nodes --output wide

La columna EXTERNAL-IP de la salida está vacía:

STATUS ... VERSION        EXTERNAL-IP  OS-IMAGE ...
Ready      v.8.7-gke.1                 Container-Optimized OS
Ready      v1.8.7-gke.1                Container-Optimized OS
Ready      v1.8.7-gke.1                Container-Optimized OS

Verificar la reutilización del emparejamiento de VPC en el clúster

Los clústeres privados que crees después del 15 de enero del 2020 reutilizarán las conexiones de emparejamiento entre redes de VPC.

Puedes comprobar si tu clúster privado reutiliza las conexiones de emparejamiento entre redes VPC mediante la CLI de gcloud o la Google Cloud consola.

Consola

Consulta la fila Emparejamiento de VPC en la página Detalles del clúster. Si tu clúster reutiliza conexiones de emparejamiento de VPC, el resultado empieza por gke-n. Por ejemplo, gke-n34a117b968dee3b2221-93c6-40af-peer.

gcloud

gcloud container clusters describe CLUSTER_NAME \
    --format="value(privateClusterConfig.peeringName)"

Si tu clúster reutiliza conexiones de emparejamiento de VPC, el resultado empieza por gke-n. Por ejemplo, gke-n34a117b968dee3b2221-93c6-40af-peer.

Configuraciones avanzadas de clústeres

En esta sección se describen algunas configuraciones avanzadas que puede que quieras usar al crear un clúster privado.

Conceder acceso a Internet de salida a nodos privados

Para proporcionar acceso saliente a Internet a tus nodos privados (por ejemplo, para extraer imágenes de un registro externo), usa Cloud NAT para crear y configurar un Cloud Router. Cloud NAT permite que los nodos privados establezcan conexiones salientes a través de Internet para enviar y recibir paquetes.

Cloud Router permite que todos los nodos de la región usen Cloud NAT para todos los intervalos de IPs principales y de alias. También asigna automáticamente las direcciones IP externas de la pasarela NAT.

Para obtener instrucciones sobre cómo crear y configurar un router de Cloud, consulta el artículo Crear una configuración de Cloud NAT con Cloud Router de la documentación de Cloud NAT.

.

Crear un clúster privado en una red de VPC compartida

Para saber cómo crear un clúster privado en una red de VPC compartida, consulta Crear un clúster privado en una VPC compartida.

Desplegar una aplicación de contenedor de Windows Server

Para saber cómo desplegar una aplicación de contenedor de Windows Server en un clúster con nodos privados, consulta la documentación sobre grupos de nodos de Windows.

Acceder al endpoint privado del plano de control de forma global

El endpoint privado del plano de control se implementa mediante un balanceador de carga de red interno de transferencia en la red de VPC del plano de control. Los clientes internos o conectados a través de túneles de Cloud VPN y adjuntos de VLAN de Cloud Interconnect pueden acceder a balanceadores de carga de red internos de tipo pasarela.

De forma predeterminada, estos clientes deben estar ubicados en la misma región que el balanceador de carga.

Cuando habilitas el acceso global al plano de control, el balanceador de carga de red con paso a través interno es accesible a nivel global: las máquinas virtuales de cliente y los sistemas locales pueden conectarse al endpoint privado del plano de control, sujeto a la configuración de las redes autorizadas, desde cualquier región.

Para obtener más información sobre los balanceadores de carga de red con paso a través internos y el acceso global, consulta el artículo Balanceadores de carga internos y redes conectadas.

Habilitar el acceso global al endpoint privado del plano de control

De forma predeterminada, el acceso global no está habilitado para el endpoint privado del plano de control cuando creas un clúster privado. Para habilitar el acceso global al plano de control, usa las siguientes herramientas en función del modo de tu clúster:

  • En los clústeres estándar, puedes usar Google Cloud CLI o la consola Google Cloud .
  • En el caso de los clústeres de Autopilot, puedes usar el recurso de Terraform google_container_cluster.

Consola

Para crear un clúster privado con el acceso global al plano de control habilitado, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Crear un clúster de Autopilot.

    Ir a Crear un clúster de Autopilot

    También puedes completar esta tarea creando un clúster estándar.

  2. Escribe un nombre.

  3. En el panel de navegación, haz clic en Redes.

  4. Selecciona Clúster privado.

  5. Marca la casilla Habilitar el acceso global al plano de control.

  6. Configura los demás campos como quieras.

  7. Haz clic en Crear.

Para habilitar el acceso global al plano de control de un clúster privado, sigue estos pasos:

  1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

    Ir a Google Kubernetes Engine

  2. Junto al clúster que quieras editar, haz clic en Acciones y, a continuación, en Editar.

  3. En la sección Redes, junto a Acceso global al plano de control, haz clic en Editar.

  4. En el cuadro de diálogo Editar acceso global al plano de control, marca la casilla Habilitar acceso global al plano de control.

  5. Haz clic en Guardar cambios.

gcloud

Añade la marca --enable-master-global-access para crear un clúster privado con el acceso global al endpoint privado del plano de control habilitado:

gcloud container clusters create CLUSTER_NAME \
    --enable-private-nodes \
    --enable-master-global-access

También puedes habilitar el acceso global al endpoint privado del plano de control de un clúster privado que ya tengas:

gcloud container clusters update CLUSTER_NAME \
    --enable-master-global-access

Verificar el acceso global al endpoint privado del plano de control

Para verificar que el acceso global al endpoint privado del plano de control está habilitado, ejecuta el siguiente comando y consulta su salida.

gcloud container clusters describe CLUSTER_NAME

El resultado incluye una sección privateClusterConfig en la que puedes ver el estado de masterGlobalAccessConfig.

privateClusterConfig:
  enablePrivateNodes: true
  masterIpv4CidrBlock: 172.16.1.0/28
  peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
  privateEndpoint: 172.16.1.2
  publicEndpoint: 34.68.128.12
  masterGlobalAccessConfig:
    enabled: true

Acceder al endpoint privado del plano de control desde otras redes

Cuando creas un clúster privado de GKE y inhabilitas el punto de conexión público del plano de control, debes administrar el clúster con herramientas como kubectl mediante el punto de conexión privado del plano de control. Puedes acceder al endpoint privado del plano de control del clúster desde otra red, incluidas las siguientes:

  • Una red local conectada a la red de VPC del clúster mediante túneles de Cloud VPN o vinculaciones de VLAN de Cloud Interconnect
  • Otra red de VPC conectada a la red de VPC del clúster mediante túneles de Cloud VPN

En el siguiente diagrama se muestra una ruta entre una red on-premise y los nodos del plano de control de GKE:

Diagrama que muestra el enrutamiento entre la VPC on-premise y el plano de control del clúster

Para permitir que los sistemas de otra red se conecten al endpoint privado del plano de control de un clúster, debes cumplir los siguientes requisitos:

  1. Identifica y registra la información de red pertinente del clúster y del endpoint privado de su plano de control.

    gcloud container clusters describe CLUSTER_NAME \
       --location=COMPUTE_LOCATION \
       --format="yaml(network, privateClusterConfig)"
    

    Haz los cambios siguientes:

    En el resultado del comando, identifica y registra la siguiente información para usarla en los pasos siguientes:

    • network: el nombre o el URI de la red VPC del clúster.
    • privateEndpoint: la dirección IPv4 del endpoint privado del plano de control o el intervalo CIDR IPv4 que lo contiene (masterIpv4CidrBlock).
    • peeringName: nombre de la conexión de emparejamiento entre redes de VPC que se usa para conectar la red VPC del clúster con la red VPC del plano de control.

    El resultado debería ser similar al siguiente:

    network: cluster-network
    privateClusterConfig:
      enablePrivateNodes: true
      masterGlobalAccessConfig:
        enabled: true
      masterIpv4CidrBlock: 172.16.1.0/28
      peeringName: gke-1921aee31283146cdde5-9bae-9cf1-peer
      privateEndpoint: 172.16.1.2
      publicEndpoint: 34.68.128.12
    
  2. Te recomendamos que habilites el acceso global al endpoint privado del plano de control para permitir que los paquetes entren desde cualquier región de la red VPC del clúster. Si habilitas el acceso global al endpoint privado del plano de control, podrás conectarte al endpoint privado mediante túneles de Cloud VPN o vinculaciones de VLAN de Cloud Interconnect ubicados en cualquier región, no solo en la región del clúster.

  3. Crea una ruta para la dirección IP privateEndpoint o el intervalo de direcciones IP masterIpv4CidrBlock en la otra red. Como la dirección IP del endpoint privado del plano de control siempre se ajusta al intervalo de direcciones IPv4 masterIpv4CidrBlock, si creas una ruta para la dirección IP privateEndpoint o para el intervalo que la contiene, se proporciona una ruta para los paquetes de la otra red al endpoint privado del plano de control si se cumplen las siguientes condiciones:

    • La otra red se conecta a la red de VPC del clúster mediante vinculaciones de VLAN de Cloud Interconnect o túneles de Cloud VPN que usan rutas dinámicas (BGP): usa una ruta anunciada personalizada de Cloud Router. Para obtener más información, consulta la sección sobre cómo anunciar intervalos de direcciones personalizadas de la documentación de Cloud Router.

    • La otra red se conecta a la red de VPC del clúster mediante túneles de VPN clásica que no usan rutas dinámicas: debes configurar una ruta estática en la otra red.

  4. Configura la red VPC del clúster para que exporte sus rutas personalizadas en la relación de emparejamiento a la red VPC del plano de control. Google Cloud siempre configura la red VPC del plano de control para que importe rutas personalizadas desde la red VPC del clúster. Este paso proporciona una ruta para los paquetes desde el endpoint privado del plano de control a la otra red.

    Para habilitar la exportación de rutas personalizadas desde la red de VPC de tu clúster, usa el siguiente comando:

    gcloud compute networks peerings update PEERING_NAME \
        --network=CLUSTER_VPC_NETWORK \
        --export-custom-routes
    

    Haz los cambios siguientes:

    • PEERING_NAME: el nombre del emparejamiento que conecta la red VPC del clúster con la red VPC del plano de control
    • CLUSTER_VPC_NETWORK: el nombre o el URI de la red VPC del clúster

    Si la exportación de rutas personalizadas está habilitada en la VPC, la creación de rutas que se solapen con Google Cloud intervalos de IP podría dañar el clúster.

    Para obtener más información sobre cómo actualizar el intercambio de rutas de las conexiones de emparejamiento entre redes de VPC, consulta Actualizar la conexión de emparejamiento.

    Las rutas personalizadas de la red de VPC del clúster incluyen rutas cuyos destinos son intervalos de direcciones IP de otras redes, como una red local. Para asegurarte de que estas rutas se conviertan en rutas personalizadas de emparejamiento en la red de VPC del plano de control, consulta Destinos admitidos de la otra red.

Destinos admitidos de la otra red

Los intervalos de direcciones que la otra red envía a los routers de Cloud Router de la red VPC del clúster deben cumplir las siguientes condiciones:

  • Aunque la VPC de tu clúster puede aceptar una ruta predeterminada (0.0.0.0/0), la red de VPC del plano de control siempre rechaza las rutas predeterminadas porque ya tiene una ruta predeterminada local. Si la otra red envía una ruta predeterminada a tu red de VPC, también debe enviar los destinos específicos de los sistemas que necesiten conectarse al endpoint privado del plano de control. Para obtener más información, consulta Orden de enrutamiento.

  • Si la red de VPC del plano de control acepta rutas que sustituyen de forma efectiva a una ruta predeterminada, esas rutas interrumpen la conectividad con las APIs y los servicios deGoogle Cloud , lo que interrumpe el plano de control del clúster. Por ejemplo, la otra red no debe anunciar rutas con destinos 0.0.0.0/1 y 128.0.0.0/1. Consulta el punto anterior para ver una alternativa.

Monitoriza los límites de Cloud Router, especialmente el número máximo de destinos únicos para las rutas aprendidas.

Proteger un clúster privado con Controles de Servicio de VPC

Para proteger aún más tus clústeres privados de GKE, puedes usar Controles de Servicio de VPC.

Controles de Servicio de VPC proporciona seguridad adicional a tus clústeres privados de GKE para ayudarte a mitigar el riesgo de filtración externa de datos. Con Controles de Servicio de VPC, puedes añadir proyectos a perímetros de servicio que protejan recursos y servicios de solicitudes que procedan de fuera del perímetro.

Para obtener más información sobre los perímetros de servicio, consulta Detalles y configuración de los perímetros de servicio.

Si usas Artifact Registry con tu clúster privado de GKE en un perímetro de servicio de Controles de Servicio de VPC, debes configurar el enrutamiento a la IP virtual restringida para evitar la exfiltración de datos.

Eliminar los recursos utilizados

Después de completar las tareas de esta página, siga estos pasos para eliminar los recursos y evitar que se le cobren cargos no deseados en su cuenta:

Eliminar los clústeres

Consola

  1. Ve a la página Google Kubernetes Engine en la Google Cloud consola.

    Ir a Google Kubernetes Engine

  2. Selecciona cada clúster.

  3. Haz clic en Eliminar.

gcloud

gcloud container clusters delete -q private-cluster-0 private-cluster-1 private-cluster-2 private-cluster-3

Eliminar la cadena

Consola

  1. Ve a la página Redes de VPC de la consola de Google Cloud .

    Ir a redes de VPC

  2. En la lista de redes, haz clic en my-net-0.

  3. En la página Detalles de la red de VPC, haz clic en Eliminar red de VPC.

  4. En el cuadro de diálogo Eliminar una red, haz clic en Eliminar.

gcloud

gcloud compute networks delete my-net-0

Siguientes pasos