Crea una estación de trabajo de administrador

En este documento, se muestra cómo crear una estación de trabajo de administrador que puedes usar para crear clústeres locales de GKE.

En este documento, crearás una estación de trabajo de administrador que tenga una dirección IP estática. Esto es coherente con el proceso de instalación básico, que crea clústeres que usan direcciones IP estáticas.

Si deseas crear una estación de trabajo de administrador que use el protocolo de configuración de host dinámico (DHCP) para obtener su dirección IP, consulta Crea una estación de trabajo de administrador con DHCP.

En los pasos que se muestran en este documento, se usa la herramienta de línea de comandos gkeadm, que está disponible para Linux, Windows 10 y Windows Server 2019, pero no para el SO MAC. En una versión futura de GKE On-Prem, gkeadm estará disponible para MAC OS. Si deseas usar una computadora que ejecute MAC OS para crear una estación de trabajo de administrador, consulta Crea una estación de trabajo de administrador con una dirección IP estática o Crea una estación de trabajo de administrador con DHCP.

Descarga gkeadm

Descarga la herramienta de línea de comandos de gkeadm y haz que sea ejecutable:

gsutil cp gs://gke-on-prem-release-public/gkeadm/1.4.3-gke.3/linux/gkeadm ./
chmod +x gkeadm

Genera una plantilla para tu archivo de configuración

Para crear una estación de trabajo de administrador, la herramienta de gkeadm requiere un archivo de configuración. Genera una plantilla para tu archivo de configuración:

./gkeadm create config

El resultado es un archivo llamado admin-ws-config.yaml.

Valores propagados

Los siguientes campos en el archivo de configuración se propagan con valores predeterminados o generados. Por ejemplo:

adminWorkstation:
  name: gke-admin-ws-200617-113711
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  dataDiskName: gke-on-prem-admin-workstation-data-disk/gke-admin-ws-200617-113711-data-disk.vmdk
  dataDiskMB: 512
  ntpServer: ntp.ubuntu.com

Conserva todos los valores predeterminados y generados.

Observa el valor generado de dataDiskName. Este disco de máquina virtual (VMDK) se creó para ti. Más adelante, si borras de forma manual la estación de trabajo de administrador, el VMDK se borrará de manera automática.

Completa el resto del archivo de configuración

En el archivo de configuración, ingresa los valores de campo, como se describe en esta sección.

gcp.whitelistedServiceAccountKeyPath

String. Es la ruta de acceso del archivo de claves JSON para la cuenta de servicio incluida en la lista de anunciantes permitidos. Para obtener información sobre la creación de un archivo de claves JSON, consulta Cuenta de servicio incluida en la lista de anunciantes permitidos. Por ejemplo:

gcp:
  whitelistedServiceAccountKeyPath: "my-key-folder/whitelisted-key.json"

vCenter.credentials.address

String. Es la dirección IP o el nombre de host de vCenter Server.

Antes de completar el campo address, descarga e inspecciona el certificado de entrega de vCenter Server. Ingresa el siguiente comando para descargar el certificado y guardarlo en un archivo llamado vcenter.pem.

true | openssl s_client -connect VCENTER_IP:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem

Reemplaza VCENTER_IP por la dirección IP de tu servidor de vCenter.

Abre el archivo de certificado para ver el nombre común y el alternativo de la entidad:

openssl x509 -in vcenter.pem -text -noout

En el resultado, se muestra el nombre común (CN) de Subject. Este puede ser una dirección IP o un nombre de host. Por ejemplo:

Subject: ... CN = 203.0.113.100
Subject: ... CN = my-host.my-domain.example

Puede que, en el resultado, también se incluyan uno o más nombres de DNS en Subject Alternative Name:

X509v3 Subject Alternative Name:
    DNS:vcenter.my-domain.example

Elige el nombre común de Subject o uno de los nombres de DNS en Subject Alternative Name para usarlo como el valor de vcenter.credentials.address en el archivo de configuración. Por ejemplo:

vCenter:
  credentials:
    address: "203.0.113.1"
vCenter:
  credentials:
    address: "my-host.my-domain.example"

vCenter.credentials.username

String. Es una cuenta de usuario de vCenter Server. La cuenta de usuario debe tener la función de administrador o privilegios equivalentes. Consulta los requisitos de vSphere.

Por ejemplo:

vCenter:
  credentials:
    username: "administrator@vsphere.local"

vCenter.credentials.password

String. Es la contraseña de la cuenta de usuario de vCenter Server. Por ejemplo:

vCenter:
  credentials:
    password: "#STyZ2T#Ko2o"

vCenter.datacenter

String. Es el nombre de tu centro de datos de vSphere. Por ejemplo:

vCenter:
  datacenter: "MY-DATACENTER"

vCenter.datastore

String. Es el nombre de tu almacén de datos de vSphere. Por ejemplo:

vCenter:
  datastore: "MY-DATASTORE"

vCenter.cluster

String. Es el nombre de tu clúster de vSphere. Por ejemplo:

vCenter:
  cluster: "MY-CLUSTER"

vCenter.network

String. Es el nombre de la red de vSphere en la que deseas crear tu estación de trabajo de administrador. Por ejemplo:

vCenter:
  network: "MY-VM-NETWORK"

vCenter.resourcePool

String. Si no usas un grupo predeterminado, proporciona el nombre de tu grupo de recursos de vSphere. Por ejemplo:

vCenter:
  resourcePool: "MY-POOL"

Si usas el grupo de recursos predeterminado, proporciona el siguiente valor:

vCenter:
  resourcePool: "MY_CLUSTER/Resources"

Reemplaza MY_CLUSTER por el nombre de tu clúster de vSphere.

Consulta Specifying the root resource pool for a standalone host (Especifica el grupo de recursos raíz de un host independiente).

vCenter.caCertPath

String. Cuando un cliente, como GKE On-Prem, envía una solicitud a vCenter Server, el servidor debe demostrar su identidad al cliente mediante la presentación de un certificado o un paquete de certificados. Para verificar el certificado o el paquete, GKE On-Prem debe tener el certificado raíz en la cadena de confianza.

Establece vCenter.caCertPath en la ruta de acceso del certificado raíz. Por ejemplo:

vCenter:
  caCertPath: "/usr/local/google/home/me/certs/vcenter-ca-cert.pem"

Tu instalación de VMware tiene una autoridad certificada (CA) que emite un certificado para vCenter Server. El certificado raíz de la cadena de confianza es un certificado autofirmado que crea VMware.

Si no deseas usar la CA de VMware, que es la opción predeterminada, puedes configurar VMware para usar una autoridad certificada diferente.

Si vCenter Server usa un certificado que emitió la CA predeterminada de VMware, descarga el certificado de la siguiente manera:

curl -k "https://SERVER_ADDRESS/certs/download.zip" > download.zip

Reemplaza SERVER_ADDRESS por la dirección de tu servidor de vCenter.

Instala el comando unzip y descomprime el archivo del certificado:

sudo apt-get install unzip
unzip downloads.zip

Si el comando de descompresión no funciona la primera vez, vuelve a ingresarlo.

Busca el archivo de certificado en certs/lin.

proxyUrl

String: Si la máquina que usas a fin de ejecutar gkeadm usa un servidor proxy para acceder a Internet, configura este campo con la URL del servidor proxy. Por ejemplo:

proxyUrl: "https://my-proxy.example.local"

adminWorkstation.network.ipAllocationMode

String. Configura esto como "static". Por ejemplo:

adminWorkstation:
  network:
    ipAllocationMode: "static"

adminWorkstation.network.hostConfig.ip

String. Es una dirección IP que elijas para tu estación de trabajo de administrador. Por ejemplo:

adminWorkstation:
  network:
    hostconfig:
      ip: "172.16.5.1"

adminWorkstation.network.hostConfig.gateway

String. Es la dirección IP de la puerta de enlace predeterminada para la red que contiene tu estación de trabajo de administrador. Por ejemplo:

adminWorkstation:
  network:
    hostconfig:
      gateway: "172.16.6.254"

adminWorkstation.network.hostConfig.netmask

String. Es la máscara de red de la red que contiene tu estación de trabajo de administrador. Por ejemplo:

adminWorkstation:
  network:
    hostconfig:
      netmask: "255.255.248.0"

adminWorkstation.network.hostConfig.dns

Arreglo de strings. Es un arreglo de direcciones IP para servidores DNS que tu estación de trabajo de administrador puede usar. Por ejemplo:

adminWorkstation:
  network:
    hostconfig:
      dns:
      - "172.16.255.1"
      - "172.16.255.2"

adminWorkstation.proxyUrl

String. Si la red se encuentra detrás de un servidor proxy, y deseas que tu estación de trabajo de administrador y tus clústeres de GKE On-Prem usen el mismo servidor proxy, configura adminworkstation.proxyURL en la URL del servidor proxy. Por ejemplo:

adminworkstation:
  proxyUrl: "http://aw-proxy.example"

adminWorkstation.ntpServer

String. El nombre de host o la dirección IP del servidor del protocolo de tiempo de red que se usa en tu estación de trabajo de administrador. Por ejemplo:

adminWorkstation:
  ntpServer: "216.239.35.0"

Si dejas este campo vacío, GKE On-Prem usará "ntp.ubuntu.com".

A continuación, se muestra un ejemplo de un archivo admin-ws-config.yaml completo:

gcp:
  whitelistedServiceAccountKeyPath: "my-key-folder/whitelisted-key.json"
vCenter:
  credentials:
    address: "203.0.113.1"
    username: "administrator.vsphere.local"
    password: "#STyZ2T#Ko2o"
  datacenter: "MY-DATACENTER"
  datastore: "MY-DATASTORE"
  cluster: "MY-CLUSTER"
  network: "MY-VM-NETWORK"
  resourcePool: "MY-POOL"
  caCertPath: "/usr/local/google/home/me/certs/the-root.cert"
proxyUrl: ""
adminWorkstation:
  name: "gke-admin-ws-200617-113711"
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  dataDiskName: "gke-on-prem-admin-workstation-data-disk/gke-admin-ws-200617-113711-data-disk.vmdk"
  dataDiskMB: 512
  network:
    ipAllocationMode: "static"
    hostConfig:
      ip: "172.16.5.1"
      gateway: "172.16.6.254"
      netmask: "255.255.248.0"
      dns:
      - "172.16.255.1"
      - "172.16.255.2"
  proxyUrl: ""
  ntpServer: "ntp.ubuntu.com"

Crea tu estación de trabajo de administrador

La Cuenta de Google que se configuró como tu propiedad account del SDK debe tener estas funciones de IAM para que gkeadm pueda crear y administrar cuentas de servicio por ti:

  • resourcemanager.projectIamAdmin
  • serviceusage.serviceUsageAdmin
  • iam.serviceAccountCreator
  • iam.serviceAccountKeyAdmin

Para ver el valor de la propiedad account de tu SDK, haz lo siguiente:

gcloud config get-value account

Para otorgar funciones, debes tener ciertos permisos en tu proyecto de Google Cloud. Para obtener detalles, consulta Otorga, cambia y revoca el acceso a los recursos.

Si tienes los permisos necesarios, puedes otorgar las funciones tú mismo. De lo contrario, alguien de tu organización deberá otorgar las funciones por ti.

Para otorgar las funciones, sigue estos pasos:

Linux y macOS

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/serviceusage.serviceUsageAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/iam.serviceAccountKeyAdmin"

Windows

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/serviceusage.serviceUsageAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/iam.serviceAccountKeyAdmin"

Reemplaza lo siguiente:

  • PROJECT_ID: el valor de tu propiedad project del SDK
  • ACCOUNT: el valor de tu propiedad account del SDK.

Crea tu estación de trabajo de administrador y un conjunto de cuentas de servicio: Si prefieres crear y configurar las cuentas de servicio de forma manual, puedes omitir la marca --auto-create-service-accounts.

./gkeadm create admin-workstation --auto-create-service-accounts

En el resultado, se proporciona información detallada sobre la creación de tu estación de trabajo de administrador. Por ejemplo, puedes ver que gkeadm realizó las siguientes tareas:

  • Ejecutó comprobaciones previas.

  • Descargó una imagen OVA y la subió como una plantilla de vSphere.

  • Creó una clave SSH.

  • Creó una VM de estación de trabajo de administrador.

  • Imprimió las versiones de gkectl y Docker instaladas en la estación de trabajo de administrador.

  • Imprimió información sobre el servidor NTP en la estación de trabajo de administrador.

  • Creó cuentas de servicio y sus archivos de claves JSON. Estas cuentas de servicio son miembros del proyecto que es el superior de tu cuenta de servicio incluida en la lista de anunciantes permitidos.

  • Asignó las funciones de IAM adecuadas a las cuentas de servicio. Estas funciones se otorgan en el proyecto que es el superior de la cuenta de servicio de tu lista de anunciantes permitidos.

  • Copió los archivos de claves JSON para las cuentas de servicio en la estación de trabajo de administrador.

  • Copió el archivo de certificado de CA de vCenter Server en la estación de trabajo de administrador.

  • Preparó admin-cluster.yaml y user-cluster.yaml en la estación de trabajo de administrador. Más adelante, usarás estos archivos de configuración para crear clústeres.

...
- Validation Category: vCenter
    - [SUCCESS] Credentials
    - [SUCCESS] Version
    - [SUCCESS] Datacenter
    - [SUCCESS] Datastore
    - [SUCCESS] Resource Pool
    - [SUCCESS] Folder
    - [SUCCESS] Network
    - [SUCCESS] Datadisk

All validation results were SUCCESS.

******************************************
Admin workstation VM successfully created:
- Name:    my-admin-workstation
- IP:      172.16.5.1
- SSH Key: /usr/local/google/home/me/.ssh/gke-admin-workstation
******************************************

Printing gkectl and docker versions on admin workstation...
gkectl version
gkectl 1.4.0-gke.13 (git-b39331512)

docker version
Client:
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.9
 Git commit:        6a30dfca03
 Built:             Mon Sep 30 22:47:02 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Getting allowlisted service account...

Creating other service accounts and JSON key files...
    - connect-agent-sa-2007081316
    - connect-register-sa-2007081316
    - log-mon-sa-2007081316

Enabling APIs...
    - project my-project
        - serviceusage.googleapis.com
        - iam.googleapis.com
        - cloudresourcemanager.googleapis.com

Configuring IAM roles for service accounts...
    - my-allowlisted-sa for project my-project
        - roles/serviceusage.serviceUsageViewer
        - roles/iam.serviceAccountCreator
        - roles/iam.roleViewer
    - connect-agent-sa-2007081316 for project my-project
        - roles/gkehub.connect
    - connect-register-sa-2007081316 for project my-project
        - roles/gkehub.admin
        - roles/serviceusage.serviceUsageViewer
    - log-mon-sa-2007081316 for project my-project
        - roles/stackdriver.resourceMetadata.writer
        - roles/logging.logWriter
        - roles/monitoring.metricWriter

Copying files to admin workstation...
    - /usr/local/google/home/me/certs/vcenter-ca-cert.pem
    - /usr/local/google/home/me/service-account-keys/whitelisted-key.json
    - connect-agent-sa-2007081316.json
    - connect-register-sa-2007081316.json
    - log-mon-sa-2007081316.json

Preparing "admin-cluster.yaml" for gkectl...
Preparing "user-cluster.yaml" for gkectl...

********************************************************************
Admin workstation is ready to use.

Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation
This file is required for future upgrades
SSH into the admin workstation with the following command:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.5.1
********************************************************************

Obtén una conexión SSH a tu estación de trabajo de administrador

Cerca del final del resultado anterior, hay un comando que puedes usar para obtener una conexión SSH a tu estación de trabajo de administrador. Ingresa ese comando ahora. Por ejemplo:

ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.5.1

Enumera los archivos en tu estación de trabajo de administrador:

ls -1

En el resultado, puedes ver dos archivos de configuración del clúster, el archivo de certificado de CA y los archivos de claves JSON para tus cuentas de servicio:

admin-cluster.yaml
connect-agent-sa-2007081316.json
connect-register-sa-2007081316.json
log-mon-sa-2007081316.json
user-cluster.yaml
vcenter-ca-cert.pem
whitelisted-key.json

Inspecciona los archivos de configuración del clúster

En tu estación de trabajo de administrador, gkeadm creó dos archivos de configuración del clúster: admin-cluster.yaml y user-cluster.yaml. Usarás estos archivos más adelante para crear los clústeres de administrador y de usuario.

Usa un editor de texto para abrir admin-cluster.yaml. Ten en cuenta que muchos de los campos ya están propagados con valores que proporcionaste en tu archivo admin-ws-config.yaml. Por ejemplo:

apiVersion: v1
kind: AdminCluster
bundlePath: /var/lib/gke/bundles/gke-onprem-vsphere-1.4.0-gke.13-full.tgz
vCenter:
  address: 203.0.113.1
  datacenter: MY-DATACENTER
  cluster: MY-CLUSTER
  resourcePool: MY-POOL
  datastore: MY-DATASTORE
  caCertPath: vcenter-ca-cert.pem
  credentials:
    username: administrator@vsphere.local
    password: STyZ2T#Ko2o
...
gcrKeyPath: whitelisted-key.json
stackdriver:
  projectID: my-project-id
  serviceAccountKeyPath: log-mon-sa-2007081316.json

Abre user-cluster.yaml. Ten en cuenta que muchos de los campos ya están propagados con valores que proporcionaste en tu archivo admin-ws-config.yaml. Por ejemplo:

apiVersion: v1
kind: UserCluster
gkeOnPremVersion: 1.4.0-gke.13
...
stackdriver:
  projectID: my-project-id
  serviceAccountKeyPath: log-mon-sa-2007081316.json
gkeConnect:
  projectID: my-project-id
  registerServiceAccountKeyPath: connect-register-sa-2007081316.json
  agentServiceAccountKeyPath: connect-agent-sa-2007081316.json

Usa un solo proyecto de Google Cloud

El archivo de configuración de GKE On-Prem tiene varios campos en los que puedes especificar un ID del proyecto de Google Cloud. Por ejemplo, puedes especificar un ID del proyecto para gkeconnect y otro para stackdriver:

gkeconnect:
  projectid: ""
...
stackdriver:
  projectid: ""

Cuando gkeadm preparó tu archivo de configuración de GKE On-Prem, configuró todos los campos projectid en el proyecto que es el superior de tu cuenta de servicio de la lista de anunciantes permitidos. Además, gkeadm otorgó funciones a tus cuentas de servicio en el proyecto que es el superior de tu cuenta de servicio incluida en la lista de anunciantes permitidos. En resumen, gkeadm usó un solo proyecto de Google Cloud.

Si deseas obtener la flexibilidad de usar varios proyectos de Google Cloud, debes completar los campos projectid y otorgar funciones a las cuentas de servicio de forma manual. Para obtener más información, consulta Usa varios proyectos de Google Cloud.