19.12. 使用出口路由器 pod 的注意事项
19.12.1. 关于出口路由器 pod
OpenShift Container Platform 出口路由器(egress router ) pod 使用一个来自专用的私有源 IP 地址,将网络流量重定向到指定的远程服务器。出口路由器 pod 可以将网络流量发送到设置为仅允许从特定 IP 地址访问的服务器。
出口路由器 pod 并不适用于所有外向的连接。创建大量出口路由器 pod 可能会超过您的网络硬件的限制。例如,为每个项目或应用程序创建出口路由器 pod 可能会导致,在转换为使用软件来进行 MAC 地址过滤前超过了网络接口可以处理的本地 MAC 地址的数量。
出口路由器镜像与 Amazon AWS、Azure Cloud 或其他不支持第 2 层操作的云平台不兼容,因为它们与 macvlan 流量不兼容。
19.12.1.1. 出口路由器模式
在重定向模式中,出口路由器 Pod 配置 iptables
规则,将流量从其自身 IP 地址重定向到一个或多个目标 IP 地址。需要使用保留源 IP 地址的客户端 pod 必须配置为访问出口路由器的服务,而不是直接连接到目标 IP。您可以使用 curl
命令从应用程序 pod 访问目标服务和端口。例如:
$ curl <router_service_IP> <port>
egress router CNI 插件只支持重定向模式。这与您可以使用 OpenShift SDN 部署的出口路由器实现不同。与 OpenShift SDN 的出口路由器不同,egress router CNI 插件不支持 HTTP 代理模式或 DNS 代理模式。
19.12.1.2. 出口路由器 pod 的实现
出口路由器实施使用出口路由器 Container Network Interface(CNI)插件。该插件将二级网络接口添加到 pod。
出口路由器是一个带有两个网络接口的 pod。例如,pod 可以具有 eth0
和 net1
网络接口。eth0
接口位于集群网络中,pod 将继续将接口用于与集群相关的普通网络流量。net1
接口位于第二个网络中,并且具有该网络的 IP 地址和网关。OpenShift Container Platform 集群中的其他 pod 可以访问出口路由器服务,服务使 pod 可以访问外部服务。出口路由器作为 pod 和外部系统间的桥接。
离开出口路由器的流量会通过一个节点退出,但数据包带有来自路由器 pod 的 net1
接口的 MAC 地址。
添加出口路由器自定义资源时,Cluster Network Operator 会创建以下对象:
-
pod 的
net1
二级网络接口的网络附加定义。 - 出口路由器的部署。
如果您删除了一个出口路由器自定义资源,Operator 会删除上列表中与出口路由器关联的两个对象。
19.12.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 默认设置。
具体来说,请确保启用了以下功能:
19.12.1.4. 故障切换配置
为了避免停机,Cluster Network Operator 会将出口路由器 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