與現有基礎架構相互整合

在本主題中,您將設定現有的 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) 連線。

正在建立工作區

  1. 使用文字編輯器建立名為 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)。只有在 volumeTypeGP3 時才有效。詳情請參閱通用 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,請移除這一行。
  2. 執行 anthos-gke aws management init 建立設定檔:

    anthos-gke aws management init
    
  3. 執行 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 建立虛擬私有雲,或已標記子網路,請略過這個步驟。

如要為子網路加上標記,請按照下列步驟操作:

  1. 切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。

    cd anthos-aws

  2. 將叢集 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)
    
  3. 將 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)
    
  4. 使用 aws CLI 工具取得私人子網路 ID。

      aws ec2 describe-subnets \
          --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
          --query "Subnets[*].SubnetId" \
          --output text
    
  5. 使用叢集 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 中設定主機。接著,請按照下列步驟建立開啟通道的指令碼:

  1. 使用 terraform 產生指令碼,開啟連往堡壘主機的 SSH 通道。

    terraform output bastion_tunnel > bastion-tunnel.sh
    chmod 755 bastion-tunnel.sh
    

    Terraform 會建立使用堡壘主機 SSH 金鑰 (~/.ssh/anthos-gke) 的 bastion-tunnel.sh 指令碼。

  2. 如要開啟通道,請執行 bastion-tunnel.sh 指令碼。通道會從 localhost:8118 轉送至防禦主機。

    如要開啟防禦主機的通道,請執行下列指令:

    ./bastion-tunnel.sh -N
    

    這個視窗會顯示來自 SSH 通道的訊息。準備關閉連線時,請使用 Control+C 停止程序,或關閉視窗。

  3. 切換至 GKE on AWS 設定所在的目錄。

    cd anthos-aws

產生憑證並連線

GKE on AWS 說明文件假設您使用 localhost 通訊埠 8118 上的 SSH 通道存取叢集。如果您使用其他類型的 VPC 連線 (例如直接互連、VPN 或其他方法),可以從指令中移除 env HTTP_PROXY=http://localhost:8118 行。

  1. 產生用於驗證的 kubeconfig。使用 anthos-gke 將憑證附加至儲存在 ~/.kube/config 中的設定。

    anthos-gke aws management get-credentials
    
  2. 確認是否能透過 kubectl 連線至管理服務。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    kubectl 會列印叢集狀態。

後續步驟