Integración con la infraestructura existente

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

Antes de empezar

Para completar los siguientes pasos, necesitará lo siguiente:

  • Permisos de AWS IAM como se describe en Requisitos .

  • Una VPC de AWS existente con:

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

    Para obtener más información sobre cómo configurar su VPC de AWS, consulte VPC con subredes públicas y privadas .

  • Los ID de subred pública y privada de su VPC existente. Por ejemplo, subnet-1234567890abcdefg .

  • Para las versiones de clúster 1.20 o anteriores, un grupo de seguridad de AWS que permita el acceso SSH (puerto 22) desde los grupos de seguridad o rangos de IP donde administrará su instalación de GKE en AWS.

  • Para las versiones de clúster 1.21 o superiores, un grupo de seguridad de AWS que permite conexiones de Konnectivity (puerto 8132) salientes desde los rangos de IP de VPC que albergan sus grupos de nodos de GKE en AWS.

Creando el espacio de trabajo

  1. Cree un archivo llamado anthos-gke.yaml en un editor de texto. Pegue el siguiente contenido en él.

     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
    

    Reemplace los siguientes valores:

    • AWS_REGION con la región de AWS donde se ejecutará el clúster.
    • ADMIN_AWS_IAM_ARN con el nombre del recurso de Amazon de la clave IAM de AWS del administrador.
    • KMS_KEY_ARN con el nombre de recurso de Amazon de la clave AWS KMS que protege los datos de su servicio de administración cuando se crea dicho servicio.
    • DATABASE_KMS_KEY_ARN con el nombre de recurso de Amazon de la clave AWS KMS que protege sus bases de datos etcd .
    • SECURITY_GROUP_IDS con ID de grupo de seguridad adicionales permitieron el acceso a las máquinas virtuales de su servicio de administración.
    • GCP_PROJECT_ID con el Google Cloud proyecto que aloja su entorno de GKE Enterprise.
    • MANAGEMENT_KEY_PATH con la ubicación de su Google Cloudclave de cuenta de servicio de gestión.
    • HUB_KEY_PATH con la ubicación de su Google CloudConectar la clave de la cuenta de servicio .
    • NODE_KEY_PATH con la ubicación de la clave de la cuenta de servicio del nodo GKE en AWS.
    • VPC_SUBNET_ID con el ID de subred donde se ejecuta el servicio de administración.
    • SSH_SECURITY_GROUP con la lista de ID de grupos de seguridad a los que se les permite el acceso SSH dentro de las instancias del servicio de administración.

    Opcional: si desea cifrar los volúmenes de su servicio de administración, reemplace los siguientes valores:

    • ROOT_VOLUME_SIZE con el tamaño del volumen en gigabytes para el servicio de administración. Por ejemplo, 10 .
    • ROOT_VOLUME_TYPE con el tipo de volumen EBS . Por ejemplo, gp3 .
    • ROOT_VOLUME_IOPS con el número de operaciones de E/S por segundo (IOPS) aprovisionadas para el volumen. Solo válido cuando volumeType es GP3 . Para más información, consulte Volúmenes SSD de propósito general (gp3) .
    • ROOT_VOLUME_KEY con el nombre del recurso de Amazon de la clave de AWS KMS que cifra los volúmenes raíz de la instancia del servicio de administración. Para obtener más información, consulte "Usar una CMK administrada por el cliente para cifrar volúmenes" .

    Opcional: si desea crear un host bastión para acceder a su entorno de GKE en AWS con un túnel SSH, reemplace los siguientes valores:

    • BASTION_HOST_SUBNET_ID con el ID de la subred donde se ejecuta el host bastión. Asegúrese de que VPC_SUBNET_ID permita conexiones entrantes desde BASTION_HOST_SUBNET_ID .
    • SSH_CIDR_BLOCK con el bloque CIDR desde el que su host bastión permite conexiones SSH entrantes. Por ejemplo, 203.0.113.0/24 . Si desea permitir SSH desde cualquier dirección IP, utilice 0.0.0.0/0 .
    • BASTION_VOLUME_KEY con el nombre de recurso de Amazon de la clave AWS KMS que protege su volumen raíz de bastión.

    Opcional: si desea tráfico directo a través de un proxy HTTP , reemplace el siguiente valor:

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

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

    anthos-gke aws management apply
    

    El comando anthos-gke anthos-gke aws management apply puede tardar hasta diez minutos en completarse. Una vez finalizado, el servicio de administración se ejecuta en AWS.

Etiquete sus subredes con el nombre de su clúster

Si utiliza subredes de AWS existentes con GKE en AWS y desea crear balanceadores de carga, debe etiquetar su VPC y subredes con el nombre de su servicio de administración. Si creó su VPC con anthos-gke o ya ha etiquetado sus subredes, omita este paso.

Para etiquetar sus subredes, realice los siguientes pasos:

  1. Vaya al directorio con su configuración de GKE en AWS. Este directorio se creó al instalar el servicio de administración .

    cd anthos-aws

  2. Exporte el ID de su clúster como la variable de entorno $CLUSTER-ID . Seleccione su versión de Terraform y ejecute 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. Exporte su ID de VPC de AWS como la variable de entorno $VPC_ID . Seleccione su versión de Terraform y ejecute 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. Obtenga sus ID de subred privada con la herramienta aws CLI.

      aws ec2 describe-subnets \
          --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
          --query "Subnets[*].SubnetId" \
          --output text
    
  5. Etiquete sus subredes con el ID de su clúster. Ejecute el siguiente comando para cada una de sus subredes.

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

    Reemplace SUBNET_IDS con la lista de ID de subred, separados por espacios. Por ejemplo, subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef .

Conexión al servicio de gestión

En esta sección, establecerá una conexión con su servicio de administración. Puede tunelizar sus comandos a través de un host bastión . Si tiene una conexión directa con su VPC de AWS, vaya a "Generar credenciales y conectarse" .

Conectarse con un host bastión

Si usa un host bastión para configurar el túnel SSH, primero configure el host en su anthos-gke.yaml . A continuación, cree un script para abrir el túnel siguiendo estos pasos:

  1. Utilice terraform para generar un script que abra un túnel SSH al host bastión.

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

    Terraform crea el script bastion-tunnel.sh que utiliza la clave SSH del host bastión ( ~/.ssh/anthos-gke ).

  2. Para abrir el túnel, ejecute el script bastion-tunnel.sh . El túnel reenvía desde localhost:8118 al host bastión.

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

    ./bastion-tunnel.sh -N
    

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

  3. Cambie al directorio con su configuración de GKE en AWS.

    cd anthos-aws

Generar credenciales y conectarse

La documentación de GKE en AWS asume que se usa un túnel SSH en el puerto localhost para acceder al clúster. Si usa otro tipo de conexión a su VPC, como una interconexión directa, una VPN u otro método, puede eliminar la línea env HTTP_PROXY=http://localhost:8118 de los comandos.

  1. Genere un kubeconfig para la autenticación. Use anthos-gke para añadir credenciales a su configuración almacenada en ~/.kube/config .

    anthos-gke aws management get-credentials
    
  2. Compruebe que puede conectarse al servicio de administración con kubectl .

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

    kubectl imprime el estado del clúster.

¿Qué sigue?