启用 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 edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT

停用外部访问权限

如果虚拟机没有对应的 VMEA,则入站和出站流量均会被停用。如果虚拟机具有相应的 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:管理 API 服务器的 kubeconfig 文件。
  • VM_NAME:虚拟机的名称。
  • PROJECT:虚拟机所在的 Distributed Cloud 项目。

通过修改 VMEA 停用外部访问权限:

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

enabled 字段更新为 false

入站

查看 Ingress IP 地址

如果虚拟机启用了 Ingress,则在创建后,GDC 控制台上会显示 Ingress IP 地址。您还可以从 GDC 控制台的虚拟机详情页面中找到此入站 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) 的虚拟机,请使用 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 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:管理 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 get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME -n PROJECT -ojsonpath='{.status.egressIP}'

替换以下内容:

  • MANAGEMENT_API_SERVER:管理 API 服务器的 kubeconfig 文件。
  • VM_NAME:虚拟机的名称。
  • PROJECT:虚拟机所在的 Distributed Cloud 项目。

虚拟机出站流量按项目计算。同一项目中的虚拟机会包含相同的出站流量 IP 地址。

控制出站流量

在之前的 Distributed Cloud 版本中,您必须重新启动虚拟机,才能将出站流量更改反映到正在运行的虚拟机中。在版本 1.11 中,您可以在不重启虚拟机的情况下启用和停用虚拟机出站流量。此更改会在您更新 VMEA 后立即生效。