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.

As etapas neste documento usam a ferramenta de linha de comando gkeadm, disponível apenas para Linux. Em uma versão futura do GKE On-Prem, o gkeadm estará disponível para Windows e MAC OS. Se você quiser usar um computador com Windows ou MAC OS para criar uma estação de trabalho de administrador, consulte Como criar uma estação de trabalho de administrador com um endereço IP estático ou Como criar uma estação de trabalho de administrador usando o DHCP.

Como fazer o download de gkeadm

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.3.2-gke.1/linux/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:

gcp:
  # Path of the allowlisted service account's JSON key file
  whitelistedServiceAccountKeyPath: ""
# Specify which vCenter resources to use
vCenter:
  # The credentials and address GKE On-Prem should use to connect to vCenter
  credentials:
    address: ""
    username: ""
    ...
adminWorkstation:
  ...
  network:
    # The IP allocation mode: 'dhcp' or 'static'
    ipAllocationMode: ""
    # # The host config in static IP mode. Do not include if using DHCP
    # hostConfig:
    #   # The IPv4 static IP address for the admin workstation
    ...

Como preencher o 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 a conta de serviço incluída na lista de permissões. Para informações sobre como criar um arquivo de chave JSON, consulte a conta de serviço permitida na lista. Exemplo:

whitelistedServiceAccountKeyPath: "my-key-folder/whitelisted-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. 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. 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.

Exemplo:

username: "administrator@vsphere.local"

vCenter.credentials.password

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

password: "#STyZ2T#Ko2o"

vCenter.datacenter

String. O nome do seu data center do vSphere. Exemplo:

datacenter: "MY-DATACENTER"

vCenter.datastore

String. O nome do seu armazenamento de dados do vSphere. Exemplo:

datastore: "MY-DATASTORE"

vCenter.cluster

String. O nome do seu cluster do vSphere. Exemplo:

cluster: "MY-CLUSTER"

vCenter.network

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

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. Exemplo:

resourcePool: "MY-POOL"

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

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. Exemplo:

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

A instalação do VMware tem uma autoridade de certificação (CA) 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 -k "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. Exemplo:

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

adminWorkstation.name

String. Um nome de sua escolha para a estação de trabalho de administrador. Exemplo:

name: "my-admin-workstation"

adminWorkstation.cpus

Número inteiro. O número de CPUs virtuais para sua estação de trabalho de administrador. Por exemplo:

cpus: 4

adminWorkstation.memoryMB

Número inteiro. O número de megabytes de memória para a estação de trabalho do administrador. Exemplo:

memoryMB: 8192

adminWorkstation.diskGB

Número inteiro. O número de gigabytes de espaço em disco virtual para a estação de trabalho do administrador. Precisa ser no mínimo 50. Exemplo:

diskGB: 50

adminWorkstation.network.ipAllocationMode

String. Defina como "static". Exemplo:

ipAllocationMode: "static"

adminWorkstation.network.hostConfig.ip

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

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. Exemplo:

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:

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. Exemplo:

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. 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:

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/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: "my-admin-workstation"
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  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: "216.239.35.0"

Como criar sua estação de trabalho do administrador

Para usar gkeadm para criar uma estação de trabalho de administrador e um conjunto de contas de serviço, conceda os papéis de IAM resourcemanager.projectIamAdmin e serviceusage.serviceUsageAdmin à conta de faturamento padrão do Cloud. Para ver a conta padrão:

gcloud config get-value account

Para conceder os papéis necessários:

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

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

Substitua:

  • PROJECT_ID: ID do projeto de conexão.
  • DEFAULT_ACCOUNT: a conta de faturamento do Cloud padrão.

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 os respectivos arquivos de chave JSON. Essas contas de serviço são membros do projeto que é pai da conta de serviço permitida na lista.

  • Atribuiu os papéis apropriados do IAM às contas de serviço. Esses papéis são concedidos no projeto pai da conta de serviço permitida na lista.

  • Copiou os arquivos de chave JSON para as contas de serviço na estação de trabalho de administrador.

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

  • config.yaml foi preparado na estação de trabalho de administrador. Posteriormente, você usará config.yaml para criar clusters.

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

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.3.1-gke.0 (git-3aaf91927)

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...
    - log-mon-sa-2004211642
    - connect-agent-sa-2004211642
    - connect-register-sa-2004211642

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
    - log-mon-sa-2004211642 for project my-project
        - roles/stackdriver.resourceMetadata.writer
        - roles/logging.logWriter
        - roles/monitoring.metricWriter
    - connect-agent-sa-2004211642 for project my-project
        - roles/gkehub.connect
    - connect-register-sa-2004211642 for project my-project
        - roles/gkehub.admin
        - roles/serviceusage.serviceUsageViewer

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
    - log-mon-sa-2004211642.json
    - connect-agent-sa-2004211642.json
    - connect-register-sa-2004211642.json

Preparing config.yaml for gkectl...

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

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
********************************************************************

Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation

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. 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 um arquivo de configuração do GKE On-Prem, seu arquivo de certificado de CA e os arquivos de chave JSON para suas contas de serviço:

config.yaml
connect-agent-sa-200303-143027.json
connect-register-sa-200303-143027.json
log-mon-sa-200303-143027.json
the-root.crt
whitelisted-key.json

Como inspecionar o arquivo de configuração do GKE On-Prem

Na estação de trabalho do administrador, o arquivo de configuração foi criado e chamado de config.yaml. Você usará esse arquivo posteriormente para criar seus clusters de administrador e usuário. Use um editor de texto para abrir config.yaml. Observe que muitos dos campos já estão preenchidos com valores que você forneceu no arquivo admin-ws-config.yaml. Exemplo:

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
…
gkeconnect:
  projectid: my-project-id
  registerserviceaccountkeypath: /home/ubuntu/connect-register-sa-xxx.json
  agentserviceaccountkeypath: /home/ubuntu/connect-agent-sa-xxx.json
stackdriver:
  projectid: my-project-id
  clusterlocation: ""
  enablevpc: false
  serviceaccountkeypath: /home/ubuntu/log-mon-sa-xxx.json

Como usar um único projeto do Google 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 para stackdriver:

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

Quando gkeadm preparou o arquivo de configuração do GKE On-Prem, ele definiu todos os campos projectid como o projeto que é pai da conta de serviço permitida na lista. 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 Google 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.