您可以啟用虛擬機器 (VM) 執行個體,讓外部網路或其他機構 (稱為 VM Ingress) 能夠連線。機構專案中的 VM 工作負載可以連線至外部網路,也可以連線至目前向其他機構服務公開的 VM,也就是 VM 輸出流量。
您可以使用 VirtualMachineExternalAccess
(VMEA) 一併控管 VM 傳入和 VM 傳出流量。您可以在 Google Distributed Cloud (GDC) 無網路連線 VMM API 或 GDC 控制台中,找到為 VM 執行個體啟用的輸入和輸出 IP 位址。
事前準備
如要使用 gdcloud
指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud
CLI。Distributed Cloud 的所有指令都使用 gdcloud
或 kubectl
CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。
使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的
MANAGEMENT_API_SERVER
。
要求權限和存取權
如要執行本頁列出的工作,您必須具備專案虛擬機器管理員角色。按照步驟驗證您在 VM 所在專案的命名空間中,是否具備專案 VirtualMachine 管理員 (project-vm-admin
) 角色。
如要使用 GDC 控制台或 gdcloud CLI 執行 VM 作業,請要求專案 IAM 管理員同時指派專案 VirtualMachine 管理員角色和專案檢視者 (project-viewer
) 角色。
設定 VM 外部存取權
VirtualMachineExternalAccess
(VMEA) 可控管 VM Ingress 和 VM Egress。
VMEA 無法分別控管 VM Ingress 和 VM Egress。VM 的輸入和輸出必須同時啟用或停用。
您可以透過 UI 或 Distributed Cloud VMM API 設定及控管 VMEA。每個 VM 只能有一個 VMEA。如果 VM 沒有 VMEA,系統預設會停用輸入和輸出。
啟用外部存取權
如要啟用具有外部存取權的 VM,以便轉入及轉出資料,您可以透過 GDC 控制台或 Distributed Cloud Virtual Machine Manager API 設定 VMEA。
根據預設,系統會允許專案內網路流量,您可以直接存取專案內的 VM。網路政策會封鎖從專案外部傳入 VM 的所有流量。您必須手動建立新的網路政策,允許來源 IP 位址透過資料傳輸輸入存取 VM。這項網路政策可以是跨專案流量網路政策,也可以是跨機構流量網路政策。位置取決於您要從哪個位置存取 VM。
您可以在 VMEA 規格的 enabled
欄位中指定 true
或 false
,啟用及停用 VM 的外部存取權。如果是 VM Ingress,您可以在 VMEA 規格的 ports
欄位中,為要新增的每個通訊埠指定名稱、通訊協定和通訊埠號碼,藉此設定通訊埠中的資料移轉。
如要建立新的 VMEA,以啟用 VM 的外部存取權,請完成下列步驟:
主控台
- 使用控制台建立 VM 時,請從「Create VM instance」(建立 VM 執行個體) 頁面前往「Network details」(網路詳細資料) 頁面。
- 在頁面的直向導覽選單中找到「網路」。
- 勾選「允許外部存取」,即可在 VM 上啟用外部存取權。
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:kubeconfig 檔案至 Management API 伺服器。
- VM_NAME:VM 名稱。
- PORT_NAME:通訊埠名稱。
- PROTOCOL:要讓 Ingress 服務使用的通訊協定。通訊協定名稱必須為大寫,且是 Kubernetes 支援的通訊協定,例如
TCP
、UDP
或SCTP
。 - PORT_NUMBER:通訊埠號碼。
如要透過 VMM API 編輯現有 VMEA,啟用 VM 的外部存取權,請執行下列指令:
kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT
停用外部存取權
如果 VM 沒有對應的 VMEA,系統會停用輸入和輸出。如果 VM 有對應的 VMEA,您可以將 enabled
欄位設為 false
,或直接刪除 VMEA,藉此停用 VMEA。您可以透過 Distributed Cloud VMM API 執行這些作業。
如要停用外部存取權,請完成下列步驟:
API
如要停用外部存取權,請刪除 VMEA:
kubectl --kubeconfig MANAGEMENT_API_SERVER delete virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT
更改下列內容:
- MANAGEMENT_API_SERVER:kubeconfig 檔案至 Management API 伺服器。
- VM_NAME:VM 名稱。
- PROJECT:VM 所在的 Distributed Cloud 專案。
如要停用外部存取權,請編輯 VMEA:
kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT
將 enabled
欄位更新為 false
。
Ingress
查看 Ingress IP 位址
如果 VM 啟用 Ingress,建立後 GDC 控制台會顯示 Ingress IP 位址。您也可以在 GDC 控制台的「VM details」(VM 詳細資料) 頁面中找到這個連入 IP 位址。
如要擷取 IP 位址,請使用 Distributed Cloud VMM API。完成下列步驟:
API
擷取 IP 位址:
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT -ojsonpath='{.status.ingressIP}'
如要使用其他作業系統 (OS) 的 VM,請使用 ssh
指令,透過已啟用 TCP 的連接埠,以 Ingress IP 位址進入 VM。
編輯 Ingress
為 VM 啟用 VMEA 後,您可以編輯 VMEA 來自訂連入流量。您可以直接從 GDC 控制台編輯 VM 進入規格。您也可以使用 kubectl
CLI,從 VMEA 的規格編輯 VM 傳入流量。
如要編輯 VMEA 以自訂 Ingress,請完成下列步驟:
舉例來說,使用下列指令,透過 TCP 通訊協定在現有 VM 進入流量中新增通訊埠 PORT_NUMBER:
主控台
直接透過 GDC 控制台編輯 VM Ingress 服務的連接埠:
- 在垂直導覽選單中,按一下「執行個體」。
- 在頁面上,捲動至「網路詳細資料」。
按一下「Ingress Ports」(連入埠) 的編輯圖示,即可編輯連入埠。
API
kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT --type "json" -p '[{"op":"add","path":"/spec/ports/-","value": {"name":"PORT_NAME","port":PORT_NUMBER, "Protocol":"TCP"}}]'
更改下列內容:
- MANAGEMENT_API_SERVER:kubeconfig 檔案至 Management API 伺服器。
- VM_NAME:VM 名稱。
- PROJECT:VM 所在的 Distributed Cloud 專案。
- PORT_NAME:要新增的通訊埠名稱。
- PORT_NUMBER:通訊埠號碼。
使用非 TCP 協定啟用 Ingress
Distributed Cloud 可讓您透過不同通訊協定啟用 VM Ingress。根據預設,VM Ingress 服務會使用 TCP 通訊協定。您可以為 VM 新增自己的非 TCP 通訊協定 Ingress。Distributed Cloud 支援下列通訊協定:
- 傳輸控制通訊協定 (TCP)。
- 使用者資料包通訊協定 (UDP)。
- 串流控制傳輸通訊協定 (SCTP)。
建立 VMEA 時,您可以指定不同的通訊協定名稱,啟用非 TCP 通訊協定的資料傳輸。
輸出
機構專案中的 VM 工作負載可以連上外部網路,或向其他機構中的服務公開。如果您為 VM 啟用資料移轉輸出功能,系統會產生輸出 IP 位址。VM 會使用這個 IP 位址連線至外部服務。
如要將這個 IP 位址資料移出外部網路,您可能需要套用專案網路政策。詳情請參閱「輸出跨機構流量網路政策」。
查看傳出 IP 位址
如果 VM 啟用 Egress,建立後 GDC 控制台會顯示 Egress IP 位址。您也可以在「VM details」(VM 詳細資料) 頁面中找到這個輸出 IP 位址。
如要查看輸出 IP 位址,請完成下列步驟:
API
擷取 IP 位址:
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT -ojsonpath='{.status.egressIP}'
更改下列內容:
- MANAGEMENT_API_SERVER:kubeconfig 檔案至 Management API 伺服器。
- VM_NAME:VM 名稱。
- PROJECT:VM 所在的 Distributed Cloud 專案。
VM 輸出流量是以專案為準。同一專案中的 VM 包含相同的輸出 IP 位址。
控管輸出
在先前的 Distributed Cloud 版本中,您必須重新啟動 VM,才能將輸出變更反映至執行中的 VM。在 1.11 版中,您可以在不重新啟動 VM 的情況下,啟用及停用 VM 輸出流量。更新 VMEA 後,這項變更會立即生效。