Como criar uma estação de trabalho de administrador

Este documento mostra como criar uma estação de trabalho de administrador que pode ser usada para criar clusters locais do GKE.

Neste documento, você criará uma estação de trabalho de administrador com um endereço IP estático. Isso é consistente com a jornada básica de instalação, que cria clusters que usam endereços IP estáticos.

Se você quiser criar uma estação de trabalho de administrador que use o protocolo de configuração de host dinâmico (DHCP, na sigla em inglês) para receber o endereço IP, consulte Como criar uma estação de trabalho de administrador usando o DHCP.

Nas etapas deste documento, usamos a ferramenta de linha de comando gkeadm, disponível para Linux, Windows 10, Windows Server 2019 e macOS Catalina.

Como fazer o download de gkeadm

Linux

Faça o download da ferramenta de linha de comando gkeadm e torne-a executável:

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

Windows

Faça o download da ferramenta de linha de comando gkeadm:

gsutil cp gs://gke-on-prem-release-public/gkeadm/1.5.2-gke.3/windows/gkeadm.exe ./

macOS

Faça o download da ferramenta de linha de comando gkeadm e torne-a executável:

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

Como gerar um modelo para o arquivo de configuração

Para criar uma estação de trabalho de administrador, a ferramenta gkeadm requer um arquivo de configuração. Para gerar um modelo para seu arquivo de configuração:

./gkeadm create config

A saída é um arquivo chamado admin-ws-config.yaml:

Valores preenchidos

Os seguintes campos no arquivo de configuração são preenchidos com valores padrão ou gerados. Exemplo:

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

Mantenha todos os valores padrão e gerados.

Observe o valor gerado de dataDiskName. Esse disco de máquina virtual (VMDK, na sigla em inglês) foi criado para você. Posteriormente, se você excluir manualmente a estação de trabalho do administrador, o VMDK será excluído automaticamente.

Como preencher o restante do arquivo de configuração

No arquivo de configuração, insira os valores do campo conforme descrito nesta seção.

gcp.whitelistedServiceAccountKeyPath

String. O caminho do arquivo de chave JSON para sua conta de serviço de acesso a componentes. Essa é a conta que o GKE On-Prem usa para fazer o download de componentes do Container Registry. Para informações sobre como criar um arquivo de chave JSON, consulte Contas de serviço e chaves.

Quando gkeadm cria a estação de trabalho de administrador, a conta de serviço de acesso ao componente é ativada nessa estação.

Por exemplo:

gcp:
  whitelistedServiceAccountKeyPath: "my-key-folder/component-access-key.json"

vCenter.credentials.address

String. O endereço IP ou o nome do host do servidor vCenter.

Antes de preencher o campo address, faça o download e inspecione o certificado de exibição do servidor vCenter. Digite o comando a seguir para fazer o download do certificado e salvá-lo em um arquivo chamado vcenter.pem.

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

Substitua VCENTER_IP pelo endereço IP do seu servidor do vCenter.

Abra o arquivo de certificado para ver o nome comum e o alternativo do assunto:

openssl x509 -in vcenter.pem -text -noout

A saída mostra o nome comum (CN, na sigla em inglês) Subject. Pode ser um endereço IP ou um nome do host. Por exemplo:

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

A saída também pode incluir um ou mais nomes de DNS em Subject Alternative Name:

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

Escolha o nome comum Subject ou um dos nomes de DNS em Subject Alternative Name para usar como o valor de vcenter.credentials.address no arquivo de configuração. Por exemplo:

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

vCenter.credentials.username

String. Uma conta de usuário do vCenter Server. A conta de usuário precisa ter o papel de administrador ou privilégios equivalentes. Consulte os requisitos do vSphere.

Por exemplo:

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

vCenter.credentials.password

String. A senha da conta de usuário do vCenter Server. Por exemplo:

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

vCenter.datacenter

String. O nome do seu data center do vSphere. Por exemplo:

vCenter:
  datacenter: "MY-DATACENTER"

vCenter.datastore

String. O nome do seu armazenamento de dados do vSphere. Por exemplo:

vCenter:
  datastore: "MY-DATASTORE"

vCenter.cluster

String. O nome do seu cluster do vSphere. Por exemplo:

vCenter:
  cluster: "MY-CLUSTER"

vCenter.network

String. O nome da rede vSphere em que você quer criar a estação de trabalho do administrador.

Se o nome tiver um caractere especial, use uma sequência de escape.

Caracteres especiais Sequência de escape
Barra (/) %2f
Barra invertida (\) %5c
Sinal de porcentagem (%) %25

Se o nome da rede não for exclusivo, será possível especificar um caminho para a rede, como /DATACENTER/network/NETWORK_NAME.

Por exemplo:

vCenter:
  network: "MY-VM-NETWORK"

vCenter.resourcePool

String. Se você estiver usando um pool de recursos não padrão, forneça o nome do pool de recursos do vSphere. Por exemplo:

vCenter:
  resourcePool: "MY-POOL"

Se você estiver usando o pool de recursos padrão, forneça o seguinte valor:

vCenter:
  resourcePool: "MY_CLUSTER/Resources"

Substitua MY_CLUSTER pelo nome do cluster do vSphere.

Consulte Como especificar o pool de recursos raiz para um host autônomo.

vCenter.caCertPath

String. Quando um cliente, como o GKE On-Prem, envia uma solicitação ao servidor vCenter, o servidor precisa provar a própria identidade ao cliente, apresentando um certificado ou um pacote de certificados. Para verificar o certificado ou o pacote, o GKE On-Prem precisa ter o certificado raiz na cadeia de confiança.

Defina vCenter.caCertPath como o caminho do certificado raiz. Por exemplo:

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

A instalação do VMware tem uma autoridade de certificação (CA, na sigla em inglês) que emite um certificado para o servidor vCenter. O certificado raiz na cadeia de confiança é um certificado autoassinado criado pela VMware.

Se você não quiser usar a CA do VMWare, que é o padrão, configure o VMware para usar uma autoridade de certificação diferente.

Se o servidor vCenter usa um certificado emitido pela CA do VMware padrão, faça o download do certificado da seguinte maneira:

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

Substitua SERVER_ADDRESS pelo endereço do servidor do vCenter.

Instale o comando unzip e descompacte o arquivo de certificado:

sudo apt-get install unzip
unzip downloads.zip

Se o comando para descompactar não funcionar na primeira vez, digite o comando novamente.

Encontre o arquivo de certificado em certs/lin.

proxyUrl

String: se a máquina que você estiver usando para executar gkeadm usar um servidor proxy para acessar a Internet, defina esse campo como o URL do servidor proxy. Por exemplo:

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

adminWorkstation.network.ipAllocationMode

String. Defina como "static". Por exemplo:

adminWorkstation:
  network:
    ipAllocationMode: "static"

adminWorkstation.network.hostConfig.ip

String. Um endereço IP de sua escolha para a estação de trabalho do administrador. Por exemplo:

adminWorkstation:
  network:
    hostconfig:
      ip: "172.16.5.1"

adminWorkstation.network.hostConfig.gateway

String. O endereço IP do gateway padrão da rede que contém sua estação de trabalho do administrador. Por exemplo:

adminWorkstation:
  network:
    hostconfig:
      gateway: "172.16.6.254"

adminWorkstation.network.hostConfig.netmask

String. A máscara de rede da rede que contém sua estação de trabalho do administrador. Exemplo:

adminWorkstation:
  network:
    hostconfig:
      netmask: "255.255.248.0"

adminWorkstation.network.hostConfig.dns

Matriz de strings. Uma matriz de endereços IP para servidores DNS que a estação de trabalho do administrador pode usar. Por exemplo:

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

adminWorkstation.proxyUrl

String. Se sua rede estiver protegida por um servidor proxy, e você quiser que sua estação de trabalho do administrador e seus clusters do GKE On-Prem usem o mesmo servidor proxy, defina adminworkstation.proxyURL como o URL do servidor proxy. Por exemplo:

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

adminWorkstation.ntpServer

String. O nome do host ou o endereço IP do servidor Network Time Protocol que sua estação de trabalho de administrador precisa usar. Exemplo:

adminWorkstation:
  ntpServer: "216.239.35.0"

Se você deixar esse campo vazio, o GKE On-Prem usará "ntp.ubuntu.com".

Aqui está um exemplo de um arquivo admin-ws-config.yaml concluído:

gcp:
  whitelistedServiceAccountKeyPath: "my-key-folder/component-access-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"

Como criar sua estação de trabalho do administrador

A conta do Google definida como a propriedade account do SDK precisa ter estes papéis do IAM para que gkeadm possa criar contas de serviço para você:

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

Para visualizar o valor da propriedade account do SDK:

gcloud config get-value account

Para conceder papéis, você precisa ter determinadas permissões no seu projeto do Cloud. Para instruções detalhadas, veja Como conceder, alterar e revogar acesso a recursos.

Se tiver as permissões necessárias, você mesmo poderá conceder os papéis. Caso contrário, outra pessoa na sua organização precisará conceder esses papéis para você.

Para conceder os papéis:

Linux e 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"

Substitua:

  • PROJECT_ID: o valor da propriedade project do SDK.
  • ACCOUNT: o valor da propriedade account do SDK.

Crie a estação de trabalho do administrador e um conjunto de contas de serviço: Se você preferir criar e configurar suas contas de serviço manualmente, omita a sinalização --auto-create-service-accounts.

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

A saída fornece informações detalhadas sobre a criação da estação de trabalho do administrador. Por exemplo, é possível ver que gkeadm executou estas tarefas:

  • executou verificações de simulação:

  • fez o download de uma imagem OVA e a enviou como um modelo do vSphere;

  • criou uma chave SSH;

  • criou uma VM de estação de trabalho do administrador;

  • imprimiu as versões gkectl e Docker instaladas na estação de trabalho do administrador;

  • imprimiu informações sobre o servidor NTP na estação de trabalho do administrador;

  • criou contas de serviço e respectivos arquivos de chave JSON. Essas contas de serviço são membros do projeto que é pai da conta de serviço de acesso ao componente.

  • atribuiu os papéis apropriados do IAM às contas de serviço. Esses papéis são concedidos no projeto que é pai da conta de serviço de acesso ao componente.

  • copiou arquivos de chave JSON para as contas de serviço na estação de trabalho do administrador;

  • copiou o arquivo de certificado de CA no servidor vCenter para a estação de trabalho do administrador;

  • admin-cluster.yaml e user-cluster.yaml foram preparados na estação de trabalho do administrador. Em seguida, você usará esses arquivos de configuração para criar clusters.

...
- 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 ... 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-component-access-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/component-access-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
********************************************************************

Como conseguir uma conexão SSH com a estação de trabalho do administrador

Próximo ao final da saída anterior, há um comando que pode ser usado para ter uma conexão SSH com sua estação de trabalho de administrador. Digite esse comando agora. Por exemplo:

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

Liste os arquivos na estação de trabalho do administrador:

ls -1

Na saída, é possível ver dois arquivos de configuração do cluster, que são o arquivo do certificado de CA e os arquivos de chave JSON das suas contas de serviço:

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
component-access-key.json

Como inspecionar os arquivos de configuração do cluster

Na estação de trabalho do administrador, gkeadm criou dois arquivos de configuração de cluster: admin-cluster.yaml e user-cluster.yaml. Você usará esses arquivos mais tarde para criar os clusters de administrador e de usuário.

Use um editor de texto para abrir admin-cluster.yaml. Observe que muitos dos campos já estão preenchidos com valores que você forneceu no arquivo admin-ws-config.yaml. Exemplo:

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: component-access-key.json
stackdriver:
  projectID: my-project-id
  serviceAccountKeyPath: log-mon-sa-2007081316.json

Abra user-cluster.yaml. Observe que muitos dos campos já estão preenchidos com valores que você forneceu no arquivo admin-ws-config.yaml. Por exemplo:

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

Como usar um único projeto do Cloud

O arquivo de configuração do GKE On-Prem tem vários campos para especificar um ID do projeto do Google Cloud. Por exemplo, é possível especificar um ID do projeto para gkeconnect e outro ID do projeto para stackdriver:

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

Quando gkeadm prepara seu arquivo de configuração do GKE On-Prem, todos os campos projectid para o projeto que é pai da conta de serviço de acesso a componentes são definidos. Além disso, gkeadm concedeu papéis às suas contas de serviço no projeto pai da conta na lista de permissões. Em resumo, gkeadm usou um único projeto do Cloud.

Se você quiser a flexibilidade de usar vários projetos do Google Cloud, preencha manualmente os campos projectid e conceda papéis manualmente às suas contas de serviço. Para mais informações, consulte Como usar vários projetos do Google Cloud.