我正在使用Traefik 2.6.2作为入口控制器的K3s集群中创建以下入口资源。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ing
namespace: default
annotations:
kubernetes.io/ingress.class: traefik
spec:
tls:
- hosts:
- "my-app.mydomain.com"
secretName: mydomain-cert
rules:
- host: "my-app.mydomain.com"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
name: http
并且秘密mydomain-cert
被创建并存在于同一名称空间中(在这种情况下是默认的(。
kubectl describe secret mydomain-cert
Name: mydomain-cert
Namespace: default
Labels: <none>
Annotations: <none>
Type: kubernetes.io/tls
Data
====
tls.crt: 5603 bytes
tls.key: 1704 bytes
该证书有效期至年底,并由Let's Encrypt签名。我还在Traefik的仪表板中看到了创建的健康路线。但是,当我通过浏览器访问端点时(https://my-app.mydomain.com1(,我收到一个无效的证书错误。使用的证书不是通过入口资源引用的证书,而是Traefik默认的自动生成证书。
直到最近,这还不是问题。我不得不重建我的K3s集群,之后我开始看到这个问题。我想知道这是否意味着获得一个新版本的Traefik,从而改变我应该如何配置入口。
面对同样的问题,我可以通过生成另一个具有正确CN的证书来解决。
Traefik似乎只使用与您的主机名匹配的证书。就我而言,我的(有效(证书与我的不匹配。
因此生成一个与您的主机名相匹配的新主机名";我的应用程序.mydomain.com";应该解决问题
资料来源:https://doc.traefik.io/traefik/v1.7/user-guide/kubernetes/#add-a-tls-certificate-to--the-ingress,上面写着:
TLS配置中的字段主机将被忽略。相反,证书提供的域用于此目的。建议不要使用通配符证书,因为它们将全局匹配。
NB:上面的链接还提供了一个方便的命令行,用于生成一个自签名证书,您选择的主机名为CN.