在本主題中,您將設定現有的 AWS 虛擬私有雲 (VPC),其中包含公用和私有子網路,並執行 anthos-gke
來完成管理服務的安裝作業。
事前準備
如要完成下列步驟,請準備好下列項目:
如「需求條件」一文所述的 AWS IAM 權限。
現有的 AWS VPC,具備下列條件:
- 至少一個公用子網路。
- 至少一個私有子網路。
- 具有通往公開子網路路徑的網際網路閘道。
- NAT 閘道,且具有前往私人子網路的路徑。
- DNS 主機名稱已啟用。
- DHCP 選項集沒有
domain-name
的自訂值。詳情請參閱「疑難排解」。GKE on AWS 不支援預設 EC2 網域名稱以外的值。
如要進一步瞭解如何設定 AWS VPC,請參閱「VPC with public and private subnets」。
現有虛擬私有雲的公開和私人子網路 ID。例如
subnet-1234567890abcdefg
。如果是叢集 1.20 版或更舊版本,則需要 AWS 安全群組,允許從您管理 GKE on AWS 安裝作業的安全群組或 IP 範圍,透過 SSH (通訊埠 22) 連入。
如果是叢集 1.21 以上版本,則需要 AWS安全群組,允許從虛擬私有雲 IP 範圍 (內含 GKE on AWS 節點集區) 連出 Konnectivity (通訊埠 8132) 連線。
正在建立工作區
使用文字編輯器建立名為
anthos-gke.yaml
的檔案。將下列內容貼到檔案中。apiVersion: multicloud.cluster.gke.io/v1 kind: AWSManagementService metadata: name: management spec: version: aws-1.14.1-gke.0 region: AWS_REGION authentication: awsIAM: adminIdentityARNs: - ADMIN_AWS_IAM_ARN kmsKeyARN: KMS_KEY_ARN databaseEncryption: kmsKeyARN: DATABASE_KMS_KEY_ARN securityGroupIDs: - SECURITY_GROUP_IDS googleCloud: projectID: GCP_PROJECT_ID serviceAccountKeys: managementService: MANAGEMENT_KEY_PATH connectAgent: HUB_KEY_PATH node: NODE_KEY_PATH existingVPC: subnetID: VPC_SUBNET_ID allowedSSHSecurityGroupIDs: - SSH_SECURITY_GROUP # Optional fields rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: ROOT_VOLUME_TYPE iops: ROOT_VOLUME_IOPS kmsKeyARN: ROOT_VOLUME_KEY bastionHost: subnetID: BASTION_HOST_SUBNET_ID allowedSSHCIDRBlocks: - SSH_CIDR_BLOCK rootVolume: # Optional kmsKeyARN: BASTION_VOLUME_KEY proxy: PROXY_JSON_FILE
替換下列值:
- 將 AWS_REGION 替換為要執行叢集的 AWS 區域。
- ADMIN_AWS_IAM_ARN,並提供管理員 AWS IAM 金鑰的 Amazon Resource Name。
- KMS_KEY_ARN,並提供 AWS KMS 金鑰的 Amazon 資源名稱,在建立管理服務時保護管理服務的資料。
- DATABASE_KMS_KEY_ARN 替換為用來保護
etcd
資料庫的 AWS KMS 金鑰 Amazon 資源名稱。 - SECURITY_GROUP_IDS,並允許其他安全性群組 ID 存取管理服務 VM。
- GCP_PROJECT_ID,並使用代管 GKE Enterprise 環境的專案。 Google Cloud
- MANAGEMENT_KEY_PATH,並提供管理 Google Cloud 服務帳戶金鑰的位置。
- HUB_KEY_PATH,並提供 Google Cloud Connect 服務帳戶金鑰的位置。
- NODE_KEY_PATH,其中包含 GKE on AWS 節點服務帳戶金鑰的位置。
- VPC_SUBNET_ID,並將其替換為管理服務執行的子網路 ID。
- SSH_SECURITY_GROUP,並列出允許在管理服務執行個體中透過 SSH 存取的安全性群組 ID。
選用:如要加密管理服務磁碟區,請替換下列值:
- ROOT_VOLUME_SIZE,並以 GB 為單位指定管理服務的磁碟區大小。例如:
10
。 - ROOT_VOLUME_TYPE,並使用
EBS 磁碟區類型。
例如:
gp3
。 - ROOT_VOLUME_IOPS,代表磁碟區每秒佈建的 IO 作業次數 (IOPS)。只有在
volumeType
為GP3
時才有效。詳情請參閱通用 SSD 磁碟區 (gp3)。 - ROOT_VOLUME_KEY,其中包含 AWS KMS 金鑰的 Amazon Resource Name,該金鑰會加密管理服務執行個體根磁碟區。詳情請參閱「使用客戶管理的 CMK 加密磁碟區」。
選用:如要建立防禦主機,透過 SSH 通道存取 GKE on AWS 環境,請替換下列值:
- BASTION_HOST_SUBNET_ID,其中包含要執行堡壘主機的子網路 ID。確認 VPC_SUBNET_ID 允許來自 BASTION_HOST_SUBNET_ID 的連入連線。
- SSH_CIDR_BLOCK,並使用 bastion host 允許傳入 SSH 連線的 CIDR 區塊。例如:
203.0.113.0/24
。如要允許從任何 IP 位址建立 SSH 連線,請使用0.0.0.0/0
。 - BASTION_VOLUME_KEY 替換為用來保護堡壘主機根磁碟區的 AWS KMS 金鑰 Amazon 資源名稱。
選用:如要透過 HTTP Proxy 傳送直接流量,請替換下列值:
- PROXY_JSON_FILE,並使用Proxy 設定檔的相對路徑。如果您未使用 Proxy,請移除這一行。
執行
anthos-gke aws management init
建立設定檔:anthos-gke aws management init
執行
anthos-gke aws management apply
來建立叢集。anthos-gke aws management apply
anthos-gke aws management apply
指令最多可能需要十分鐘才能完成。anthos-gke
完成後,管理服務就會在 AWS 上執行。
使用叢集名稱為子網路加上標記
如果您在 GKE on AWS 中使用現有的 AWS 子網路,並想建立負載平衡器,請使用管理服務的名稱標記 VPC 和子網路。如果您使用 anthos-gke
建立虛擬私有雲,或已標記子網路,請略過這個步驟。
如要為子網路加上標記,請按照下列步驟操作:
切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。
cd anthos-aws
將叢集 ID 匯出為環境變數
$CLUSTER-ID
。選擇 Terraform 版本,然後執行下列指令:Terraform 0.12、0.13
export CLUSTER_ID=$(terraform output cluster_id)
Terraform 0.14.3 以上版本
export CLUSTER_ID=$(terraform output -raw cluster_id)
將 AWS VPC ID 匯出為環境變數
$VPC_ID
。選擇 Terraform 版本,然後執行下列指令:Terraform 0.12、0.13
export VPC_ID=$(terraform output vpc_id)
Terraform 0.14.3 以上版本
export VPC_ID=$(terraform output -raw vpc_id)
使用
aws
CLI 工具取得私人子網路 ID。aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text
使用叢集 ID 為子網路加上標記。針對每個子網路執行下列指令。
aws ec2 create-tags \ --resources SUBNET_IDS \ --tags Key=gke:multicloud:cluster-id,Value=$CLUSTER_ID
將 SUBNET_IDS 替換為以半形空格分隔的子網路 ID 清單。例如:
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
。
連線至管理服務
在本節中,您將建立與管理服務的連線。您可以透過防禦主機將指令建立通道。如果您直接連線至 AWS VPC,請跳至「產生憑證並連線」。
透過防禦主機連線
如果使用防禦主機設定 SSH 通道,請先在 anthos-gke.yaml
中設定主機。接著,請按照下列步驟建立開啟通道的指令碼:
使用
terraform
產生指令碼,開啟連往堡壘主機的 SSH 通道。terraform output bastion_tunnel > bastion-tunnel.sh chmod 755 bastion-tunnel.sh
Terraform 會建立使用堡壘主機 SSH 金鑰 (
~/.ssh/anthos-gke
) 的bastion-tunnel.sh
指令碼。如要開啟通道,請執行
bastion-tunnel.sh
指令碼。通道會從localhost:8118
轉送至防禦主機。如要開啟防禦主機的通道,請執行下列指令:
./bastion-tunnel.sh -N
這個視窗會顯示來自 SSH 通道的訊息。準備關閉連線時,請使用 Control+C 停止程序,或關閉視窗。
切換至 GKE on AWS 設定所在的目錄。
cd anthos-aws
產生憑證並連線
GKE on AWS 說明文件假設您使用 localhost
通訊埠 8118 上的 SSH 通道存取叢集。如果您使用其他類型的 VPC 連線 (例如直接互連、VPN 或其他方法),可以從指令中移除 env HTTP_PROXY=http://localhost:8118
行。
產生用於驗證的
kubeconfig
。使用anthos-gke
將憑證附加至儲存在~/.kube/config
中的設定。anthos-gke aws management get-credentials
確認是否能透過
kubectl
連線至管理服務。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
kubectl
會列印叢集狀態。
後續步驟
- 建立使用者叢集。
- 透過 GKE on AWS 使用 Proxy。
- 變更
kubectl
設定,以較少的指令列選項連線至 AWS 上的 GKE。 - 請參閱 GKE on AWS 管理服務和使用者叢集的最低必要安全群組。