Integrar en la infraestructura existente

En este tema, configurarás una nube privada virtual (VPC) de AWS existente con subredes públicas y privadas, y la ejecutarás anthos-gke para completar la instalación de un servicio de administración.

Antes de comenzar

Para completar estos pasos, necesitas lo siguiente:

  • Permisos de IAM para AWS como se describe en Requisitos

  • Una VPC de AWS existente que tenga los siguientes componentes:

    • Una subred pública (como mínimo)
    • Una subred privada (como mínimo)
    • Una puerta de enlace de Internet con una ruta a la subred pública
    • Una puerta de enlace de NAT con una ruta a la subred privada
    • Nombres de host de DNS habilitados.
    • No hay ningún valor personalizado de domain-name en los conjuntos de opciones de DHCP. Si deseas obtener más información, consulta Solución de problemas. GKE en AWS no admite valores distintos a los nombres de dominio de EC2 predeterminados.

    Si deseas obtener más información para configurar tu VPC de AWS, consulta VPC con subredes públicas y privadas.

  • Los ID de subredes públicas y privadas de la VPC existente. Por ejemplo, subnet-1234567890abcdefg.

  • Para las versiones de clústeres 1.20 o anteriores, un grupo de seguridad de AWS que permite SSH (puerto 22) entrante desde los grupos de seguridad o los rangos de IP en los que administrarás la instalación de GKE en AWS.

  • En la versión 1.21 o superior del clúster, un grupo de seguridad de AWS que permite conexiones de Konnectivity (puerto 8132) desde los rangos de IP de VPC que alojan tus grupos de nodos de GKE en AWS.

Crea el lugar de trabajo

  1. Crea un archivo llamado anthos-gke.yaml en un editor de texto. Pega el siguiente contenido en el archivo.

     apiVersion: multicloud.cluster.gke.io/v1
     kind: AWSManagementService
     metadata:
       name: management
     spec:
       version: aws-1.14.1-gke.0
       region: AWS_REGION
       authentication:
         awsIAM:
           adminIdentityARNs:
           - ADMIN_AWS_IAM_ARN
       kmsKeyARN: KMS_KEY_ARN
       databaseEncryption:
         kmsKeyARN: DATABASE_KMS_KEY_ARN
       securityGroupIDs:
       - SECURITY_GROUP_IDS
       googleCloud:
         projectID: GCP_PROJECT_ID
         serviceAccountKeys:
           managementService: MANAGEMENT_KEY_PATH
           connectAgent: HUB_KEY_PATH
           node: NODE_KEY_PATH
       existingVPC:
         subnetID: VPC_SUBNET_ID
         allowedSSHSecurityGroupIDs:
         - SSH_SECURITY_GROUP
       # Optional fields
       rootVolume:
         sizeGiB: ROOT_VOLUME_SIZE
         volumeType: ROOT_VOLUME_TYPE
         iops: ROOT_VOLUME_IOPS
         kmsKeyARN: ROOT_VOLUME_KEY
       bastionHost:
         subnetID: BASTION_HOST_SUBNET_ID
         allowedSSHCIDRBlocks:
         - SSH_CIDR_BLOCK
         rootVolume: # Optional
           kmsKeyARN: BASTION_VOLUME_KEY
       proxy: PROXY_JSON_FILE
    

    Reemplaza los siguientes valores:

    • AWS_REGION por la región de AWS en la que ejecutarás el clúster.
    • ADMIN_AWS_IAM_ARN por el nombre del recurso de Amazon de la clave de IAM de AWS de administrador.
    • KMS_KEY_ARN por el nombre del recurso de Amazon de la clave de KMS de AWS que protege los datos del servicio de administración cuando este se crea
    • DATABASE_KMS_KEY_ARN por el nombre del recurso de Amazon de la clave de KMS de AWS que protege las bases de datos etcd
    • SECURITY_GROUP_IDS por los ID de los grupos de seguridad adicionales a los que se le permite el acceso a tus VM de servicio de administración.
    • GCP_PROJECT_ID por el proyecto de Google Cloud que aloja tu entorno de GKE Enterprise.
    • MANAGEMENT_KEY_PATH por la ubicación de la clave de la cuenta de servicio de administración de Google Cloud.
    • HUB_KEY_PATH por la ubicación de la clave de la cuenta de servicio de Google Cloud Connect
    • NODE_KEY_PATH por la ubicación de la clave de la cuenta de servicio del nodo de GKE on AWS
    • VPC_SUBNET_ID por el ID de la subred en la que se ejecuta el servicio de administración
    • SSH_SECURITY_GROUP por la lista de ID de grupos de seguridad que permiten el acceso mediante SSH dentro de las instancias del servicio de administración

    Opcional: Si deseas encriptar tus volúmenes de servicio de administración, reemplaza los siguientes valores:

    • ROOT_VOLUME_SIZE por el tamaño de volumen en gigabytes para el servicio de administración. Por ejemplo, 10.
    • ROOT_VOLUME_TYPE por el tipo de volumen de EBS. Por ejemplo, gp3.
    • ROOT_VOLUME_IOPS por la activación de operaciones de E/S aprovisionadas por segundo (IOPS) para el volumen Solo es válido cuando volumeType es GP3. Para obtener más información, consulta Volúmenes de uso general SSD (gp3).
    • ROOT_VOLUME_KEY por el nombre de recurso de Amazon de la clave de AWS KMS que encripta los volúmenes raíz de instancia de tu servicio de administración. Si deseas obtener más información, consulta Usa una CMK administrada por el cliente para encriptar volúmenes.

    Opcional: Si deseas crear un host de bastión para acceder a tu entorno de GKE en un entorno de AWS con un túnel SSH, reemplaza los siguientes valores:

    • BASTION_HOST_SUBNET_ID por el ID de subred en la que se ejecuta el host de bastión. Asegúrate de que VPC_SUBNET_ID permita las conexiones entrantes de BASTION_HOST_SUBNET_ID.
    • SSH_CIDR_BLOCK por el bloque CIDR del host de bastión que permite la conexión SSH entrante. Por ejemplo, 203.0.113.0/24. Si deseas permitir una conexión SSH desde cualquier dirección IP, usa 0.0.0.0/0.
    • BASTION_VOLUME_KEY por el nombre del recurso de Amazon de la Clave de AWS KMS que protege el volumen raíz de bastión.

    De forma opcional, si deseas dirigir el tráfico mediante un proxy HTTP, reemplaza el siguiente valor:

  2. Ejecuta anthos-gke aws management init para crear archivos de configuración.

    anthos-gke aws management init
    
  3. Ejecuta anthos-gke aws management apply para crear el clúster.

    anthos-gke aws management apply
    

    El comando anthos-gke aws management apply puede llevar hasta diez minutos en completarse. Cuando anthos-gke finaliza, tu servicio administrado se ejecuta en AWS.

Etiqueta las subredes con el nombre de tu clúster

Si usas subredes de AWS existentes con GKE en AWS y deseas crear balanceadores de cargas, debes etiquetar tu VPC y tus subredes con el nombre de tu servicio de administración. Si creaste tu VPC con anthos-gke o ya etiquetaste tus subredes, omite este paso.

Para etiquetar las subredes, sigue estos pasos:

  1. Cambia al directorio con la configuración de GKE en AWS. Creaste este directorio cuando instalaste el servicio de administración.

    cd anthos-aws

  2. Exporta el ID del clúster como la variable de entorno $CLUSTER-ID. Elige la versión de Terraform y ejecuta los siguientes comandos:

    Terraform 0.12, 0.13

    export CLUSTER_ID=$(terraform output cluster_id)
    

    Terraform 0.14.3+

    export CLUSTER_ID=$(terraform output -raw cluster_id)
    
  3. Exporta el ID de la VPC de AWS como la variable de entorno $VPC_ID. Elige la versión de Terraform y ejecuta los siguientes comandos:

    Terraform 0.12, 0.13

    export VPC_ID=$(terraform output vpc_id)
    

    Terraform 0.14.3+

    export VPC_ID=$(terraform output -raw vpc_id)
    
  4. Obtén los ID de tu subred privada mediante la herramienta de la CLI de aws.

      aws ec2 describe-subnets \
          --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
          --query "Subnets[*].SubnetId" \
          --output text
    
  5. Etiqueta las subredes con el ID de tu clúster. Ejecuta el siguiente comando por cada una de tus subredes.

      aws ec2 create-tags \
          --resources SUBNET_IDS \
          --tags Key=gke:multicloud:cluster-id,Value=$CLUSTER_ID
    

    Reemplaza SUBNET_IDS por la lista de ID de subredes, separados por espacios. Por ejemplo:subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef

Conexión al servicio de administración

En esta sección, establecerás una conexión con tu servicio administrado. Puedes crear un túnel con los comandos a través de un host de bastión. Si tienes una conexión directa con tu VPC de AWS, ve directamente a Genera credenciales y conéctate.

Conéctate con un host de bastión

Si usas un host de bastión para configurar el túnel SSH, primero configura el host en tu anthos-gke.yaml. A continuación, si deseas crear una secuencia de comandos para abrir el túnel, realiza los siguientes pasos:

  1. Usa terraform para generar una secuencia de comandos que abra un túnel SSH al host de bastión.

    terraform output bastion_tunnel > bastion-tunnel.sh
    chmod 755 bastion-tunnel.sh
    

    Terraform crea la secuencia de comandos bastion-tunnel.sh que usa la clave SSH del host de bastión (~/.ssh/anthos-gke).

  2. Para abrir el túnel, ejecuta la secuencia de comandos bastion-tunnel.sh. El túnel realiza reenvíos de localhost:8118 al host de bastión.

    Para abrir un túnel al host de bastión, ejecuta el siguiente comando:

    ./bastion-tunnel.sh -N
    

    Los mensajes del túnel SSH aparecen en esta ventana. Cuando estés listo para cerrar la conexión, detén el proceso mediante Control+C o cierra la ventana.

  3. Cambia al directorio con la configuración de GKE en AWS.

    cd anthos-aws

Genera credenciales y conéctate

En la documentación de GKE en AWS, se supone que usas un túnel SSH en el puerto localhost 8118 para acceder a tu clúster. Si usas otro tipo de conexión a la VPC, como una interconexión directa, una VPN o algún otro método, puedes quitar la línea env HTTP_PROXY=http://localhost:8118 de los comandos.

  1. Genera un kubeconfig para la autenticación. Usa anthos-gke para adjuntar credenciales a tu configuración almacenada en ~/.kube/config.

    anthos-gke aws management get-credentials
    
  2. Comprueba si puedes conectarte al servicio de administración mediante kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    kubectl imprime el estado del clúster.

¿Qué sigue?