本文档介绍了如何在 Google Distributed Cloud (GDC) 气隙环境中配置虚拟机 (VM) 实例上的 IP 地址。
您可以启用任何虚拟机 (VM) 实例,使其可从外部网络或其他组织访问,这称为虚拟机入站流量。组织项目中的虚拟机工作负载可以访问外部网络,也可以访问当前向其他组织中的服务公开的虚拟机,这称为虚拟机出站流量。
您可以使用 VirtualMachineExternalAccess (VMEA) 来一起控制虚拟机入站流量和虚拟机出站流量。您可以在 Distributed Cloud VMM API 或通过 GDC 控制台找到为虚拟机实例启用的入站和出站 IP 地址。
本文档适用于平台管理员或应用运维人员组中的开发者,这些开发者负责在 Distributed Cloud 环境中为虚拟机配置 IP 地址。如需了解详情,请参阅 GDC 网闸隔离配置文档的受众。
准备工作
如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装、
并配置 gdcloud CLI。
Distributed Cloud 的所有命令都使用 gdcloud 或 kubectl CLI,并且需要操作系统 (OS) 环境。
获取 kubeconfig 文件路径
如需针对 Management API 服务器运行命令,请确保您拥有以下资源:
登录并生成 Management API 服务器的 kubeconfig 文件(如果您没有该文件)。
使用 Management API 服务器的 kubeconfig 文件的路径替换这些说明中的
MANAGEMENT_API_SERVER。
请求 IAM 角色
请与您的项目 IAM 管理员联系,以请求对您的项目具有以下角色:
虚拟机项目管理员 (
project-vm-admin):在项目命名空间中创建、修改、列出和删除虚拟机。项目查看者(
project-viewer):查看项目命名空间中的所有资源。
所有虚拟机角色都必须绑定到虚拟机所在项目的命名空间。 请按照以下步骤验证 您的访问权限。
配置虚拟机外部访问权限
VirtualMachineExternalAccess (VMEA) 控制虚拟机入站流量和虚拟机出站流量。
VMEA 无法单独控制虚拟机入站流量和虚拟机出站流量。虚拟机的入站流量和出站流量必须同时启用或停用。
您可以通过界面或 Distributed Cloud VMM API 配置和控制 VMEA。一个虚拟机只能有一个 VMEA。如果虚拟机没有 VMEA,则默认情况下会停用入站流量和出站流量。
启用外部访问权限
如需为虚拟机启用外部访问权限以进行数据传入和数据传出, 您可以通过 GDC 控制台或 Distributed Cloud Virtual Machine Manager API配置 VMEA。
默认情况下,系统允许项目内网络流量,您可以直接访问项目内的虚拟机。网络策略 会阻止来自项目外部的所有入站流量进入虚拟机。您必须手动创建新的网络策略,以允许源 IP 地址通过数据转入访问虚拟机。此网络策略可以是 跨项目数据流量网络策略,也可以是 跨组织数据流量网络策略。位置取决于您要从何处访问虚拟机。
您可以通过在 VMEA 规范的 enabled 字段中指定 true 或 false 来启用和停用虚拟机的外部访问权限。对于虚拟机入站流量,您可以通过在 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:指向 Management 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
gdcloud
将 gdcloud compute 命令与 --enable-external-access 标志搭配使用,以在虚拟机实例上启用外部访问权限:
gdcloud compute instances create VM_NAME \
--project PROJECT \
--machine-type MACHINE_TYPE \
--image IMAGE \
--image-project IMAGE_PROJECT \
--enable-external-access
执行以下变量替换操作:
- VM_NAME:虚拟机的名称
- PROJECT:虚拟机所在的 Distributed Cloud 项目
- MACHINE_TYPE:虚拟机实例的预定义机器类型的名称
- IMAGE:实例的启动映像名称
- IMAGE_PROJECT:实例的启动映像的项目
停用外部访问权限
如果虚拟机没有对应的 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:指向 Management API 服务器的 kubeconfig 文件
- VM_NAME:虚拟机的名称
- PROJECT:虚拟机所在的 Distributed Cloud 项目
通过修改 VMEA 停用外部访问权限:
kubectl --kubeconfig MANAGEMENT_API_SERVER \
-n PROJECT \
edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME
将 enabled 字段更新为 false。
入站流量
查看入站流量 IP 地址
如果虚拟机启用了入站流量,则在创建后,GDC 控制台上会显示入站流量 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 命令,通过您使用 TCP 启用的端口,使用入站流量 IP 地址进入虚拟机。
修改入站流量
为虚拟机启用 VMEA 后,您可以通过修改 VMEA 自定义入站流量。您可以直接通过 GDC 控制台修改虚拟机入站流量的规范。您还可以使用 kubectl CLI 通过 VMEA 的规范修改虚拟机入站流量。
如需修改 VMEA 以自定义入站流量,请完成以下操作:
例如,使用以下命令在现有虚拟机入站流量中添加端口 PORT_NUMBER(使用 TCP 协议):
控制台
直接通过 GDC 控制台修改虚拟机入站流量服务上的端口:
- 在垂直导航菜单中,点击实例 。
- 在该页面上,滚动到网络详情 。
点击入站流量端口 上的修改图标,以修改入站流量端口。

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:虚拟机的名称
- PROJECT:虚拟机所在的 Distributed Cloud 项目
- PORT_NAME:要添加的端口的名称
- PORT_NUMBER:端口号
使用非 TCP 协议启用入站流量
Distributed Cloud 允许您使用不同的协议启用虚拟机入站流量。默认情况下,虚拟机入站流量服务使用 TCP 协议。您可以为虚拟机添加自己的非 TCP 协议入站流量。 Distributed Cloud 支持以下协议:
- 传输控制协议 (TCP)。
- 用户数据报协议 (UDP)。
- 流控制传输协议 (SCTP)。
您可以在创建 VMEA 时指定不同的协议名称,以使用非 TCP 协议启用数据传入。
出站流量
组织项目中的虚拟机工作负载可以访问外部网络,也可以向其他组织中的服务公开。如果您为虚拟机启用数据传出,则会生成出站流量 IP 地址。虚拟机使用此 IP 地址连接到外部服务。
如需使此 IP 地址传出外部网络,您可能需要应用项目网络政策。如需了解详情,请参阅 跨组织流量网络政策。
如果虚拟机配置为使用
Cloud NAT 网关传出流量,则必须将以下注解添加到虚拟机外部访问
对象,以保留出站流量连接:
egress.networking.gke.io/use-cloud-nat:"true"
查看出站流量 IP 地址
如果虚拟机启用了出站流量,则在创建后,GDC 控制台上会显示出站流量 IP 地址。您还可以从虚拟机详情 页面找到此出站流量 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:虚拟机的名称
- PROJECT:虚拟机所在的 Distributed Cloud 项目
虚拟机出站流量基于项目。同一项目中的虚拟机包含相同的出站流量 IP 地址。
控制出站流量
在之前的 Distributed Cloud 版本中,您必须重启虚拟机,才能将出站流量更改反映到正在运行的虚拟机。在 1.11 版中,您无需重启虚拟机即可启用和停用虚拟机出站流量。此更改会在您更新 VMEA 后立即生效。