8.7. 为外部项目流量启用静态 IP
作为集群管理员,您可以为项目分配特定的静态 IP 地址,以便流量可在外部轻松识别。这与默认出口路由器不同,后者用于将流量发送到特定目的地。
可识别的 IP 流量通过确保原始数据可见来提高集群安全性。启用后,来自指定项目的所有传出外部连接将共享相同的固定源 IP,这意味着任何外部资源都可以识别流量。
与出口路由器不同,这可能受 EgressNetworkPolicy
防火墙规则的约束。
为集群中的项目分配静态 IP 地址需要 SDN 使用 ovs-networkpolicy 或 ovs-multitenant 网络插件。
如果您以多租户模式使用 OpenShift SDN,则无法将出口 IP 地址与与其关联的项目附加到另一个命名空间的任何命名空间一起使用。例如,如果 project1
和 project2
通过运行 oc adm pod-network join-projects --to=project1 project2
命令被连接,则这两个项目都不能使用出口 IP 地址。如需更多信息,请参阅 BZ#1645577。
启用静态源 IP:
使用所需 IP 更新
NetNamespace
:$ oc patch netnamespace <project_name> -p '{"egressIPs": ["<IP_address>"]}'
例如,将
MyProject
项目分配给 IP 地址 192.168.1.100:$ oc patch netnamespace MyProject -p '{"egressIPs": ["192.168.1.100"]}'
egressIPs
字段是一个数组。您可以将egressIPs
设置为位于不同节点上的两个或多个 IP 地址,以提供高可用性。如果设置了多个出口 IP 地址,Pod 会将列表中的第一个 IP 用于出口,但如果托管该 IP 地址的节点失败,Pod 会在短暂的延迟后切换到使用列表中的下一个 IP。手动将出口 IP 分配给所需的节点主机。在节点主机上的
HostSubnet
对象中设置egressIPs
字段。包含尽可能多的 IP 地址,以便分配给该节点主机:$ oc patch hostsubnet <node_name> -p \ '{"egressIPs": ["<IP_address_1>", "<IP_address_2>"]}'
例如,假设
node1
应具有出口 IP 192.168.1.100、192.168.1.101 和 192.168.1.102:$ oc patch hostsubnet node1 -p \ '{"egressIPs": ["192.168.1.100", "192.168.1.101", "192.168.1.102"]}'
重要出口 IP 是作为额外 IP 地址在主网络接口中实现的,且必须与节点的主 IP 位于同一个子网中。此外,不应在任何 Linux 网络配置文件中配置任何外部 IP,如 ifcfg-eth0。
在主网络接口上允许额外 IP 地址可能需要在使用某些云或虚拟机解决方案时进行额外的配置。
如果为项目启用了上述内容,则该项目的所有出口流量都将路由到托管该出口 IP 的节点,然后(使用 NAT)连接到该 IP 地址。如果在 NetNamespace
中设置 egressIPs
,但没有节点托管该出口 IP,则会丢弃来自该命名空间的出口流量。