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