Crea clústeres de administrador

En GKE en Bare Metal, debes configurar clústeres de administrador para administrar otros clústeres de forma segura. Puedes crear, actualizar, actualizar o borrar clústeres de usuario de los clústeres de administrador. Los clústeres de usuario ejecutan cargas de trabajo por separado de la administración, por lo que la información sensible está protegida.

Los clústeres de administrador que administran cargas de trabajo de varios clústeres pueden proporcionar confiabilidad con alta disponibilidad (HA). En un clúster de alta disponibilidad, si falla un nodo del plano de control, los otros nodos seguirán funcionando.

Un clúster de administrador en un entorno de varios clústeres proporciona la mejor seguridad básica. Debido a que el acceso a los datos de administración está separado de las cargas de trabajo, aquellos que acceden a las cargas de trabajo del usuario no tienen acceso a los datos administrativos sensibles, como las claves SSH y los datos de cuentas de servicio. Como resultado, existe cierta compensación entre la seguridad y los recursos necesarios, ya que un clúster de administrador separado significa que necesitas recursos dedicados para la administración y las cargas de trabajo.

Puedes crear un clúster de administrador con el comando bmctl. Después de crear un clúster de administrador, debes crear clústeres de usuario para ejecutar cargas de trabajo.

Requisitos previos:

  • Se descarga la versión más reciente de bmctl (gs://anthos-baremetal-release/bmctl/1.28.400-gke.77/linux-amd64/bmctl) de Cloud Storage.
  • La estación de trabajo que ejecuta bmctl tiene conectividad de red a todos los nodos en los clústeres de usuario de destino.
  • La estación de trabajo que ejecuta bmctl tiene conectividad de red al servidor de la API del clúster (plano de control de VIP).
  • La clave SSH que se usa a fin de crear el clúster de administrador está disponible para root o un usuario no raíz con privilegios sudo sin contraseña en todos los nodos del clúster de administrador de destino.
  • La cuenta de servicio del registro de Connect está configurada para usarse con Connect.

Consulta la quickstart de GKE en Bare Metal si quieres obtener instrucciones paso a paso expandidas para crear un clúster híbrido. Crear un clúster de administrador es similar a crear un clúster híbrido, excepto que no ejecutas cargas de trabajo en el clúster de administrador.

Habilita SELinux

Si deseas habilitar SELinux para proteger tus contenedores, debes asegurarte de que SELinux esté habilitado en el modo Enforced en todas tus máquinas anfitrión. A partir de GKE en Bare Metal versión 1.9.0 o posterior, puedes habilitar o inhabilitar SELinux antes o después de la creación de un clúster o de sus actualizaciones. SELinux está habilitado de forma predeterminada en Red Hat Enterprise Linux (RHEL). Si SELinux está inhabilitado en tus máquinas anfitrión o no estás seguro, consulta Protege tus contenedores con SELinux a fin de obtener instrucciones para habilitarlo.

GKE en Bare Metal admite SELinux solo en los sistemas RHEL.

Accede a gcloud CLI y crea un archivo de configuración del clúster de administrador

  1. Configura las credenciales predeterminadas que GKE en Bare Metal puede usar para crear el clúster con el siguiente comando:

    gcloud auth application-default login
    
  2. Para usar las funciones automáticas de habilitación de API y creación de cuentas de servicio en esta página, otorga la función de propietario del proyecto a ese principal. Si el principal no puede tener la función de propietario del proyecto, completa el siguiente paso.

  3. Para asegurarte de que la creación del clúster se pueda realizar sin necesidad de otorgar la función de propietario del proyecto, agrega las siguientes funciones de IAM al principal:

    • Administrador de cuenta de servicio
    • Administrador de clave de cuenta de servicio
    • Administrador de IAM de proyecto
    • Lector de Compute
    • Administrador de Service Usage

    Si el principal es una cuenta de servicio con esas funciones, puedes ejecutar lo siguiente:

    export GOOGLE_APPLICATION_CREDENTIALS=JSON_KEY_FILE
    

    Reemplaza JSON_KEY_FILE por la ruta al archivo de claves JSON de tu cuenta de servicio.

  4. Obtén el ID del proyecto de Google Cloud y almacénalo en una variable de entorno para usarlo en la creación del clúster:

    export CLOUD_PROJECT_ID=$(gcloud config get-value project)
    

Crea una configuración del clúster de administrador con bmctl

Después de acceder a gcloud CLI y configurar tu proyecto, puedes crear el archivo de configuración del clúster con el comando bmctl.

En el siguiente ejemplo, todas las cuentas de servicio se crean automáticamente mediante el comando bmctl create config:

bmctl create config -c ADMIN_CLUSTER_NAME --enable-apis \
    --create-service-accounts --project-id=CLOUD_PROJECT_ID

Reemplaza lo siguiente:

  • ADMIN_CLUSTER_NAME es el nombre del clúster nuevo.
  • CLOUD_PROJECT_ID: es el ID de tu proyecto de Google Cloud o la variable de entorno $CLOUD_PROJECT_ID.

A continuación, se muestra un ejemplo sobre cómo crear un archivo de configuración para un clúster de administrador llamado admin1 asociado con el ID del proyecto my-gcp-project:

bmctl create config -c admin1 --create-service-accounts --enable-apis --project-id=my-gcp-project

El archivo se escribe en bmctl-workspace/admin1/admin1.yaml.

Como alternativa a habilitar las API y crear cuentas de servicio automáticamente, también puedes proporcionar tus cuentas de servicio existentes con los permisos de IAM adecuados. Esto significa que puedes omitir la creación automática de cuentas de servicio en el paso anterior en el comando bmctl:

bmctl create config -c admin1 --project-id=my-gcp-project

Edita el archivo de configuración del clúster

Ahora que tienes un archivo de configuración de clúster, edítalo para realizar los siguientes cambios:

  1. Proporciona la clave privada SSH para acceder a los nodos del clúster de administrador:

    # bmctl configuration variables. Because this section is valid YAML but not a valid Kubernetes
    # resource, this section can only be included when using bmctl to
    # create the initial admin/admin cluster. Afterwards, when creating user clusters by directly
    # applying the cluster and node pool resources to the existing cluster, you must remove this
    # section.
    gcrKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
    sshPrivateKeyPath: /path/to/your/ssh_private_key
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-cloud-ops.json
    
  2. Registra tus clústeres en una flota. El ID del proyecto que especificaste en el comando bmctl create config se agrega de forma automática al campo gkeConnect.projectID en el archivo de configuración del clúster. Este proyecto se conoce como el proyecto host de la flota.

    • Si creaste tu archivo de configuración con las funciones de habilitación automática de API y creación de cuentas de servicio, puedes omitir este paso.

    • Si creaste el archivo de configuración sin usar las funciones de habilitación automática de API y creación de cuentas de servicio, haz referencia a las claves JSON de la cuenta de servicio descargadas en los campos gkeConnectAgentServiceAccountKeyPath y gkeConnectRegisterServiceAccountKeyPath correspondientes del archivo de configuración del clúster.

    • De forma opcional, puedes agregar gkeConnect.location a la especificación del clúster para especificar la región de Google Cloud en la que se ejecutan los servicios Fleet y Connect. Esta membresía regional restringe el tráfico del servicio de flota a tu región. Si incluyes gkeConnect.location en la especificación del clúster, la región que especifiques debe ser la misma que la región configurada en clusterOperations.location. Si las regiones no son las mismas, la creación del clúster fallará.

  3. Asegúrate de que la configuración especifique un tipo de clúster de admin (el valor predeterminado):

    spec:
      # Cluster type. This can be:
      #   1) admin:  to create an admin cluster. This can later be used to create user clusters.
      #   2) user:   to create a user cluster. Requires an existing admin cluster.
      #   3) hybrid: to create a hybrid cluster that runs admin cluster components and user workloads.
      #   4) standalone: to create a cluster that manages itself, runs user workloads, but does not manage other clusters.
      type: admin
    
  4. Si la API de GKE On-Prem está habilitada en tu proyecto de Google Cloud, todos los clústeres del proyecto se inscriben en la API de GKE On-Prem de forma automática en la región configurada en clusterOperations.location.

    • Si deseas inscribir todos los clústeres del proyecto en la API de GKE On-Prem, asegúrate de seguir los pasos que se indican en Antes de comenzar para activar y usar la API de GKE On-Prem en el proyecto.

    • Si no deseas inscribir el clúster en la API de GKE On-Prem, incluye esta sección y establece gkeOnPremAPI.enabled en false. Si no quieres inscribir ningún clúster en el proyecto, inhabilita gkeonprem.googleapis.com (el nombre del servicio para la API de GKE On-Prem) en el proyecto. Para obtener instrucciones, consulta Inhabilita servicios.

  5. Cambia el archivo de configuración para especificar un plano de control de alta disponibilidad de varios nodos. Especifica una cantidad impar de nodos a fin de tener la mayoría de quórum para la HA:

      # Control plane configuration
      controlPlane:
        nodePoolSpec:
          nodes:
          # Control plane node pools. Typically, this is either a single machine
          # or 3 machines if using a high availability deployment.
          - address: 10.200.0.4
          - address: 10.200.0.5
          - address: 10.200.0.6
    
  6. Especifica la densidad del Pod de los nodos del clúster:

    ....
    # NodeConfig specifies the configuration that applies to all nodes in the cluster.
    nodeConfig:
      # podDensity specifies the pod density configuration.
      podDensity:
        # maxPodsPerNode specifies at most how many pods can be run on a single node.
        maxPodsPerNode: 250
    ....
    

    En los clústeres de administrador, los valores permitidos para maxPodsPerNode son 32-250 para los clústeres de alta disponibilidad y 64-250 para los clústeres que no son HA. El valor predeterminado si no se especifica, es 110. Este valor no se puede actualizar una vez que se crea el clúster.

    La densidad del Pod también está limitada por los recursos IP disponibles de tu clúster. Para obtener más detalles, consulta Herramientas de redes de Pods.

Crea el clúster de administrador con la configuración del clúster

Usa el comando bmctl para implementar el clúster:

bmctl create cluster -c ADMIN_CLUSTER_NAME

ADMIN_CLUSTER_NAME especifica el nombre del clúster creado en la sección anterior.

A continuación, se muestra un ejemplo del comando para crear un clúster llamado admin1:

bmctl create cluster -c admin1

Ejemplos de configuración de clústeres de administrador

Para ver ejemplos de configuración de clústeres de administrador, consulta Clústeres de administrador en las muestras de configuración de clústeres.