启用 IP 地址

您可以启用任何虚拟机 (VM) 实例,使其可从外部网络或其他组织访问,这称为“虚拟机入站流量”。组织项目中的虚拟机工作负载可以访问外部网络,也可以访问当前向其他组织中的服务公开的虚拟机(称为虚拟机出站流量)。

您可以使用 VirtualMachineExternalAccess (VMEA) 同时控制虚拟机入站流量和虚拟机出站流量。您可以通过 Google Distributed Cloud (GDC) 空气隔离 VMM API 或 GDC 控制台,找到为虚拟机实例启用的入站和出站 IP 地址。

准备工作

如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装并配置 gdcloud CLI。Distributed Cloud 的所有命令都使用 gdcloudkubectl CLI,并且需要操作系统 (OS) 环境。

获取 kubeconfig 文件路径

如需针对管理 API 服务器运行命令,请确保您拥有以下资源:

  1. 登录并生成管理 API 服务器的 kubeconfig 文件(如果您还没有)。

  2. 使用管理 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 字段中指定 truefalse,以启用和停用虚拟机的外部访问权限。对于虚拟机 Ingress,您可以在 VMEA 规范的 ports 字段中指定要添加的每个端口的名称、协议和端口号,以配置端口中的数据传输。

如需通过创建新的 VMEA 来启用虚拟机的外部访问权限,请完成以下操作:

控制台

  1. 在控制台中创建虚拟机的过程中,从创建虚拟机实例页面前往网络详情页面。
  2. 在网页的纵向导航菜单中找到网络
  3. 勾选允许外部访问,以在虚拟机上启用外部访问。

在创建虚拟机时启用外部访问权限

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 支持的协议,例如 TCPUDPSCTP
  • 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 服务上的端口:

  1. 在垂直导航菜单中,点击实例
  2. 在该页面上,滚动到网络详情
  3. 点击入站端口上的修改图标,以修改入站端口。

    控制台界面,显示了“网络详情”列表,其中“入站端口”上显示了“修改”图标

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 地址数据转移出外部网络,您可能需要应用项目网络政策。如需了解详情,请参阅出站跨组织流量网络政策

如果虚拟机配置为使用 Cloud NAT 网关发送出站流量,则必须将以下注解添加到虚拟机外部访问对象,以保留出站连接:egress.networking.gke.io/use-cloud-nat:"true"

查看出站 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 后立即生效。