Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

7.3.3. 使用 Egress Firewall 限制 Pod 访问

作为 OpenShift Container Platform 集群管理员,您可以使用出口策略限制集群中有些或所有 pod 可以访问的外部地址,以便:

  • pod 只能与内部主机通信,且无法启动到公共互联网的连接。

    或者,

  • pod 只能与公共互联网通信,且无法(在集群外)启动与内部主机的连接。

    或者,

  • pod 无法访问不应该联系的特定内部子网/主机。

例如,您可以使用不同的出口策略配置项目,允许 <project A> 访问指定的 IP 范围,但拒绝对 <project B> 相同的访问。

小心

您必须启用 ovs-multitenant 插件, 以便限制通过出口策略的 pod 访问。

项目管理员既不能创建 EgressNetworkPolicy 对象,也不能编辑您在项目中创建的对象。另外还有一些其他限制可以创建 EgressNetworkPolicy

  1. default 项目(以及通过 oc adm pod-network make-projects-global使全局化的任何其他项目)不能具有出口策略。
  2. 如果您将两个项目合并在一起(通过 oc adm pod-network join-projects),则无法 在任何 合并的项目中使用出口策略。
  3. 项目不能有多个出口策略对象。

违反这些限制将导致项目的出口策略中断,并可能导致所有外部网络流量被丢弃。

7.3.3.1. 配置 Pod 访问限制

要配置 pod 访问限制,您必须使用 oc 命令或 REST API。您可以使用 oc [create|replace|delete] 来操作 EgressNetworkPolicy 对象api/swagger-spec/oapi-v1.json 文件包含对象的实际工作方式的 API 级别详情。

配置 pod 访问限制:

  1. 导航到您要影响的项目。
  2. 为 pod 限制策略创建 JSON 文件:

    # oc create -f <policy>.json
  3. 使用策略详情配置 JSON 文件。例如:

    {
        "kind": "EgressNetworkPolicy",
        "apiVersion": "v1",
        "metadata": {
            "name": "default"
        },
        "spec": {
            "egress": [
                {
                    "type": "Allow",
                    "to": {
                        "cidrSelector": "1.2.3.0/24"
                    }
                },
                {
                    "type": "Allow",
                    "to": {
                        "dnsName": "www.foo.com"
                    }
                },
                {
                    "type": "Deny",
                    "to": {
                        "cidrSelector": "0.0.0.0/0"
                    }
                }
            ]
        }
    }

    当上例添加到项目中时,它允许到 IP 范围 1.2.3.0/24 的流量和域名 www.foo.com,但拒绝访问所有其他外部 IP 地址。(流量到其他 pod 不会受到影响,因为策略仅适用于 外部 流量。)

    EgressNetworkPolicy 中的规则按顺序检查,第一个匹配的规则会生效。如果上面示例中的三个规则被颠倒,则不允许流量到 1.2.3.0/24www.foo.com,因为首先要检查 0.0.0.0/0 规则,它将匹配和拒绝所有流量。

    域名更新在 30 分钟内有所反映。在上面的示例中,假设 www.foo.com 解析为 10.11.12.13,但之后被更改为 20.21.22.23。然后,OpenShift Container Platform 最多需要 30 分钟时间来适应这些 DNS 更新。