建立管理員工作站

本文說明如何為 Google Distributed Cloud 建立管理工作站。管理員工作站會託管指令列介面 (CLI) 工具和設定檔,以便在安裝期間佈建叢集。另外,這類工作站也會託管其他 CLI 工具,方便您在安裝後與已佈建的叢集互動。

本文適用於負責設定、監控及管理技術基礎架構的管理員、架構師和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

這裡的說明十分完整。如要簡短瞭解如何建立管理員工作站,請參閱「建立基本叢集」指南中的「建立管理員工作站」。

選擇建立管理員工作站的方式

建立管理員工作站的方法有兩種:

  • 使用 gkeadm 在 vSphere 環境中建立管理員工作站 VM。
  • 在您選擇的任何電腦上,建立使用者管理的管理員工作站。

這兩種做法各有優缺點。

使用 gkeadm 建立管理員工作站時,gkeadm 會執行下列動作,簡化設定程序:

  • 建立管理員工作站 VM。
  • gkeadm 用來建立管理員工作站的 VM 範本,包含使用 gkectl 指令列工具建立及管理叢集所需的所有軟體。
  • 建立一個使用者帳戶,供您或其他管理員登入管理工作站。
  • 提供 SSH 指令,以便使用提供的使用者帳戶登入管理工作站。

gkeadm 建立的管理員工作站只能管理一個管理員叢集。如果您打算建立多個管理員叢集,則需要為每個管理員叢集建立管理員工作站。

gkeadm 建立的管理員工作站會與叢集生命週期繫結。升級管理員叢集或管理員叢集管理的任何使用者叢集時,您必須先升級管理員工作站。

設定自己的管理員工作站時,您必須安裝其中一個必要作業系統和所有必要軟體。因此,從範本建立 VM 比在電腦上安裝必要軟體更快,但初始設定會比較耗時。不過,工作站設定完成後,與 gkeadm 建立的管理員工作站相比,有以下優點:

  • 您可以設定使用者管理的管理員工作站,建立及管理多個管理員叢集。
  • 升級叢集時,您不需要升級使用者管理的管理員工作站。
  • 您可以使用標準 CI/CD 工具,自動管理叢集生命週期。
  • 您可以使用 Active Directory 等標準驗證方法,控管管理工作站的存取權。
  • 您可以使用標準授權系統,控管使用者在管理工作站上可存取的內容,並稽核他們的動作。
  • 您可以選擇要用來建立管理工作站快照或備份的軟體。

建立管理員工作站

gkeadm

事前準備

瞭解 vCenter 伺服器位址。

瞭解 CA 憑證路徑。

安裝 Google Cloud CLI。

如「使用多個專案 Google Cloud 」一文所述,建立一或多個 Google Cloud 專案。

規劃服務帳戶

使用 gkeadm 建立管理工作站時,您可以選擇讓 gkeadm 為您建立部分服務帳戶和金鑰。在這種情況下,gkeadm 也會將適當的 Identity and Access Management 角色授予服務帳戶。

您也可以手動建立服務帳戶和金鑰。在這種情況下,您必須手動將 IAM 角色授予服務帳戶。

手動建立服務帳戶比讓 gkeadm 為您建立服務帳戶更有彈性:

  • 自動建立的服務帳戶與元件存取服務帳戶的父項Google Cloud 專案相同。手動建立服務帳戶時,您可以選擇父項Google Cloud 專案。

  • 系統會自動為元件存取服務帳戶的父項 Google Cloud 專案,授予所有自動建立的服務帳戶 IAM 角色。如果這是與叢集相關聯的唯一專案,則沒有問題。 Google Cloud 但如要將叢集與多個 Google Cloud 專案建立關聯,您必須彈性地在Google Cloud 所選專案中授予服務帳戶角色。

如果您決定自行建立服務帳戶,請按照「服務帳戶和金鑰」一文中的操作說明進行。

無論您是否gkeadm自動建立服務帳戶,都必須手動建立一個服務帳戶,也就是元件存取服務帳戶。如需如何建立元件存取服務帳戶,並授予適當 IAM 角色的操作說明,請參閱元件存取服務帳戶

您可能需要手動建立另一個服務帳戶:稽核記錄服務帳戶。如要使用 GKE On-Prem API 用戶端管理使用者叢集,則必須在管理員叢集中啟用稽核記錄

產生設定檔的範本

gkeadm 下載至目前目錄。

生成範本:

./gkeadm create config

上述指令會在目前目錄中建立下列檔案:

  • credential.yaml
  • admin-ws-config.yaml

填入 credential.yaml

在「credential.yaml」中,填寫 vCenter 使用者名稱和密碼。例如:

kind: CredentialFile
items:
- name: vCenter
username: "my-account-name"
password: "AadmpqGPqq!a"

填入 admin-ws-config.yaml

admin-ws-config.yaml 中的數個欄位已填入預設或產生值。您可以保留填入的值,也可以視需要變更。

必填欄位

請填寫下列必填欄位。如要瞭解如何填寫欄位,請參閱「管理員工作站設定檔」。

gcp:
 componentAccessServiceAccountKeyPath: "Fill in"
vCenter:
credentials:
  address: "Fill in"
datacenter: "Fill in"
datastore: "Fill in"
cluster: "Fill in"
network: "Fill in"
resourcePool: "Fill in"
caCertPath: "Fill in"

如要在 vSphere VM 資料夾中建立管理工作站,請填寫 vCenter.folder 欄位:

vCenter:
folder: "Fill in"

如果管理工作站位於 Proxy 伺服器後方,請填寫 proxyURL 欄位:

adminWorkstation:
proxyURL: "Fill in"

如要讓管理員工作站從 DHCP 伺服器取得 IP 位址,請將 ipAllocationMode 設為 "dhcp",並移除 hostconfig 區段:

adminWorkstation:
network:
  ipAllocationMode: "dhcp"

如要為管理員工作站指定靜態 IP 位址,請將 ipAllocationMode 設為 "static",並填寫 hostconfig 區段:

adminWorkstation:
network:
  ipAllocationMode: "static"
  hostconfig:
    ip: "Fill in"
    gateway: "Fill in"
    netmask: "Fill in"
    dns:
    - "Fill in"

登入

  1. 使用任一 Google 帳戶登入。這會設定 SDK account 屬性:
gcloud auth login
  1. 確認 SDK account 屬性設定正確無誤:
gcloud config list
  1. 設為 SDK account 資源的 Google 帳戶稱為「SDK 帳戶」gkeadm 指令列工具會使用您的 SDK 帳戶下載管理員工作站 OVA,並在Google Cloud 專案中啟用服務。

如果您選擇讓 gkeadm 自動建立服務帳戶,gkeadm 也會使用您的 SDK 帳戶建立服務帳戶和金鑰,並將角色授予服務帳戶。因此,請務必先設定 SDK account 屬性,再執行 gkeadm 建立管理員工作站。

輸出內容會顯示 SDK account 屬性的值。 例如:

[core]
account = my-name@google.com
disable_usage_reporting = False
Your active configuration is: [default]

將角色授予 SDK 帳戶

您的 SDK 帳戶必須在元件存取服務帳戶的父項 Google Cloud 專案中,具備下列 IAM 角色。這樣 gkeadm 才能在 Google Cloud 專案中啟用服務。

  • serviceUsage.serviceUsageAdmin

如果您選擇gkeadm自動建立服務帳戶,SDK 帳戶也必須在元件存取服務帳戶的父項專案中,具備下列角色。這樣 gkeadm 才能建立服務帳戶和金鑰。

  • resourcemanager.projectIamAdmin
  • iam.serviceAccountCreator
  • iam.serviceAccountKeyAdmin

如要授予 Google Cloud 專案的角色,您必須具備Google Cloud 專案的特定權限。詳情請參閱授予、變更及撤銷資源的存取權

如果您具備必要權限,可以自行授予角色。 否則,貴機構的其他使用者必須授予您這些角色。

如要將必要角色授予 SDK 帳戶,請按照下列步驟操作:

Linux 和 macOS

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:ACCOUNT" \
  --role="roles/serviceusage.serviceUsageAdmin"

Windows

gcloud projects add-iam-policy-binding PROJECT_ID ^
  --member="user:ACCOUNT" ^
  --role="roles/serviceusage.serviceUsageAdmin"

更改下列內容:

  • PROJECT_ID:元件存取服務帳戶的父項Google Cloud 專案 ID

  • ACCOUNT:您的 SDK 帳戶

如要授予其他角色,讓 gkeadm 自動建立服務帳戶,請按照下列步驟操作:

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/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/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID ^
  --member="user:ACCOUNT" ^
  --role="roles/iam.serviceAccountKeyAdmin"

更改下列內容:

  • PROJECT_ID:元件存取服務帳戶的父項專案 ID

  • ACCOUNT:您的 SDK 帳戶

建立管理員工作站

輸入下列指令來建立管理員工作站。如要讓 gkeadm 為您建立 connect-registerlogging-monitoring 服務帳戶,請加入 --auto-create-service-accounts 標記。如要手動建立這些服務帳戶,請省略這個標記。

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

輸出內容會提供管理工作站建立作業的詳細資訊:

...
Getting ... service account...
...
********************************************************************
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

輸出內容會顯示兩個叢集設定檔、CA 憑證檔案,以及元件存取服務帳戶的 JSON 金鑰檔案。如果 gkeadm 為您建立服務帳戶,您也可以查看這些服務帳戶的 JSON 金鑰檔案。例如:

admin-cluster.yaml
user-cluster.yaml
vcenter-ca-cert.pem
component-access-key.json

確認您已在管理工作站上gkeadm啟用元件存取服務帳戶:

gcloud config get-value account

將 JSON 金鑰檔案複製到管理工作站

建立叢集前,服務帳戶的 JSON 金鑰檔案必須位於管理工作站的主目錄中。

元件存取服務帳戶的金鑰已位於管理工作站。

如果您在執行 gkeadm create admin-workstation 時加入 --auto-create-service-accounts 旗標,下列服務帳戶的金鑰就會位於管理工作站的主目錄中。否則,您必須手動將金鑰複製到管理工作站的主目錄:

  • 連結並註冊服務帳戶
  • 記錄監控服務帳戶

如果您已建立下列任一服務帳戶,請務必手動將這些服務帳戶的金鑰複製到管理工作站的主目錄:

  • 稽核記錄服務帳戶
  • 二進位授權服務帳戶

從備份檔還原管理員工作站

升級管理員工作站時,gkeadm upgrade 指令會儲存備份檔案。日後,如果管理員工作站不再存在,或是您遺失了升級後管理員工作站上的部分檔案,可以使用這個備份檔建立管理員工作站,並還原至升級後立即的狀態。

如要從備份檔案建立管理員工作站,請執行下列指令:

gkeadm create admin-workstation --restore-from-backup ADMIN_WORKSTATION_NAME-backup.tar.gz

ADMIN_WORKSTATION_NAME 替換為管理工作站的名稱。

使用者自行管理

選擇要做為管理員工作站的電腦。您可以使用 Ubuntu 或 Red Hat Enterprise Linux (RHEL)。相關規定如下:

  • Ubuntu 20.04 LTS 或 22.04 LTS

    • 4 個 CPU 核心
    • 8 GiB RAM
    • 100 GiB 的儲存空間
  • RHEL 8.6、8.7 或 8.8

    • 4 個 CPU 核心
    • 12 GB RAM
    • 256 GiB 儲存空間

存取 Google Cloud

管理工作站必須有權存取 Google Cloud ,才能下載及安裝工具、處理授權要求、建立服務帳戶等。

如要瞭解連線至 Google Cloud 的不同方式,請參閱「連線至 Google」。

您可以直接存取 Google Cloud ,也可以透過 Proxy 伺服器存取。如要瞭解防火牆規則和如何設定 Proxy 伺服器,請參閱「Proxy 和防火牆規則」。

存取 vCenter Server

如要從管理員工作站建立及管理叢集,您必須有權存取 vCenter Server 執行個體。詳情請參閱:

設定 NTP 伺服器

如果叢集已設定為使用 NTP 伺服器,您需要在管理工作站上設定時間同步服務,確保 timedatectl 報告的時間與叢集同步。這是必要步驟,可避免時鐘大幅偏移,導致憑證驗證失敗 (因為到期日不符)。

Ubuntu

建議使用 chrony 時間伺服器。

如要安裝 chrony,請按照下列步驟操作:

sudo apt-get update
sudo apt install chrony

這會提供兩個二進位檔:

  • chronyd:透過網路時間通訊協定同步及提供服務的精靈
  • chronycchrony Daemon 的指令列介面

如何設定 chronyd

編輯 /etc/chrony/chrony.conf 以新增或移除伺服器行。然後重新啟動 chrony

sudo systemctl restart chrony.service

RHEL

建議使用 chrony 時間伺服器。

如需安裝說明,請參閱「如何設定 chrony」。

無密碼 sudo

如果安全性政策允許,請為目前使用者啟用免密碼 sudo。這項功能可讓 gkectl 準備私人登錄檔 (如有提供)、為 Docker 設定 Proxy (如果網路位於 Proxy 伺服器後方),以及強制刪除用於管理員叢集生命週期作業的啟動叢集 (如果刪除作業失敗)。

如果您選擇不啟用免密碼 sudo,且打算為管理員叢集使用私人登錄檔,請在建立管理員叢集前,手動進行下列設定:

如果您選擇不啟用免密碼 sudo,可能需要在建立管理員叢集後,手動刪除 kind 叢集。詳情請參閱疑難排解說明文件中的「Kind cluster does not get deleted」。

安裝軟體

Ubuntu

請安裝下列軟體︰

sudo apt-get update
sudo apt-get -y install kubectl

RHEL

請安裝下列軟體︰

Docker 19.03 以上版本

  1. 移除所有先前的 Docker 版本:

    sudo dnf remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine
    
  2. 移除 podman-manpages:

    sudo dnf remove podman-manpages
    
  3. 安裝 Docker 19.03 以上版本:

    sudo dnf install -y yum-utils
    
    sudo yum-config-manager \
      --add-repo \
      https://download.docker.com/linux/centos/docker-ce.repo
    
    sudo dnf install -y --allowerasing docker-ce docker-ce-cli containerd.io
    
    sudo systemctl start docker
    
  4. 確認您目前執行的是 19.03 以上版本:

    sudo docker version
    
  5. 請將輸出內容與下列範例進行比較,確保用戶端和伺服器版本為 19.03 以上:

    Client: Docker Engine - Community
    Version:           19.03.13
    ...
    Server: Docker Engine - Community
    Engine:
    Version:          19.03.13
    
  6. 確認 Docker 正在執行:

    docker run hello-world
    

    畫面應如下所示:

    Hello from Docker!
    

    這則訊息表示安裝作業似乎正常運作。

Google Cloud CLI 最新版本

請參閱「安裝 gcloud CLI」。

kubectl

執行 gcloud components install kubectl

登入

設為 SDK account 資源的 Google 帳戶稱為「SDK 帳戶」gkectl 指令列工具會使用您的 SDK 帳戶下載叢集節點 OVA、提取容器映像檔等。因此,請務必先設定 SDK 帳戶屬性,再執行 gkectl 指令。

使用任一 Google 帳戶登入。這會設定 SDK account 屬性:

gcloud auth login

確認 SDK account 屬性設定正確無誤:

gcloud config list

輸出內容會顯示 SDK account 屬性的值。 例如:

[core]
account = my-name@google.com
disable_usage_reporting = False
Your active configuration is: [default]

下載 gkectl 和套件

前往要安裝 gkectl 的目錄。

下載 gkectl

gcloud storage cp gs://gke-on-prem-release/gkectl/VERSION/gkectl ./
chmod +x gkectl

VERSION 替換為 Google Distributed Cloud 的版本。例如:1.16.0-gke.1

下載 Google Distributed Cloud 套裝組合。請確認版本與您用來下載 gkectl 的版本相符:

gcloud storage cp gs://gke-on-prem-release/gke-onprem-bundle/VERSION/gke-onprem-vsphere-VERSION.tgz ./

服務帳戶和金鑰

請務必建立下列必要服務帳戶和 JSON 金鑰檔案:

此外,請務必建立所有需要的選用服務帳戶和 JSON 金鑰檔案:

將所有 JSON 金鑰檔案放在管理工作站的主目錄中。

疑難排解

如果安全殼層金鑰遺失或損毀,請參閱下一節,重新啟用管理員工作站的安全殼層存取權。

安全殼層金鑰復原

使用暫時性 VM 執行下列步驟:

  1. 如要產生一組新的 SSH 金鑰,請按照 Compute Engine 說明文件中的「建立 SSH 金鑰」一節操作。

  2. 確認臨時 VM 和管理員工作站處於 Powered Off 狀態。

  3. 在 vSphere 中,將管理員工作站的開機磁碟連接至臨時 VM。

    開機磁碟的標籤為 Hard disk 1

  4. 執行下列指令,在 VM 內掛接開機磁碟:

    sudo mkdir -p /mnt/boot-disk
    sudo mount DISK_ID /mnt/boot-disk
    

    DISK_ID 替換為開機磁碟 ID,格式應與 dev/sdc1 類似。

  5. 編輯開機磁碟上的 authorized_keys 檔案,附加在第一個步驟中產生的公開金鑰檔案內容:

    vi /mnt/boot-disk/.ssh/authorized_keys
    
  6. 關閉臨時 VM。

  7. 開啟管理員工作站電源。

  8. 使用新產生的私密金鑰存取管理員工作站。

    ssh -i ~/.ssh/new-admin-ws.key ubuntu@"${ADMIN_WS_IP}"
    

使用新產生的私密金鑰,繼續存取管理工作站。

後續步驟

建立管理員叢集