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

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

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

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

このドキュメントの手順では、gkeadm コマンドライン ツールを使用します。このツールは、Linux、Windows 10、Windows Server 2019、macOS Catalina で使用できます。

gkeadm のダウンロード

Linux

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

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

Windows

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

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

macOS

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

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

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

管理ワークステーションを作成するには、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 キーファイルのパス。これは、GKE On-Prem が Container Registry からコンポーネントをダウンロードするために使用するアカウントです。JSON キーファイルの作成方法については、サービス アカウントとキーをご覧ください。

gkeadm は、管理ワークステーションを作成するときに、管理ワークステーション上のコンポーネント アクセス サービス アカウントを有効にします。

例:

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

vCenter.credentials.address

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

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

true | openssl s_client -connect VCENTER_IPVCENTER_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 ユーザー アカウントのパスワード。例:

vCenter:
  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 ネットワークの名前。

名前に特殊文字が含まれる場合は、エスケープ シーケンスを使用する必要があります。

特殊文字 エスケープ シーケンス
スラッシュ(/ %2f
バックスラッシュ(\ %5c
パーセント記号(% %25

ネットワーク名が一意でない場合は、/DATACENTER/network/NETWORK_NAME などのネットワークのパスを指定できます。

例:

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 "https://SERVER_ADDRESS/certs/download.zip" > download.zip

SERVER_ADDRESS は、vCenter Server のアドレスに置き換えます。

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/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"

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

gkeadm がサービス アカウントを作成、管理できるように、SDK の account プロパティとして設定された Google アカウントには次の IAM ロールが必要です。

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

SDK の account プロパティの値を表示するには:

gcloud config get-value account

ロールを付与するには、Cloud プロジェクトに対する特定の権限が必要です。詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

必要な権限があれば、自分でロールを付与できます。それ以外の場合は、組織内の別のユーザーがロールを付与する必要があります。

ロールを付与するには:

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

以下を置き換えます。

  • PROJECT_ID: SDK の project プロパティの値
  • ACCOUNT: SDK の account プロパティの値

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

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

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

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

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

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

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

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

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

  • サービス アカウントとその JSON キーファイルを作成しました。これらのサービス アカウントは、コンポーネント アクセス サービス アカウントの親となるプロジェクトのメンバーです。

  • サービス アカウントに適切な 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 ... 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
********************************************************************

管理ワークステーションへの 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
component-access-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: component-access-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 プロジェクトの使用をご覧ください。