15.11. 使用出口路由器 pod 的注意事项

15.11.1. 关于出口路由器 pod

OpenShift Container Platform 出口路由器(egress router ) pod 使用一个来自专用的私有源 IP 地址,将网络流量重定向到指定的远程服务器。出口路由器 Pod 允许您将网络流量发送到设置的服务器,以便只允许从特定的 IP 地址访问。

注意

出口路由器 pod 并不适用于所有外向的连接。创建大量出口路由器 pod 可能会超过您的网络硬件的限制。例如,为每个项目或应用程序创建出口路由器 pod 可能会导致,在转换为使用软件来进行 MAC 地址过滤前超过了网络接口可以处理的本地 MAC 地址的数量。

重要

出口路由器镜像与 Amazon AWS、Azure Cloud 或其他不支持第 2 层操作的云平台不兼容,因为它们与 macvlan 流量不兼容。

15.11.1.1. 出口路由器模式

重定向模式中,出口路由器 Pod 配置 iptables 规则,将流量从其自身 IP 地址重定向到一个或多个目标 IP 地址。需要使用保留源 IP 地址的客户端 pod 必须修改来连接到出口路由器,而不是直接连接到目标 IP。

注意

egress router CNI 插件仅支持重定向模式。这与您可以使用 OpenShift SDN 部署的出口路由器实现不同。与 OpenShift SDN 的出口路由器不同,egress router CNI 插件不支持 HTTP 代理模式DNS 代理模式

15.11.1.2. 出口路由器 pod 的实现

出口路由器实施使用出口路由器 Container Network Interface(CNI)插件。该插件将二级网络接口添加到 pod。

出口路由器是一个带有两个网络接口的 pod。例如,pod 可以具有 eth0net1 网络接口。eth0 接口位于集群网络中,pod 将继续将接口用于与集群相关的普通网络流量。net1 接口位于第二个网络中,它拥有那个网络的 IP 地址和网关。OpenShift Container Platform 集群中的其他 pod 可以访问出口路由器服务,服务使 pod 可以访问外部服务。出口路由器作为 pod 和外部系统间的桥接。

离开出口路由器的流量会通过一个节点退出,但数据包带有来自路由器 pod 的 net1 接口的 MAC 地址。

15.11.1.3. 部署注意事项

出口路由器 pod 会为节点的主网络接口添加额外的 IP 地址和 MAC 地址。因此,您可能需要配置虚拟机监控程序或云供应商来允许额外的地址。

Red Hat OpenStack Platform (RHOSP)

如果在 RHOSP 上部署 OpenShift Container Platform,则必须允许来自 OpenStack 环境上的出口路由器 Pod 的 IP 和 MAC 地址的流量。如果您不允许流量,则通信会失败

$ openstack port set --allowed-address \
  ip_address=<ip_address>,mac_address=<mac_address> <neutron_port_uuid>
Red Hat Virtualization (RHV)
如果使用 RHV,必须为虚拟网络接口控制器(vNIC)选择 No Network Filter
VMware vSphere
如果使用 VMware vSphere,请参阅 VMware 文档 以了解 vSphere 标准交换机的安全。通过从 vSphere Web 客户端中选择主机虚拟交换机来查看并更改 VMware vSphere 默认设置。

具体来说,请确保启用了以下功能:

15.11.1.4. 故障切换配置

为了避免停机,可以使用 Deployment 资源部署出口路由器 pod,如下例所示。要为示例部署创建新 Service 对象,使用 oc expose deployment/egress-demo-controller 命令。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: egress-demo-controller
spec:
  replicas: 1  1
  selector:
    matchLabels:
      name: egress-router
  template:
    metadata:
      name: egress-router
      labels:
        name: egress-router
      annotations:
        k8s.v1.cni.cncf.io/networks: egress-router-redirect
    spec:  2
      containers:
        - name: egress-router-redirect
          image: registry.redhat.io/openshift3/ose-pod
1
确保副本数被设置为 1,因为在任何同一个时间点上,只有一个 pod 可以使用给定的出口源 IP 地址。这意味着,在一个节点上运行的路由器只有一个副本。
2
为出口路由器 pod 指定 Pod 对象模板。