このドキュメントでは、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.yaml
とuser-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.yaml
と user-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 プロジェクトの使用をご覧ください。