首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Rancher解决Kubernetes入侵控制器伪造证书错误

如何通过Rancher解决Kubernetes入侵控制器伪造证书错误
EN

Stack Overflow用户
提问于 2022-09-03 12:18:01
回答 1查看 461关注 0票数 1

我在kubernetes集群上安装了Rancher 2.6。作为证书管理器版本,我使用了1.7.1。

代码语言:javascript
复制
helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.7.1 --set installCRDs=true --create-namespace


helm install rancher rancher-latest/rancher \
--namespace cattle-system \
--set hostname=MYDOMAIN.org \
--set bootstrapPassword=MYPASSWORD \
--set ingress.tls.source=letsEncrypt \    //<--- I use letsEncrypt
--set letsEncrypt.email=cert@mydomain.org \
--set letsEncrypt.ingress.class=nginx

安装完成后,Rancher成功地部署在https:\mydomain.org.上

LetsEncrypt SSL在这里工作得很好。使用Rancher,我为我的应用程序创建了一个新的RKE2集群。

所以,我创建了一个新的部署来测试

  • 牧场主/你好-世界:最新
  • 3x复制品

用端口直接调用节点ip入口,工作。http://XXXXXX:32599/

此时,我想使用https子域hello.mydomain.org。

在研究了文档之后,我的方法是创建一个新的入口。我做的就像你在下面的照片上看到的。

在创建了一个新的后,我检查了hello部署的部分。新的侵入线现在可以在那里使用了。

我的期望是现在我可以去**hello.mydomain.org。但是https在这里不起作用,相反,我得到了:

代码语言:javascript
复制
NET::ERR_CERT_AUTHORITY_INVALID
Subject: Kubernetes Ingress Controller Fake Certificate

Issuer: Kubernetes Ingress Controller Fake Certificate

Expires on: 03.09.2023

Current date: 03.09.2022

我在哪里犯了个错误?如何将LetsEncrypt用于我的部署?

EN

回答 1

Stack Overflow用户

发布于 2022-09-04 06:39:26

假证书通常意味着入口控制器正在为默认后端服务,而不是您所期望的。虽然可以像预期的那样在http上为特定的Ingress资源提供服务,但控制器并不认为它可以在https上服务。最有可能的解释是证书丢失,入口主机没有配置为https。当你安装牧场主时,你只配置了牧场自己的入口。您需要分别为每个resource资源设置证书。

你没提到你用的是哪个入口控制器。对于基于LE或其他基于ACME的证书颁发机构,您通常需要一个证书控制器来管理证书生成和更新。我推荐证书经理。这里有一个优秀教程,用于设置LE、cert-manager和nginx-入口控制器.如果您使用Traefik,它能够自行生成LE证书。,但是只在kubernetes环境中提供了部分支持(即。没有高可用性),所以您最好的选择是使用证书管理器,即使是这样。

即使您已经设置了证书,证书管理器也不会自动为每一个输入颁发证书,而只会向请求它的用户发出证书。为此您需要注释。

对于cert-manager,一旦您设置了Issuer/ClusterIssuer和注释,您的入口资源应该如下所示(您可以从牧场主处检查YAML ):

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-staging
  name: hello-ingress
  namespace: hello-ns
spec:
  rules:
  - host: hello.example.com
    http:
      paths:
      - backend:
        service:
          name: hello-service
          port:
            number: 80
          path: /
            pathType: Prefix
      tls:
      - hosts:
        - hello.example.com
        secretName: hello-letsencrypt-cert

您可能需要直接编辑YAML并添加spec.tls.secretName。如果一切顺利,一旦应用metadata.annotations 设置了spec.tls.hostsspec.tls.secretName,验证就会很快进行,入口地址应该更改为https://hello.example.com

顺便说一句,我也经历过这个问题,当大会在反向代理(如HAproxy )后面,并且反向代理(或issue )没有被正确地设置为使用代理协议时。你没有提到使用一个,但我会把它记录下来。

如果这些步骤不能解决您的问题,您应该检查入口上的kubectl describe和nginx控制器吊舱上的kubectl logs,看看是否有什么突出之处。

编辑:我跳到了一个结论,所以我重新构造了这个答案,也注意到可能会完全缺少证书管理器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73592178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档