管理ワークステーションの作成

このページでは、GKE On-Prem クラスタの作成に使用できる管理ワークステーションの作成方法について説明します。

このトピックでは、静的 IP アドレスを持つ管理ワークステーションを作成します。これは、静的 IP アドレスを使用するクラスタを作成するときの基本的なインストール手順と同じです。

Dynamic Host Configuration Protocol(DHCP)を使用して IP アドレスを取得する管理ワークステーションを作成する場合、DHCP を使用した管理ワークステーションの作成をご覧ください。

このトピックの手順では、Linux、Windows 10、Windows Server 2019、macOS Catalina で使用可能な gkeadm コマンドライン ツールを使用します。

gkeadm のダウンロード

Linux

gkeadm コマンドライン ツールをダウンロードし、実行可能にします。

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

macOS

gkeadm コマンドライン ツールをダウンロードし、実行可能にします。

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

Windows

gkeadm コマンドライン ツールをダウンロードします。

gsutil cp gs://gke-on-prem-release-public/gkeadm/1.5.0-gke.27/windows/gkeadm.exe ./

構成ファイルのテンプレートの生成

管理ワークステーションを作成するには、gkeadm ツールに構成ファイルが必要です。構成ファイルのテンプレートを生成するには:

./gkeadm create config

出力は admin-ws-config.yaml という名前のファイルになります。

入力された値

構成ファイルの次のフィールドには、デフォルト値または生成された値が入力されています。

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

デフォルト値と生成された値をすべて残します。

生成された dataDiskName の値に注意してください。この仮想マシンディスク(VMDK)が作成されます。その後、管理ワークステーションを手動で削除すると、VMDK は自動的に削除されます。

構成ファイルの残りの部分への入力

このセクションの説明に沿って、構成ファイルでフィールド値を入力します。

gcp.whitelistedServiceAccountKeyPath

文字列。許可リストに登録されたサービス アカウントの JSON キーファイルのパス。JSON キーファイルの作成については、許可リストに登録されたサービス アカウントをご覧ください。例:

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

vCenter.credentials.address

文字列。vCenter Server の IP アドレスまたはホスト名。

address フィールドを入力する前に、vCenter Server のサービス証明書をダウンロードして検査します。次のコマンドを入力して証明書をダウンロードし、vcenter.pem という名前のファイルに保存します。

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

ここで、[VCENTER_IP] は vCenter Server の IP アドレスです。

証明書ファイルを開き、サブジェクトの共通名とサブジェクトの代替名を表示します。

openssl x509 -in vcenter.pem -text -noout

出力に Subject 共通名(CN)が表示されます。これが IP アドレスである場合も、ホスト名である場合もあります。例:

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

出力では、Subject Alternative Name に 1 つ以上の DNS 名を含めることもできます。

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

Subject 共通名または Subject Alternative Name のいずれか 1 つの DNS 名を選択して、構成ファイルの vcenter.credentials.address の値として使用します。例:

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

vCenter.credentials.username

文字列。vCenter Server のユーザー アカウント。ユーザー アカウントには管理者ロールまたは同等の権限が必要です。vSphere の要件をご覧ください。

例:

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

vCenter.credentials.password

文字列。vCenter Server ユーザー アカウントのパスワード。例:

vCenrer:
  credentials:
    password: "#STyZ2T#Ko2o"

vCenter.datacenter

文字列。vSphere データセンターの名前。例:

vCenter:
  datacenter: "MY-DATACENTER"

vCenter.datastore

文字列。vSphere データストアの名前。例:

vCenter:
  datastore: "MY-DATASTORE"

vCenter.cluster

文字列。vSphere クラスタの名前。例:

vCenter:
  cluster: "MY-CLUSTER"

vCenter.network

文字列。管理ワークステーションの作成先の vSphere ネットワークの名前。例:

vCenter:
  network: "MY-VM-NETWORK"

vCenter.resourcePool

文字列。デフォルト以外のリソースプールを使用している場合は、vSphere リソースプールの名前を指定します。例:

vCenter:
  resourcePool: "MY-POOL"

デフォルトのリソースプールを使用している場合は、次の値を指定します。

vCenter:
  resourcePool: "[MY_CLUSTER]/Resources"

ここで、[MY_CLUSTER] は vSphere クラスタの名前です。

スタンドアロン ホストのルートリソース プールの指定を参照してください。

vCenter.caCertPath

文字列。GKE On-Prem などのクライアントが vCenter Server にリクエストを送信すると、サーバーは、証明書または証明書バンドルを提示して、ID をクライアントに証明する必要があります。証明書またはバンドルを確認するには、GKE On-Prem に信頼チェーン内のルート証明書が必要です。

vCenter.caCertPath をルート証明書のパスに設定します。例:

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

ご使用の VMware インストレーションには、vCenter サーバーに証明書を発行する認証局(CA)があります。信頼チェーンのルート証明書は、VMware が作成した自己署名証明書です。

デフォルトの VMware CA を使用しない場合は、別の認証局を使用するように VMware を構成できます。

vCenter Server でデフォルトの VMware CA が発行した証明書を使用している場合は、次のように証明書をダウンロードします。

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

ここで、[SERVER_ADDRESS] は vCenter サーバーのアドレスです。

unzip コマンドをインストールし、証明書ファイルを解凍します。

sudo apt-get install unzip
unzip downloads.zip

1 回の unzip コマンドで解凍できない場合は、再度コマンドを入力します。

certs/lin で証明書ファイルを見つけます。

proxyUrl

文字列: gkeadm の実行に使用するマシンがプロキシ サーバーを使用してインターネットにアクセスする場合は、このフィールドをプロキシ サーバーの URL に設定します。例:

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

adminWorkstation.network.ipAllocationMode

文字列。"static" に設定します。例:

adminWorkstation:
  network:
    ipAllocationMode: "static"

adminWorkstation.network.hostConfig.ip

文字列。管理ワークステーション用の任意の IP アドレス。例:

adminWorkstation:
  network:
    hostconfig:
      ip: "172.16.5.1"

adminWorkstation.network.hostConfig.gateway

文字列。管理ワークステーションを含むネットワークのデフォルト ゲートウェイの IP アドレス。例:

adminWorkstation:
  network:
    hostconfig:
      gateway: "172.16.6.254"

adminWorkstation.network.hostConfig.netmask

文字列。管理ワークステーションを含むネットワークのネットマスク。例:

adminWorkstation:
  network:
    hostconfig:
      netmask: "255.255.248.0"

adminWorkstation.network.hostConfig.dns

文字列配列。管理ワークステーションで使用できる DNS サーバーの IP アドレスの配列。例:

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

adminWorkstation.proxyUrl

文字列。ネットワークがプロキシ サーバーの背後にあり、管理ワークステーションと GKE On-Prem クラスタの両方で同じプロキシ サーバーを使用する場合は、adminworkstation.proxyURL をプロキシ サーバーの URL に設定します。例:

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

adminWorkstation.ntpServer

文字列。管理ワークステーションで使用するネットワーク タイム プロトコル サーバーのホスト名または IP アドレス。例:

adminWorkstation:
  ntpServer: "216.239.35.0"

空のままにすると、GKE On-Prem は "ntp.ubuntu.com" を使用します。

完成した admin-ws-config.yaml ファイルの例を次に示します。

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"

管理ワークステーションの作成

このステップでは、gkeadm を使用して、管理ワークステーションと一連のサービス アカウントを作成します。サービス アカウントを手動で作成して構成する場合は、--auto-create-service-accounts フラグを省略します。

管理ワークステーションと一連のサービス アカウントを作成します。

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

出力には、管理ワークステーションの作成に関する詳細情報が含まれます。たとえば、gkeadm が次のタスクを実行したことがわかります。

  • プリフライト チェックを実行しました。

  • OVA イメージをダウンロードし、vSphere テンプレートとしてアップロードしました。

  • SSH 認証鍵を作成しました。

  • 管理ワークステーション VM を作成しました。

  • 管理ワークステーションにインストールされている gkectl と Docker のバージョンを出力しました。

  • 管理ワークステーション上の NTP サーバーに関する情報を出力しました。

  • サービス アカウントに適切な IAM ロールを割り当てました。これらのロールは、許可リストに登録されたサービス アカウントの親であるプロジェクトで付与されます。

  • サービス アカウントの JSON キーファイルを管理ワークステーションにコピーしました。

  • vCenter Server の CA 証明書ファイルを管理ワークステーションにコピーしました。

  • 管理ワークステーションに admin-cluster.yamluser-cluster.yaml を準備しました。後ほど構成ファイルを使用してクラスタを作成します。

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

管理ワークステーションへの SSH 接続の確立

上記の出力の最後の付近に、管理ワークステーションへの SSH 接続に使用できるコマンドがあります。ここで、そのコマンドを入力します。例:

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

管理ワークステーション上のファイルを一覧表示します。

ls -1

出力には、2 つのクラスタ構成ファイル、CA 証明書ファイル、サービス アカウントの JSON キーファイルが表示されます。

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

クラスタ構成ファイルを検査する

管理ワークステーションで、2 つのクラスタ構成ファイル(admin-cluster.yamluser-cluster.yaml)が gkeadm によって作成されました。後でこれらのファイルを使用して、管理クラスタとユーザー クラスタを作成します。

テキスト エディタを使用して admin-cluster.yaml を開きます。多くのフィールドには、admin-ws-config.yaml ファイルで指定した値がすでに入力されています。例:

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

次に、user-cluster.yaml を開きます。多くのフィールドには、admin-ws-config.yaml ファイルで指定した値がすでに入力されています。例:

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

単一の Cloud プロジェクトの使用

GKE On-Prem 構成ファイルには、Google Cloud プロジェクト ID を指定できるいくつかのフィールドがあります。たとえば、gkeconnect にプロジェクト ID を指定し、stackdriver に別のプロジェクト ID を指定できます。

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

gkeadm が GKE on-prem 構成ファイルを準備したときに、すべての projectid フィールドが、許可リストに登録されたサービス アカウントの親プロジェクトに設定されています。また、gkeadmによって、許可リストに登録されたサービス アカウントの親であるプロジェクトのサービス アカウントにロールが付与されています。つまり、gkeadm では、単一の Cloud プロジェクトが使用されています。

複数の Google Cloud プロジェクトを柔軟に使用したい場合には、projectid フィールドに値を手動で入力し、サービス アカウントにロールを手動で付与する必要があります。詳細については、複数の Google Cloud プロジェクトの使用をご覧ください。