5.7.19. 禁用命名空间所有权检查
主机和子域由首先发出声明的路由的命名空间所有。在命名空间中创建的其他路由可以在子域上声明。所有其他命名空间都无法对声明的主机和子域进行声明。拥有主机的命名空间还拥有与主机关联的所有路径,例如 www.abc.xyz/path1
。
例如,如果主机 www.abc.xyz
没有被任何路由声明。在命名空间 ns1
中使用主机 www.abc.xyz
创建路由 r1
会使命名空间 ns1
的所有者为主机 www.abc.xyz
,对通配符路由的子域 abc.xyz
。如果另一个命名空间 ns2
,试图创建带有路径 www.abc.xyz/path1/path2
的路由,它将因为另一个命名空间中的路由(本例中为ns1)
而失败。
使用通配符路由 拥有子域的命名空间,该命名空间拥有子域中的所有主机。如果命名空间拥有以上示例中的子域 abc.xyz
,另一个命名空间无法声明 z.abc.xyz
。
禁用命名空间所有权规则,您可以禁用这些限制,并允许在命名空间间声明主机(和子域)。
如果您决定在路由器中禁用命名空间所有权检查,请注意,最终用户可在命名空间间声明主机的所有权。虽然这种变化可以在某些开发环境中取用,但在生产环境中要谨慎使用此功能,并确保您的集群策略锁定了不受信任的最终用户创建路由。
例如,如果命名空间 ns1
创建最旧的路由 r1
www.abc.xyz
,它只具有 ROUTER_DISABLE_NAMESPACE_OWNERSHIP_CHECK=true
。另一个命名空间可以创建一个通配符路由,即使该子域中没有最旧的路由(一个bc.xyz
),我们也可能有其他命名空间声明其他非通配符重叠主机(例如 foo.abc.xyz
、bar.abc.xyz
、baz.abc.xyz
)及其声明。
任何其它命名空间(例如 ns
2)现在可以创建一个路由 r2
www.abc.xyz/p1/p2
,它会被接受。同样,另一个命名空间(ns3
)也可以创建一个带有子域通配符策略的路由通配符。abc .xyz
,它可以拥有通配符。
在本示例中,策略 ROUTER_DISABLE_NAMESPACE_OWNERSHIP_CHECK=true
更为 lax,并允许在命名空间间声明。如果已声明 host+path,则路由器才会拒绝禁用命名空间所有权的路由。
例如,如果新路由 rx
尝试声明 www.abc.xyz/p1/p2
,它将被拒绝,因为路由 r2
拥有该主机+path 组合。无论路由 rx
存在于同一命名空间或其他命名空间中,都会声明正确的 host+path。
此功能可以在路由器创建期间或通过在路由器部署配置中设置环境变量来设置。
设置在路由器创建过程中设置
$ oc adm router ... --disable-namespace-ownership-check=true
在路由器部署配置中设置环境变量
$ oc set env dc/router ROUTER_DISABLE_NAMESPACE_OWNERSHIP_CHECK=true