OpenShift同一主机双Route配置问题:路径流量被拦截如何解决?
解决OpenShift同主机Route路径冲突:特定路径跳过TLS客户端认证
你的问题根源在于passthrough类型的Route工作在TCP层,OpenShift路由器(HAProxy)会直接转发所有到该主机443端口的流量,不会解析HTTP路径,导致/some-path的Route无法被命中。以下是无需修改主机或应用路径的解决方案:
方案:将全局Route改为reencrypt终止模式
把需要客户端认证的根路径Route从passthrough改为reencrypt,这样路由器可以终止TLS连接、验证客户端证书,同时解析HTTP路径实现精准匹配。更长的路径(如/some-path)会被优先匹配,其余流量走根路径的认证路由。
调整后的完整配置:
# 处理/some-path的路由,无需客户端认证 apiVersion: route.openshift.io/v1 kind: Route metadata: name: route-path spec: host: example.com path: "/some-path" to: kind: Service name: my-service weight: 100 port: targetPort: http tls: termination: edge insecureEdgeTerminationPolicy: None --- # 处理所有其他路径的路由,要求TLS客户端认证 apiVersion: route.openshift.io/v1 kind: Route metadata: name: route-root spec: host: example.com path: "/" to: kind: Service name: my-service weight: 100 port: targetPort: https tls: termination: reencrypt insecureEdgeTerminationPolicy: None # 填入用于验证客户端证书的CA证书 caCertificate: | -----BEGIN CERTIFICATE----- # 你的客户端CA证书内容 -----END CERTIFICATE----- # 可选:如果服务需要路由器提供客户端证书,填写以下内容 # clientCertificate: | # -----BEGIN CERTIFICATE----- # ... # -----END CERTIFICATE----- # key: | # -----BEGIN RSA PRIVATE KEY----- # ... # -----END RSA PRIVATE KEY-----
关键说明:
- reencrypt模式:路由器先验证客户端证书(使用你提供的CA),再重新加密流量转发到服务的HTTPS端口,既保留了客户端认证要求,又能利用HTTP路径匹配逻辑。
- 路径优先级:OpenShift Route会优先匹配更长、更具体的路径,因此
/some-path的路由会优先于/的路由被命中。 - edge模式:针对
/some-path的路由使用edge终止,路由器直接终止TLS后转发HTTP流量到服务的http端口,无需客户端认证。
内容的提问来源于stack exchange,提问作者Jakob Graf
相关产品推荐
相关产品推荐

