3.2.21. 使用动态配置管理器
您可以配置 HAProxy 路由器来支持动态配置管理器。
动态配置管理器带来某些类型的在线路由,无需 HAProxy 重新加载停机时间。它处理任何路由和端点生命周期事件,如路由和端点附加 |deletion|update
。
通过将 ROUTER_HAPROXY_CONFIG_MANAGER
环境变量设置为 true
来启用动态配置管理器:
$ oc set env dc/<router_name> ROUTER_HAPROXY_CONFIG_MANAGER='true'
如果动态配置管理器无法动态配置 HAProxy,它会重写配置并重新加载 HAProxy 进程。例如,如果新路由包含自定义注解,如自定义超时,或者路由需要自定义 TLS 配置。
动态配置内部使用 HAProxy 套接字和配置 API,以及预分配的路由和后端服务器池。预分配的路由池使用路由蓝图创建。默认蓝图集支持不安全的路由、边缘安全路由,无需任何自定义 TLS 配置和直通路由。
重新加密
路由需要自定义 TLS 配置信息,因此需要额外的配置才能将其用于动态配置管理器。
通过设置 ROUTER_BLUEPRINT_ROUTE_NAMESPACE
以及可选的 ROUTER_BLUEPRINT_ROUTE_LABELS
环境变量来扩展动态配置管理器可以使用的蓝图。
蓝图路由命名空间中的所有路由或路由标签的路由作为与默认蓝图集类似的自定义蓝图处理。这包括使用自定义注解或路由的重新加密
路由或自定义 TLS 配置的路由。
以下流程假定您已创建了三个路由对象:reencrypt-blueprint
, annotated-edge-blueprint
, 和 annotated-unsecured-blueprint
。如需不同路由类型对象的示例,请参阅 Route Types。
流程
创建一个新项目
$ oc new-project namespace_name
创建新路由。此方法公开现有的服务:
$ oc create route edge edge_route_name --key=/path/to/key.pem \ --cert=/path/to/cert.pem --service=<service> --port=8443
标记路由:
$ oc label route edge_route_name type=route_label_1
创建与路由对象定义不同的路由 :所有都具有标签
type=route_label_1
:$ oc create -f reencrypt-blueprint.yaml $ oc create -f annotated-edge-blueprint.yaml $ oc create -f annotated-unsecured-blueprint.json
您还可以从路由中删除标签,这会阻止它用作蓝图路由。例如,防止
annotated-unsecured-blueprint
用作蓝图路由:$ oc label route annotated-unsecured-blueprint type-
创建用于蓝图池的新路由器:
$ oc adm router
为新路由器设置环境变量:
$ oc set env dc/router ROUTER_HAPROXY_CONFIG_MANAGER=true \ ROUTER_BLUEPRINT_ROUTE_NAMESPACE=namespace_name \ ROUTER_BLUEPRINT_ROUTE_LABELS="type=route_label_1"
处理命名空间或带有
type=route_label_1
标签的项目namespace_name
中的所有路由,并用作自定义蓝图。请注意,您还可以通过管理该命名空间
namespace_name
中的路由来添加、更新或删除蓝图。动态配置管理器会监视命名空间namespace_name
中路由的更改,类似于路由器监视路由
和服务
的方式。预分配的路由和后端服务器的池大小可以通过
ROUTER_BLUEPRINT_ROUTE_POOL_SIZE
控制,默认为10
, 而ROUTER_MAX_DYNAMIC_SERVERS
默认为5
环境变量。您还可以控制动态配置管理器所做的更改的频率,即当重新编写 HAProxy 配置并重新加载 HAProxy 进程时。默认值为 1 小时或 3600 秒,或者当动态配置管理器用尽池空间时。COMMIT_INTERVAL
环境变量控制此设置:$ oc set env dc/router -c router ROUTER_BLUEPRINT_ROUTE_POOL_SIZE=20 \ ROUTER_MAX_DYNAMIC_SERVERS=3 COMMIT_INTERVAL=6h
这个示例将每个蓝图路由的池大小增加到
20
,将动态服务器的数量减少到3
,并将提交间隔增加到6
小时。