啟用 IP 位址

本文說明如何在 Google Distributed Cloud (GDC) 實體隔離方案中,設定虛擬機器 (VM) 執行個體的 IP 位址。

您可以啟用任何虛擬機器 (VM) 執行個體,讓外部網路或其他組織可以連線,這稱為 VM 輸入。組織專案中的 VM 工作負載可以連線至外部網路,或連線至目前向其他組織服務公開的 VM (稱為 VM 輸出)。

您可以使用下列任一方法,控管 VM 的輸入和輸出:

  • 外部負載平衡器和 Cloud NAT 閘道 (建議):建立外部負載平衡器 (ELB) 處理輸入流量,並建立 Cloud NAT 閘道處理輸出流量。
  • VirtualMachineExternalAccess (VMEA):使用 Distributed Cloud VMM API 或 Distributed Cloud CLI,一併控管 VM 輸入和輸出。Distributed Cloud 已淘汰使用 GDC 控制台設定 VMEA 的功能,且 VMEA 不再是首選。您仍可使用 Distributed Cloud VMM API 或 GDC 控制台,查看為 VM 執行個體啟用的輸入和輸出 IP 位址。

本文適用對象為平台管理員或應用程式操作員群組中的開發人員,負責在 Distributed Cloud 環境中設定 VM 的 IP 位址。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。

事前準備

如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。

取得 kubeconfig 檔案路徑

如要對 Management API 伺服器執行指令,請確認您具備下列資源:

  1. 如果沒有 Management API 伺服器的 kubeconfig 檔案,請登入並產生該檔案。

  2. 請使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER。

要求 IAM 角色

請與 IAM 專案管理員聯絡,要求在專案中取得下列角色:

  • 虛擬機器專案管理員 (project-vm-admin):建立、修改、列出及刪除專案命名空間中的 VM。

  • 專案檢視者(project-viewer):查看專案命名空間中的所有資源。

所有 VM 角色都必須繫結至 VM 所在專案的命名空間。按照步驟驗證存取權。

設定 VirtualMachineExternalAccess (VMEA)

VirtualMachineExternalAccess (VMEA) 是控管 VM 輸入和 VM 輸出的機制之一。VMEA 無法分別控管 VM 輸入和 VM 輸出。VM 的輸入和輸出必須同時啟用或停用。

您可以透過使用者介面或 Distributed Cloud VMM API 設定及控管 VMEA。一個 VM 只能有一個 VMEA。如果 VM 沒有 VMEA,則預設會停用輸入和輸出。

啟用外部存取權

如要啟用具備外部存取權的 VM,以便轉入及轉出資料,您可以透過 GDC 控制台或 Distributed Cloud Virtual Machine Manager API 設定 VMEA。

根據預設,系統允許專案內網路流量,您可以直接存取專案內的 VM。網路政策會封鎖從專案外部傳入 VM 的所有輸入流量。您必須手動建立新的網路政策,允許來源 IP 位址透過資料轉入存取 VM。這項網路政策可以是跨專案流量網路政策或跨組織流量網路政策。位置取決於您要從何處存取 VM。

如要啟用或停用 VM 的外部存取權,請在 VMEA 規格的 enabled 欄位中指定 true 或 false。如要設定 VM 輸入,您可以在 VMEA 規格的 ports 欄位中,為要新增的每個通訊埠指定名稱、通訊協定和通訊埠編號,藉此設定資料移轉通訊埠。

如要建立新的 VMEA,允許從外部存取 VM,請完成下列步驟:

gdcloud

使用 gdcloud compute 指令搭配 --enable-external-access 旗標,在 VM 執行個體上啟用外部存取權:

gdcloud compute instances create VM_NAME \
  --project PROJECT \
  --machine-type MACHINE_TYPE \
  --image IMAGE \
  --image-project IMAGE_PROJECT \
  --enable-external-access

更改下列內容:

  • VM_NAME:VM 的名稱。
  • PROJECT:VM 所在的 Distributed Cloud 專案。
  • MACHINE_TYPE:虛擬機器執行個體的預先定義機型名稱。
  • IMAGE:執行個體的開機映像檔名稱。
  • IMAGE_PROJECT:執行個體開機映像檔的專案。

API

執行下列指令:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  apply -n PROJECT -f - <<EOF
apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachineExternalAccess
metadata:
  name: VM_NAME
spec:
  enabled: true
  ports:
  - name: PORT_NAME
    protocol: PROTOCOL
    port: PORT_NUMBER
EOF

更改下列內容:

  • MANAGEMENT_API_SERVER:Management API 伺服器的 kubeconfig 檔案。
  • PROJECT:VM 所在的 Distributed Cloud 專案。
  • VM_NAME:VM 名稱。
  • PORT_NAME:通訊埠名稱。
  • PROTOCOL:您希望 Ingress 服務使用的通訊協定。通訊協定名稱必須大寫,且為 Kubernetes 支援的通訊協定,例如 TCP、UDP 或 SCTP。
  • PORT_NUMBER:通訊埠編號。

如要透過 VMM API 編輯現有 VMEA,啟用 VM 的外部存取權,請執行下列指令:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME

停用外部存取權

如果 VM 沒有對應的 VMEA,則會同時停用輸入和輸出。如果 VM 有對應的 VMEA,您可以將 enabled 欄位設為 false,或直接刪除 VMEA,藉此停用 VMEA。您可以透過 Distributed Cloud VMM API 執行這些作業。

如要停用外部存取權,請完成下列步驟:

API

刪除 VMEA 即可停用外部存取權:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  delete virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME

更改下列內容:

  • MANAGEMENT_API_SERVER:Management API 伺服器的 kubeconfig 檔案
  • VM_NAME:VM 名稱
  • PROJECT:VM 所在的 Distributed Cloud 專案

如要停用外部存取權,請編輯 VMEA:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME

將 enabled 欄位更新為 false。

輸入

查看 Ingress IP 位址

如果 VM 已啟用 Ingress,建立後,GDC 控制台會顯示 Ingress IP 位址。您也可以在 GDC 控制台的「VM details」(VM 詳細資料) 頁面中,找到這個輸入 IP 位址。

如要擷取 IP 位址,請使用 Distributed Cloud VMM API。完成下列步驟:

API

擷取 IP 位址:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME \
  -ojsonpath='{.status.ingressIP}'

如果 VM 採用其他作業系統 (OS),請使用 ssh 指令,透過輸入 IP 位址和您為 TCP 啟用的通訊埠進入 VM。

編輯 Ingress

為 VM 啟用 VMEA 後,您可以編輯 VMEA 來自訂輸入。您可以直接在 GDC 控制台編輯 VM 輸入規格。您也可以使用 kubectl CLI,從 VMEA 的規格編輯 VM 輸入。

如要編輯 VMEA 以自訂 ingress,請完成下列步驟:

舉例來說,如要使用 TCP 通訊協定,在現有 VM 輸入中新增通訊埠 PORT_NUMBER,請使用下列指令:

控制台

直接在 GDC 控制台編輯 VM Ingress 服務的通訊埠:

  1. 在垂直導覽選單中,按一下「執行個體」。
  2. 捲動至「網路詳細資料」。
  3. 按一下「Ingress Ports」(輸入通訊埠) 上的「Edit」(編輯) 圖示,即可編輯輸入通訊埠。

    控制台 UI 顯示網路詳細資料清單,Ingress 通訊埠上有編輯圖示

API

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  patch virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME \
  --type "json" -p '[{"op":"add","path":"/spec/ports/-","value": {"name":"PORT_NAME","port":PORT_NUMBER, "Protocol":"TCP"}}]'

更改下列內容:

  • MANAGEMENT_API_SERVER:Management API 伺服器的 kubeconfig 檔案
  • VM_NAME:VM 名稱
  • PROJECT:VM 所在的 Distributed Cloud 專案
  • PORT_NAME:要新增的通訊埠名稱
  • PORT_NUMBER:通訊埠編號

啟用非 TCP 通訊協定的 Ingress

Distributed Cloud 可讓您使用不同通訊協定啟用 VM Ingress。根據預設,VM Ingress 服務會使用 TCP 通訊協定。您可以為 VM 新增自己的非 TCP 通訊協定輸入。Distributed Cloud 支援下列通訊協定:

  • 傳輸控制通訊協定 (TCP)。
  • 使用者資料包通訊協定 (UDP)。
  • 串流控制傳輸通訊協定 (SCTP)。

建立 VMEA 時,您可以指定不同的通訊協定名稱,啟用非 TCP 通訊協定的資料轉入功能。

輸出

組織專案中的 VM 工作負載可以連上外部網路,或公開給其他組織中的服務。如果為 VM 啟用資料轉出功能,系統會產生輸出 IP 位址。VM 會使用這個 IP 位址連線至外部服務。

如要將這個 IP 位址資料移轉至外部網路,可能需要套用專案網路政策。詳情請參閱「輸出跨組織流量網路政策」。

如果 VM 設定為使用 Cloud NAT 閘道輸出流量,則必須在虛擬機器外部存取物件中加入下列註解,以保留輸出連線能力: egress.networking.gke.io/use-cloud-nat:"true"

查看輸出 IP 位址

如果 VM 啟用輸出功能,建立後,GDC 控制台會顯示輸出 IP 位址。您也可以在「VM details」(VM 詳細資料) 頁面中找到這個輸出 IP 位址。

如要查看輸出 IP 位址,請完成下列步驟:

API

擷取 IP 位址:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME \
  -ojsonpath='{.status.egressIP}'

更改下列內容:

  • MANAGEMENT_API_SERVER:Management API 伺服器的 kubeconfig 檔案
  • VM_NAME:VM 名稱
  • PROJECT:VM 所在的 Distributed Cloud 專案

VM 輸出是以專案為準。同一專案中的 VM 具有相同的輸出 IP 位址。

控管輸出

在先前的 Distributed Cloud 版本中,您必須重新啟動 VM,才能將輸出變更套用至執行中的 VM。在 1.11 版中,您可以啟用及停用 VM 輸出,不必重新啟動 VM。更新 VMEA 後,這項變更會立即生效。