Créer un poste de travail administrateur

Ce document explique comment créer un poste de travail administrateur que vous pouvez utiliser pour créer des clusters GKE On-Prem.

Dans ce document, vous allez créer un poste de travail administrateur disposant d'une adresse IP statique. Cela est conforme au processus d'installation de base qui crée des clusters utilisant des adresses IP statiques.

Si vous souhaitez créer un poste de travail administrateur utilisant le protocole DHCP (Dynamic Host Configuration Protocol) pour obtenir son adresse IP, consultez la section Créer un poste de travail administrateur via DHCP.

Les étapes décrites dans ce document utilisent l'outil de ligne de commande gkeadm, disponible pour Linux, Windows 10, Windows Server 2019 et macOS Catalina.

Télécharger gkeadm

Linux

Téléchargez l'outil de ligne de commande gkeadm et rendez-le exécutable :

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

Windows

Télécharger l'outil de ligne de commande gkeadm :

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

macOS

Téléchargez l'outil de ligne de commande gkeadm et rendez-le exécutable :

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

Générer un modèle pour votre fichier de configuration

Pour créer un poste de travail d'administrateur, l'outil gkeadm a besoin d'un fichier de configuration. Pour générer un modèle pour votre fichier de configuration :

./gkeadm create config

Le résultat est un fichier nommé admin-ws-config.yaml.

Valeurs renseignées

Les champs suivants de votre fichier de configuration sont renseignés avec des valeurs par défaut ou générées. Exemple :

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

Conservez toutes les valeurs par défaut et générées.

Notez la valeur générée de dataDiskName. Ce disque de machine virtuelle (VMDK) est créé pour vous. Par la suite, si vous supprimez manuellement votre poste de travail administrateur, le VMDK est automatiquement supprimé.

Remplir les autres champs du fichier de configuration

Comme décrit dans cette section, saisissez les valeurs des champs de votre fichier de configuration.

gcp.whitelistedServiceAccountKeyPath

Chaîne. Chemin d'accès au fichier de clé JSON pour votre compte de service d'accès au composant. Il s'agit du compte utilisé par GKE On-Prem pour télécharger des composants à partir de Container Registry. Pour en savoir plus sur la création d'un fichier de clé JSON, consultez la page Comptes de service et clés.

Lorsque gkeadm crée le poste de travail administrateur, il active votre compte de service d'accès au composant sur ce poste.

Exemple :

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

vCenter.credentials.address

Chaîne. Adresse IP ou nom d'hôte de votre serveur vCenter.

Avant de remplir le champ address, téléchargez et inspectez le certificat de diffusion de votre serveur vCenter. Saisissez la commande suivante pour télécharger le certificat et l'enregistrer dans un fichier nommé vcenter.pem.

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

Remplacez VCENTER_IP par l'adresse IP de votre serveur vCenter.

Ouvrez le fichier de certificat pour afficher le nom commun d'objet et le nom alternatif d'objet :

openssl x509 -in vcenter.pem -text -noout

Le résultat indique le nom commun (CN) d'objet (Subject). Il peut s'agir d'une adresse IP ou d'un nom d'hôte. Exemple :

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

Le résultat peut également inclure un ou plusieurs noms DNS sous Subject Alternative Name :

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

Choisissez le nom commun Subject ou l'un des noms DNS sous Subject Alternative Name pour l'utiliser comme valeur du champ vcenter.credentials.address dans votre fichier de configuration. Exemple :

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

vCenter.credentials.username

Chaîne. Compte utilisateur vCenter Server. Le compte utilisateur doit disposer du rôle d'administrateur ou de privilèges équivalents. Consultez les exigences concernant vSphere.

Exemple :

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

vCenter.credentials.password

Chaîne. Mot de passe du compte utilisateur vCenter Server. Exemple :

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

vCenter.datacenter

Chaîne. Nom de votre centre de données vSphere. Exemple :

vCenter:
  datacenter: "MY-DATACENTER"

vCenter.datastore

Chaîne. Nom de votre datastore vSphere. Exemple :

vCenter:
  datastore: "MY-DATASTORE"

vCenter.cluster

Chaîne. Nom de votre cluster vSphere. Exemple :

vCenter:
  cluster: "MY-CLUSTER"

vCenter.network

Chaîne. Le nom du réseau vSphere dans lequel vous souhaitez créer votre poste de travail d'administrateur.

Si le nom contient un caractère spécial, vous devez utiliser une séquence d'échappement pour celui-ci.

Caractères spéciaux Séquence d'échappement
Barre oblique (/) %2f
Barre oblique inverse (\) %5c
Signe de pourcentage (%) %25

Si le nom du réseau n'est pas unique, il est possible de spécifier un chemin d'accès au réseau, tel que /DATACENTER/network/NETWORK_NAME.

Exemple :

vCenter:
  network: "MY-VM-NETWORK"

vCenter.resourcePool

Chaîne. Si vous utilisez un pool de ressources autre que celui par défaut, indiquez le nom de votre pool de ressources vSphere. Exemple :

vCenter:
  resourcePool: "MY-POOL"

Si vous utilisez le pool de ressources par défaut, indiquez la valeur suivante :

vCenter:
  resourcePool: "MY_CLUSTER/Resources"

Remplacez MY_CLUSTER par le nom de votre cluster vSphere.

Consultez la section Spécifier le pool de ressources racine pour un hôte autonome.

vCenter.caCertPath

Chaîne. Lorsqu'un client, tel que GKE On-Prem, envoie une requête à votre serveur vCenter, celui-ci doit prouver son identité au client en présentant un certificat ou un bundle de certificats. Pour valider le certificat ou le bundle, GKE On-Prem doit avoir le certificat racine dans la chaîne de confiance.

Définissez vCenter.caCertPath sur le chemin d'accès au certificat racine. Exemple :

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

Votre installation VMware comporte une autorité de certification qui émet un certificat sur votre serveur vCenter. Le certificat racine de la chaîne de confiance est un certificat autosigné créé par VMware.

Si vous ne souhaitez pas utiliser l'autorité de certification VMWare, qui est définie par défaut, vous pouvez configurer VMware de sorte à utiliser une autre autorité de certification.

Si votre serveur vCenter utilise un certificat émis par l'autorité de certification VMware par défaut, téléchargez-le comme suit :

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

Remplacez SERVER_ADDRESS par l'adresse de votre serveur vCenter.

Installez la commande unzip et décompressez le fichier de certificat :

sudo apt-get install unzip
unzip downloads.zip

Si la commande de décompression ne fonctionne pas au premier essai, saisissez-la à nouveau.

Recherchez le fichier de certificat dans certs/lin.

proxyUrl

Chaîne : Si la machine que vous utilisez pour exécuter gkeadm utilise un serveur proxy pour accéder à Internet, définissez ce champ sur l'URL du serveur proxy. Exemple :

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

adminWorkstation.network.ipAllocationMode

Chaîne. Définissez cette valeur sur "static". Exemple :

adminWorkstation:
  network:
    ipAllocationMode: "static"

adminWorkstation.network.hostConfig.ip

Chaîne. Adresse IP de votre choix pour votre poste de travail d'administrateur. Exemple :

adminWorkstation:
  network:
    hostconfig:
      ip: "172.16.5.1"

adminWorkstation.network.hostConfig.gateway

Chaîne. Adresse IP de la passerelle par défaut pour le réseau contenant votre poste de travail d'administrateur. Exemple :

adminWorkstation:
  network:
    hostconfig:
      gateway: "172.16.6.254"

adminWorkstation.network.hostConfig.netmask

Chaîne. Masque de réseau pour le réseau contenant votre poste de travail d'administrateur. Exemple :

adminWorkstation:
  network:
    hostconfig:
      netmask: "255.255.248.0"

adminWorkstation.network.hostConfig.dns

Tableau de chaînes. Tableau d'adresses IP de serveurs DNS que votre poste de travail d'administrateur peut utiliser. Exemple :

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

adminWorkstation.proxyUrl

Chaîne. Si votre réseau se trouve derrière un serveur proxy et que vous souhaitez que votre poste de travail d'administrateur et vos clusters GKE On-Prem utilisent le même serveur proxy, définissez adminworkstation.proxyURL sur l'URL du serveur proxy. Exemple :

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

adminWorkstation.ntpServer

Chaîne. Nom d'hôte ou adresse IP du serveur NTP que votre poste de travail administrateur doit utiliser. Exemple :

adminWorkstation:
  ntpServer: "216.239.35.0"

Si vous laissez ce champ vide, GKE On-Prem utilise "ntp.ubuntu.com".

Voici un exemple de fichier admin-ws-config.yaml rempli :

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"

Créer votre poste de travail administrateur

Le compte Google défini en tant que propriété account du SDK doit disposer des rôles IAM permettant à gkeadm de créer et gérer des comptes de service :

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

Pour afficher la valeur de la propriété account du SDK, procédez comme suit :

gcloud config get-value account

Pour attribuer des rôles, vous devez disposer de certaines autorisations sur votre projet Google Cloud. Pour plus d'informations, consultez la page Accorder, modifier et révoquer les accès à des ressources.

Si vous disposez des autorisations requises, vous pouvez attribuer les rôles vous-même. Sinon, un autre membre de votre organisation doit attribuer les rôles à votre place.

Pour accorder les rôles, procédez comme suit :

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

Remplacez les éléments suivants :

  • PROJECT_ID : valeur de la propriété project du SDK.
  • ACCOUNT : valeur de la propriété account de SDK.

Créez votre poste de travail administrateur et un ensemble de comptes de service. Si vous préférez créer et configurer vos comptes de service manuellement, vous pouvez omettre l'option --auto-create-service-accounts.

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

Le résultat fournit des informations détaillées sur la création de votre poste de travail d'administrateur. Par exemple, vous pouvez voir que gkeadm a effectué les tâches suivantes :

  • Exécution des vérifications préliminaires

  • Téléchargement d'une image OVA et importation de celle-ci en tant que modèle vSphere

  • Création d'une clé SSH

  • Création d'une VM de poste de travail d'administrateur

  • Impression des versions gkectl et Docker installées sur le poste de travail d'administrateur

  • Impression des informations concernant le serveur NTP sur le poste de travail d'administrateur

  • Création des comptes de service et de leurs fichiers de clé JSON. Ces comptes de service sont des membres du projet qui est le parent du compte de service d'accès au composant.

  • Attribution de rôles IAM appropriés aux comptes de service. Ces rôles sont attribués au projet parent du compte de service d'accès aux composants.

  • Copie des fichiers de clé JSON pour les comptes de service sur le poste de travail administrateur

  • a copié le fichier de certificat CA pour votre serveur vCenter sur le poste de travail administrateur ;

  • a préparé admin-cluster.yaml et user-cluster.yaml sur le poste de travail administrateur. Vous utiliserez ces fichiers de configuration ultérieurement pour créer des 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
********************************************************************

Obtenir une connexion SSH à votre poste de travail administrateur

Vers la fin de la sortie précédente, vous obtenez une commande que vous pouvez utiliser pour vous connecter en SSH à votre poste de travail d'administrateur. Saisissez cette commande maintenant. Exemple :

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

Répertoriez les fichiers sur votre poste de travail administrateur :

ls -1

La sortie comporte deux fichiers de configuration de cluster, votre fichier de certificat CA et les fichiers de clé JSON pour vos comptes de service :

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

Inspecter les fichiers de configuration du cluster

Sur votre poste de travail d'administration, gkeadm a créé deux fichiers de configuration de cluster : admin-cluster.yaml et user-cluster.yaml. Vous utiliserez ces fichiers ultérieurement pour créer vos clusters d'administrateur et d'utilisateur.

Utilisez un éditeur de texte pour ouvrir admin-cluster.yaml. Notez que de nombreux champs contiennent déjà des valeurs que vous avez fournies dans votre fichier admin-ws-config.yaml. Exemple :

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

Ouvrir user-cluster.yaml Notez que de nombreux champs contiennent déjà des valeurs que vous avez fournies dans votre fichier admin-ws-config.yaml. Exemple :

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

Utiliser un seul projet Google Cloud

Le fichier de configuration GKE On-Prem comporte plusieurs champs dans lesquels vous pouvez spécifier un ID de projet Google Cloud. Par exemple, vous pouvez spécifier un ID de projet pour gkeconnect et un autre ID de projet pour stackdriver :

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

Lorsque gkeadm a préparé votre fichier de configuration GKE On-Prem, il a défini tous les champs projectid sur le projet parent du compte de service d'accès au composant. En outre, gkeadm a attribué des rôles à vos comptes de service sur le projet parent de votre compte de service. En résumé, gkeadm a utilisé un seul projet Google Cloud.

Si vous souhaitez avoir la possibilité d'utiliser plusieurs projets Google Cloud, vous devez renseigner manuellement les champs projectid et attribuer manuellement des rôles à vos comptes de service. Pour en savoir plus, consultez la page Utiliser plusieurs projets Google Cloud.