×

关于出站路由 Pod

OpenShift Container Platform 出站路由 Pod 将流量从未用于任何其他用途的专用源 IP 地址重定向到指定的远程服务器。出站路由 Pod 可以将网络流量发送到仅配置为允许从特定 IP 地址访问的服务器。

出站路由 Pod 不适用于每个出站连接。创建大量出站路由 Pod 会超过网络硬件的限制。例如,为每个项目或应用程序创建出站路由 Pod 可能会超过网络接口可以处理的本地 MAC 地址数量,然后才恢复到在软件中过滤 MAC 地址。

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

出站路由模式

重定向模式下,出口路由器 Pod 会配置iptables规则,将来自自身 IP 地址的流量重定向到一个或多个目标 IP 地址。需要使用保留源 IP 地址的客户端 Pod 必须配置为访问出口路由器的服务,而不是直接连接到目标 IP。您可以使用curl命令从应用程序 Pod 访问目标服务和端口。例如

$ curl <router_service_IP> <port>

出口路由器 CNI 插件仅支持重定向模式。出口路由器 CNI 插件不支持 HTTP 代理模式或 DNS 代理模式。

出口路由器 Pod 实现

出口路由器实现使用出口路由器容器网络接口 (CNI) 插件。该插件会向 Pod 添加一个辅助网络接口。

出口路由器是一个具有两个网络接口的 Pod。例如,该 Pod 可以具有eth0net1网络接口。eth0接口位于集群网络上,Pod 继续使用该接口进行普通的集群相关网络流量。net1接口位于辅助网络上,并具有该网络的 IP 地址和网关。OpenShift Container Platform 集群中的其他 Pod 可以访问出口路由器服务,并且该服务使 Pod能够访问外部服务。出口路由器充当 Pod 和外部系统之间的桥梁。

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

添加出口路由器自定义资源时,集群网络操作符会创建以下对象:

  • Pod 的net1辅助网络接口的网络连接定义。

  • 出口路由器的部署。

如果删除出口路由器自定义资源,则操作符会删除与出口路由器关联的前述列表中的两个对象。

部署注意事项

出口路由器 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>
VMware vSphere

如果您使用的是 VMware vSphere,请参阅VMware 文档,了解如何保护 vSphere 标准交换机。通过从 vSphere Web Client 选择主机虚拟交换机来查看和更改 VMware vSphere 默认设置。

具体来说,请确保已启用以下内容:

故障转移配置

为避免停机,集群网络操作符会将出口路由器 Pod 部署为部署资源。部署名称为egress-router-cni-deployment。与部署对应的 Pod 的标签为app=egress-router-cni

要为部署创建新的服务,请使用oc expose deployment/egress-router-cni-deployment --port <port_number>命令,或创建如下例所示的文件:

apiVersion: v1
kind: Service
metadata:
  name: app-egress
spec:
  ports:
  - name: tcp-8080
    protocol: TCP
    port: 8080
  - name: tcp-8443
    protocol: TCP
    port: 8443
  - name: udp-80
    protocol: UDP
    port: 80
  type: ClusterIP
  selector:
    app: egress-router-cni