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

OpenShift中Traefik Ingress自定义自签名证书不生效问题排查

OpenShift中Traefik Ingress自定义证书未生效问题排查与解决

问题排查与修复步骤

1. 修正TLS Secret的类型

你当前创建的是generic类型的Secret,但Kubernetes/OpenShift要求TLS证书必须使用tls类型的Secret,Traefik才能正确识别并读取其中的证书文件。重新创建Secret:

# 删除原有错误的Secret
oc delete secret my-tls
# 创建正确的tls类型Secret
oc create secret tls my-tls --key=my.key --cert=my.crt

2. 验证Secret的命名空间一致性

确保my-tls Secret和你的Ingress对象、Traefik控制器处于同一个命名空间。如果Traefik安装在独立命名空间(比如traefik),而Ingress和Secret在其他命名空间,需要将Secret同步到Traefik所在命名空间,或者保持三者处于同一命名空间(Ingress的tls.secretName默认读取当前命名空间的Secret)。

3. 确认证书的域名匹配

检查你生成的自签名证书是否包含目标域名traefik.ben-tests.com:

# 查看证书的主题和SAN字段
openssl x509 -in my.crt -text -noout | grep -E "(Subject:|DNS:)"

如果输出中没有traefik.ben-tests.com,需要重新生成证书,确保在openssl交互步骤中填写正确的Common Name(CN),或者通过配置文件添加SAN扩展:

# 生成带SAN的自签名证书配置文件
cat > openssl.cnf <<EOF
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = traefik.ben-tests.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = traefik.ben-tests.com
EOF
# 使用配置文件生成证书
openssl req -new -newkey rsa:2048 -nodes -keyout my.key -out my.crt -config openssl.cnf -x509 -days 365

4. 优化Ingress配置

你的Ingress注解已经正确指定了websecure入口点和TLS启用,可以额外添加注解强制绑定证书Secret,确保Traefik优先读取指定证书:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: whoami-http
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
    traefik.ingress.kubernetes.io/router.tls: "true"
    traefik.ingress.kubernetes.io/router.tls.secretname: my-tls
spec:
  tls:
  - hosts:
      - traefik.ben-tests.com
    secretName: my-tls
  rules:
    - host: traefik.ben-tests.com
      http:
        paths:
          - path: /iamben
            pathType: Prefix
            backend:
              service:
                name: whoami-svc
                port:
                  number: 80

更新Ingress后等待Traefik重新加载配置:

oc apply -f your-ingress.yaml

替换Traefik全局默认证书

如果希望所有未指定证书的Ingress都使用你的自定义证书,可以替换Traefik的全局默认证书:

  1. 将自定义证书的tls类型Secret部署到Traefik所在的命名空间(比如traefik)
  2. 修改Traefik的Helm values.yaml,添加以下配置:
tls:
  stores:
    default:
      defaultCertificate:
        secretName: my-tls
  1. 升级Traefik Helm部署:
helm upgrade traefik traefik/traefik -n traefik -f your-values.yaml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:25:13