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

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

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

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

このドキュメントの手順では、gkeadm コマンドライン ツールを使用します。このツールは、Linux、Windows 10、Windows Server 2019 で使用できますが、MAC OS では使用できません。GKE On-Prem の今後のバージョンでは、MAC OS でも gkeadm を使用できるようになります。MAC OS のパソコンで管理ワークステーションを作成する場合は、静的 IP アドレスを使用した管理ワークステーションの作成または DHCP を使用した管理ワークステーションの作成をご覧ください。

gkeadm のダウンロード

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

gsutil cp gs://gke-on-prem-release-public/gkeadm/1.4.3-gke.3/linux/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 キーファイルのパス。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 ユーザー アカウントのパスワード。例:

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

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

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

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

gcloud config get-value account

ロールを付与するには、Google 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 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

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

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

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

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

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