通过网络策略实现虚拟机网络请求控制

平台基于开源组件 KubeVirt 实现的虚拟机方案,而 KubeVirt 实际上运行在 Pods 中,使用网络策略(Network Policy)的功能,可以实现对虚拟机进出请求的控制。

目录

操作步骤

  1. 进入 Container Platform

  2. 在左侧导航栏中,单击 网络 > 网络策略

  3. 单击 创建网络策略

  4. 按需配置如下参数。

    参数说明
    关联方式
    • 计算组件:按需选择目标计算组件,建议目标计算组件选择 全部
    • 标签选择器:根据标签匹配 Pods。
    方向
    • 入站:外部发送到 Pod 的请求。
    • 出站:由 Pod 发送到外部的请求,若需禁止虚拟机请求某个外部地址可以选择此项。
    协议选择 TCP 或 UDP 协议。

    注意
    • 在虚拟机中使用域名请求外部服务时,由于 DNS 协议使用的是 UDP 协议,因此需要添加 UDP 协议白名单。
    • 表单页面不支持配置 ICMP 协议,当开启白名单规则后,会禁用 ICMP 协议,导致无法进行 Ping 操作。
    访问端口指定哪些端口的流量可以入站或出站。若不填写此项,则默认允许所有端口的流量通过。

    注意:此处需要放通 UDP 和 TCP 协议的 1053、53 两个端口,以允许 DNS 流量出站;否则,域名解析将失败。
    远端类型指定允许访问的远端类型。可选项包括:计算组件、命名空间、IP 段。
    排除远端当远端类型为 IP 段 时,将指定的 IP 从白名单中移除(即禁止访问)。当输入形式如 IP/32 的 IP 时可以移除单个 IP。

    注意:此处仅支持输入 IP,若不清楚域名对应的 IP,可以使用命令 curl -vvv <域名> 来获取。
  5. 单击 创建

结果验证

本文档以使用虚拟机访问 www.example.com 为例进行验证。

步骤一:创建虚拟机和允许所有流量通过的网络策略

  1. 创建虚拟机,具体创建步骤请参考 创建虚拟机

  2. 在虚拟机所在的命名空间配置网络策略,添加 TCP 及 UDP 协议的白名单规则,配置参数如下:

    • TCP 协议的白名单:

      参数说明
      关联方式选择 计算组件
      目标计算组件选择 全部
      方向选择 出站
      协议选择 TCP
      远端类型选择 IP 段
      远端输入 0.0.0.0/0,表示允许所有流量出站。
    • UDP 协议的白名单规则:

      参数说明
      方向选择 出站
      协议选择 UDP
      远端类型选择 IP 段
      远端输入 0.0.0.0/0,表示允许所有流量出站。
  3. 网络策略创建完成后,登录虚拟机,在虚拟机中执行下述命令请求 www.example.com

    curl www.example.com
  4. 请求成功。

步骤二:更新网络策略,将 www.example.com 从白名单去除

  1. 执行下述命令获取 www.example.com 的 IP 地址,可以得到 IP 地址为 93.184.215.14。

    curl -vvv www.example.com
  2. 更新 步骤一 中创建的网络策略,更新的参数如下:

    参数说明
    排除远端在 TCP 协议的白名单规则中,排除远端参数中填写 93.184.215.14/32,表示将 IP 地址 93.184.215.14 从白名单中移除。
  3. 网络策略更新完成后,登录虚拟机,在虚拟机中执行下述命令请求 www.example.com

    curl www.example.com
  4. 请求超时,排除远端功能生效。