您可以启用任何虚拟机 (VM) 实例,使其可从外部网络或其他组织访问,这称为“虚拟机入站流量”。组织项目中的虚拟机工作负载可以访问外部网络,也可以访问当前向其他组织中的服务公开的虚拟机(称为虚拟机出站流量)。
您可以使用 VirtualMachineExternalAccess (VMEA) 同时控制虚拟机入站流量和虚拟机出站流量。您可以在 Google Distributed Cloud (GDC) 的隔离 VMM API 或通过 GDC 控制台找到为虚拟机实例启用的入站和出站 IP 地址。
准备工作
如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装并配置 gdcloud CLI。Distributed Cloud 的所有命令都使用 gdcloud 或 kubectl CLI,并且需要操作系统 (OS) 环境。
获取 kubeconfig 文件路径
如需针对管理 API 服务器运行命令,请确保您拥有以下资源:
登录并生成管理 API 服务器的 kubeconfig 文件(如果您还没有)。
使用管理 API 服务器的 kubeconfig 文件路径替换这些说明中的
MANAGEMENT_API_SERVER。
请求权限和访问权限
如需执行本页面中列出的任务,您必须具有 Project VirtualMachine Admin 角色。按照相关步骤验证您是否在虚拟机所在项目的命名空间中拥有 Project VirtualMachine Admin (project-vm-admin) 角色。
对于使用 GDC 控制台或 gdcloud CLI 的虚拟机操作,请让您的项目 IAM 管理员为您分配“Project VirtualMachine Admin”角色和“Project Viewer”角色 (project-viewer)。
配置虚拟机外部访问权限
VirtualMachineExternalAccess (VMEA) 控制虚拟机入站流量和虚拟机出站流量。
VMEA 无法单独控制虚拟机 Ingress 和虚拟机 Egress。虚拟机的入站流量和出站流量必须同时启用或停用。
您可以通过界面或 Distributed Cloud VMM API 配置和控制 VMEA。一个虚拟机只能有一个 VMEA。如果虚拟机没有 VMEA,则默认情况下,入站和出站流量均处于停用状态。
启用外部访问权限
如需启用具有外部访问权限的虚拟机以进行数据传入和传出,您可以从 GDC 控制台或分布式云 Virtual Machine Manager API 配置 VMEA。
默认情况下,系统允许项目内网络流量,您可以直接访问项目内的虚拟机。网络政策会阻止从项目外部到虚拟机的全部入站流量。您必须手动创建新的网络政策,以允许源 IP 地址通过数据传入访问虚拟机。此网络政策可以是跨项目流量网络政策,也可以是跨组织流量网络政策。位置取决于您要从何处访问虚拟机。
您可以在 VMEA 规范的 enabled 字段中指定 true 或 false,以启用和停用虚拟机的外部访问权限。对于虚拟机 Ingress,您可以在 VMEA 规范的 ports 字段中指定要添加的每个端口的名称、协议和端口号,以配置端口中的数据传输。
如需通过创建新的 VMEA 来启用虚拟机的外部访问权限,请完成以下操作:
控制台
- 在控制台中创建虚拟机的过程中,从创建虚拟机实例页面前往网络详情页面。
- 在页面的垂直导航菜单中找到网络。
- 勾选允许外部访问,以在虚拟机上启用外部访问。

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:管理 API 服务器的 kubeconfig 文件。
- VM_NAME:您的虚拟机的名称。
- PORT_NAME:端口名称。
- PROTOCOL:您希望入站流量服务使用的协议。协议名称必须采用大写形式,并且是 Kubernetes 支持的协议,例如
TCP、UDP或SCTP。 - PORT_NUMBER:端口号。
如需通过 VMM API 编辑现有 VMEA 来启用虚拟机的外部访问权限,请运行以下命令:
kubectl --kubeconfig MANAGEMENT_API_SERVER \
-n PROJECT \
edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME
停用外部访问权限
如果虚拟机没有对应的 VMEA,则入站和出站流量均会被停用。如果虚拟机具有相应的 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:管理 API 服务器的 kubeconfig 文件。
- VM_NAME:虚拟机的名称。
- PROJECT:虚拟机所在的 Distributed Cloud 项目。
通过修改 VMEA 停用外部访问权限:
kubectl --kubeconfig MANAGEMENT_API_SERVER \
-n PROJECT \
edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME
将 enabled 字段更新为 false。
入站
查看 Ingress IP 地址
如果虚拟机启用了 Ingress,则在创建后,GDC 控制台上会显示 Ingress IP 地址。您还可以从 GDC 控制台的虚拟机详情页面中找到此入站 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}'
对于使用其他操作系统 (OS) 的虚拟机,请使用 ssh 命令通过入口 IP 地址和您已通过 TCP 启用的端口进入虚拟机。
修改 Ingress
为虚拟机启用 VMEA 后,您可以通过修改 VMEA 自定义入站流量。您可以直接从 GDC 控制台修改虚拟机入站流量的规范。您还可以使用 kubectl CLI 根据 VMEA 的规范修改虚拟机的入站流量。
如需修改 VMEA 以自定义 Ingress,请完成以下操作:
例如,使用以下命令通过 TCP 协议在现有虚拟机入站上添加端口 PORT_NUMBER:
控制台
直接在 GDC 控制台中修改虚拟机 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:管理 API 服务器的 kubeconfig 文件。
- VM_NAME:虚拟机的名称。
- PROJECT:虚拟机所在的 Distributed Cloud 项目。
- PORT_NAME:要添加的端口的名称。
- PORT_NUMBER:端口号。
使用非 TCP 协议启用 Ingress
借助 Distributed Cloud,您可以使用不同的协议启用虚拟机 Ingress。默认情况下,虚拟机 Ingress 服务使用 TCP 协议。您可以为虚拟机添加自己的非 TCP 协议入站流量。 Distributed Cloud 支持以下协议:
- 传输控制协议 (TCP)。
- 用户数据报协议 (UDP)。
- 流控制传输协议 (SCTP)。
您可以在创建 VMEA 时指定不同的协议名称,以启用使用非 TCP 协议的数据传输。
出站
组织项目中的虚拟机工作负载可以访问外部网络,也可以向其他组织中的服务公开。如果您为虚拟机启用出站数据传输,系统会生成一个出站 IP 地址。虚拟机通过此 IP 地址连接到外部服务。
如需将此 IP 地址数据转移出外部网络,您可能需要应用项目网络政策。如需了解详情,请参阅出站跨组织流量网络政策。
查看出站 IP 地址
如果虚拟机启用了出站流量,则在创建后,出站 IP 地址会显示在 GDC 控制台上。您还可以从虚拟机详情页面中找到此出站 IP 地址。
如需查看出站 IP 地址,请完成以下操作:
API
提取 IP 地址:
kubectl --kubeconfig MANAGEMENT_API_SERVER \
-n PROJECT \
get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME \
-ojsonpath='{.status.egressIP}'
替换以下内容:
- MANAGEMENT_API_SERVER:管理 API 服务器的 kubeconfig 文件。
- VM_NAME:虚拟机的名称。
- PROJECT:虚拟机所在的 Distributed Cloud 项目。
虚拟机出站流量按项目计算。同一项目中的虚拟机会包含相同的出站流量 IP 地址。
控制出站流量
在之前的 Distributed Cloud 版本中,您必须重新启动虚拟机,才能将出站流量更改反映到正在运行的虚拟机中。在版本 1.11 中,您可以在不重启虚拟机的情况下启用和停用虚拟机出站流量。此更改会在您更新 VMEA 后立即生效。