kubernetes - 为我的服务(kubernetes、nginx-ingress、letsencrypt、cert-manager)配置 https 的正确方法是什么?
问题描述
我只会描述它是如何在我这边配置的。我已经使用本教程安装cert-manger
在我的身上:Kubernetes
https://docs.cert-manager.io/en/latest/getting-started/install/kubernetes.html
我检查了它是否已安装并且它是:
我也ingress-resource
有下一个配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/acme-http01-edit-in-place: "true"
certmanager.k8s.io/cluster-issuer: letsencrypt-issuer
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: boonotes-ingress-resource
namespace: default
spec:
rules:
- host: www.bnsfun.com
http:
paths:
- backend:
serviceName: booknotes-front-end-service
servicePort: 80
path: /?(.*)
- host: www.bnsfun.com
http:
paths:
- backend:
serviceName: booknotes-back-end-service
servicePort: 3000
path: /api/?(.*)
tls:
- hosts:
- www.bnsfun.com
secretName: letsencrypt-certs
status:
loadBalancer:
ingress:
- ip: some ip
另外,我已经配置了证书:
kubectl 描述证书 booknotes-certificate
Name: booknotes-certificate
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"certmanager.k8s.io/v1alpha1","kind":"Certificate","metadata":{"annotations":{},"name":"booknotes-certificate","namespace":"...
API Version: certmanager.k8s.io/v1alpha1
Kind: Certificate
Metadata:
Creation Timestamp: 2019-11-17T04:51:57Z
Generation: 2
Resource Version: 7257970
Self Link: /apis/certmanager.k8s.io/v1alpha1/namespaces/default/certificates/booknotes-certificate
UID: fbe1d9c0-08f5-11ea-82b3-42010a80017a
Spec:
Acme:
Config:
Domains:
www.bnsfun.com
http01:
Ingress: boonotes-ingress-resource
Common Name: www.bnsfun.com
Dns Names:
www.bnsfun.com
Issuer Ref:
Kind: ClusterIssuer
Name: letsencrypt-issuer
Secret Name: letsencrypt-certs
Events: <none>
我还创建了一个secret
:
这是我的sevice & ingress
部分:
我已使用本教程对其进行配置: https ://medium.com/@betandr/kubernetes-ingress-with-tls-on-gke-744efd37e49e
cert-manager
和安装证书管理的官方文档。我错了什么?我如何检查为什么这不起作用?我已经尝试了很多东西,但都对我不起作用。我肯定做错了什么。但是什么?我知道我需要cert-manager
更新我的lets-encrypt
证书,还需要创建来存储它,然后我需要在和secret
中配置我的入口。请你帮我找出更多应该发生的事情以及完成它的主要步骤是什么?如果您需要更多信息,请告诉我tls
annotaions
这是我的发行人:
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-issuer
spec:
acme:
email: email
http01: {}
privateKeySecretRef:
name: letsencrypt
server: "https://acme-v02.api.letsencrypt.org/directory"
解决方案
让我们走另一条路,Letsencrypt官方文档说他们将不再支持0.8以下的版本,所以我建议你安装Jetstack提供的cert-manager,你可以在这里找到,为它安装helm chart .
按照这个stackoverflow帖子进行配置,请注意如果该帖子中提到的api版本在集群发行者的情况下不支持,那么宁愿使用
apiVersion: cert-manager.io/v1alpha2
请注意,证书中提到的 tls 秘密名称将由 cert-manager 自动生成,并且一旦您在入口规则中将该秘密名称修补到 TLS,它就会自动启动 acme-challenge 来验证域。
它将解决问题,并且在域验证后证书的状态将变为就绪
推荐阅读
- javascript - 如何在 ajax 调用中安全地将数据发送到控制器方法,以便通过查看开发人员工具无法利用它
- flutter - 如何在颤动中更改主题数据?
- c# - 如何从外部应用程序在 Dynamics 365 Finance & Operations 中插入/更新客户
- javascript - 如何让承诺等到循环中的所有请求都完成?
- android - 如何使用另一个应用程序打开颤振应用程序
- r - 更改 ComplexHeatmap 中图例的顺序
- r - 无法将 XML 包安装到 Rstudio
- python - 如何使用来自 azure 认知搜索索引的数据创建知识图,使用在 JFK 文件演示中生成的类似 python 的图
- php - 创建一个Zip,添加空子目录并将文件添加到新的子目录
- python - 使用带有 SQLAlchemy 的连接表继承时,如何在 PostgreSQL 上运行“upsert”?