You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenShift 4.3中Ingress生成的Route无HTTPS,如何配置安全路由?

我之前帮不少团队处理过OpenShift 3.11到4.x的Ingress/Route迁移问题,你的情况其实是因为4.x里Ingress和Route的映射逻辑有了一些调整,下面给你几个可行的解决方案:

首先明确核心问题:你当前的Ingress配置里只指定了tls.hosts,但没关联证书Secret,OpenShift的Ingress Controller不知道该用哪个证书来生成HTTPS Route,所以默认生成了HTTP的Route。

方案一:补全Ingress的TLS配置(推荐,保持K8s标准Ingress格式)

OpenShift 4.x的Ingress依然支持指定证书Secret,但注意证书Secret必须和Ingress在同一个namespace(K8s Secret是命名空间隔离的)。如果想继续使用default命名空间的默认证书,你需要先把它复制到test命名空间:

# 复制default命名空间的默认证书到test命名空间
oc get secret default-cert -n default -o yaml | sed 's/namespace: default/namespace: test/' | oc create -f -

然后修改你的Ingress配置,添加secretName字段:

kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
  name: ingress
  namespace: test
spec:
  tls:
    - hosts:
      - XXXXXXXXXX
      secretName: default-cert  # 填写复制后的证书Secret名称
  rules:
    - host: >-
        XXXXXXXXXX
      http:
        paths:
          - path: /abc-ui/
            backend:
              serviceName: abc-test-service
              servicePort: 8080

应用这个配置后,Ingress Controller会生成带TLS的Route,自动使用你指定的证书。

方案二:使用OpenShift集群默认Ingress证书(无需复制Secret)

如果你不想复制证书,可以利用OpenShift 4.x自带的集群默认Ingress证书,给Ingress添加特定注解,让Controller自动关联默认证书:

kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
  name: ingress
  namespace: test
  annotations:
    route.openshift.io/termination: edge  # 指定Edge终止模式,使用默认证书
    route.openshift.io/insecure-policy: Redirect  # 自动把HTTP请求重定向到HTTPS
spec:
  tls:
    - hosts:
      - XXXXXXXXXX
  rules:
    - host: >-
        XXXXXXXXXX
      http:
        paths:
          - path: /abc-ui/
            backend:
              serviceName: abc-test-service
              servicePort: 8080

这个注解会告诉OpenShift的Ingress Controller生成一个Edge类型的Route,自动使用集群默认的Ingress证书,并且强制HTTPS访问。

方案三:直接使用OpenShift Route资源(原生方式,功能更完整)

如果Ingress的限制让你觉得麻烦,直接使用OpenShift原生的Route资源是最直接的方式,毕竟Route是OpenShift特有的资源,支持更多自定义配置:

kind: Route
apiVersion: route.openshift.io/v1
metadata:
  name: abc-ui-route
  namespace: test
spec:
  host: XXXXXXXXXX
  path: /abc-ui/
  to:
    kind: Service
    name: abc-test-service
    weight: 100
  port:
    targetPort: 8080
  tls:
    termination: edge
    insecureEdgeTerminationPolicy: Redirect  # HTTP转HTTPS

这个Route配置会自动使用集群默认证书(如果没指定secretName的话),生成的就是HTTPS的访问地址,而且你可以更灵活地配置会话亲和性、路径重写等OpenShift特有的功能。

总结

  • 不是必须用Route资源,用Ingress也能实现HTTPS,只要补全TLS配置或者添加正确的注解;
  • 如果要跨namespace引用证书,必须先复制Secret到目标namespace;
  • 直接用Route的话,能获得更丰富的OpenShift专属特性,适合复杂场景。

内容的提问来源于stack exchange,提问作者Mansi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:27:39