如何使用带有 route53 DNS 的 nginx-ingress 和 cert-manager 在 EKS 上启用 HTTPS?
How to to enable HTTPS on EKS using nginx-ingress and cert-manager with route53 DNS?
所以,我在aws-eks上有一个Kubernetes集群运行,目前只是一个测试集群,用于学习和构建生产集群。
除了 SSL 证书之外,我已经设法使我需要的一切工作! :(
我正在使用 cert-manager 在我的域“brunolira.dev”上添加 SSL 证书,该证书是我在 google 域上购买的,并使用 AWS 的 Route53 重定向到我的 kubernetes 负载均衡器但还没有任何成功。
通过使用暂存证书管理器 (https://acme-staging-v02.api.letsencrypt.org/directory),我在 Firefox 上获得了以下证书:
当我使用 prod cert-manager url (https://acme-prod-v02.api.letsencrypt.org/directory) 时,它会更改为:
我不明白为什么它说“Kubernetes Ingress Controller Fake Certificate”也不明白为什么
DNS 更改为“ingress.local”
这是我的 ClusterIssuer:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: MYEMAIL(WHICH I DID NOT REGISTER ANYWHERE, IS THERE SUCH A THING?)
privateKeySecretRef:
name: cluster-issuer-account-key
server: https://acme-prod-v02.api.letsencrypt.org/directory
solvers:
- selector:
dnsZones:
- "brunolira.dev"
dns01:
route53:
region: us-east-2
hostedZoneID: HOSTEDZONE ID ON ROUTE 53
role: arn:aws:iam::IAMUSERID:role/dns-manager
这是我的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- brunolira.dev
secretName: echo-tls
rules:
- host: brunolira.dev
http:
paths:
- path: /common
backend:
serviceName: common-service
servicePort: 80
- path: /offline
backend:
serviceName: offline-service
servicePort: 80
任何关于我如何解决这个问题的帮助、指导、建议或提示将不胜感激!
如果您想查看产品生成的证书,可以访问页面 brunolira.dev 并验证您需要的任何内容!
我还可以提供有关我的配置的任何信息,这些信息将有助于找到解决此问题的方法!
我认为 link 在这方面对您有所帮助。
TLS-secret 将自动创建,您只需在入口规则中提及即可。
已解决!
长话短说,我使用了错误的 letsencrypt 生产 URL :)
尽管在提供的 clusterIssuer 上我使用的是“dns01”求解器,但我也在尝试使用“http01”。
这是我最后的 ClusterIssuer:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: MYEMAIL
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
这是我最后的 Ingress:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/acme-challenge-type: "http01"
cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
tls:
- hosts:
- brunolira.dev
secretName: echo-tls
rules:
- host: brunolira.dev
http:
paths:
- path: /serviceA
backend:
serviceName: serviceA
servicePort: 80
- path: /ServiceB
backend:
serviceName: serviceB
servicePort: 80
这个 link 帮助我看到我做错了什么!很好的教程:)
所以,我在aws-eks上有一个Kubernetes集群运行,目前只是一个测试集群,用于学习和构建生产集群。 除了 SSL 证书之外,我已经设法使我需要的一切工作! :(
我正在使用 cert-manager 在我的域“brunolira.dev”上添加 SSL 证书,该证书是我在 google 域上购买的,并使用 AWS 的 Route53 重定向到我的 kubernetes 负载均衡器但还没有任何成功。
通过使用暂存证书管理器 (https://acme-staging-v02.api.letsencrypt.org/directory),我在 Firefox 上获得了以下证书:
当我使用 prod cert-manager url (https://acme-prod-v02.api.letsencrypt.org/directory) 时,它会更改为:
这是我的 ClusterIssuer:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: MYEMAIL(WHICH I DID NOT REGISTER ANYWHERE, IS THERE SUCH A THING?)
privateKeySecretRef:
name: cluster-issuer-account-key
server: https://acme-prod-v02.api.letsencrypt.org/directory
solvers:
- selector:
dnsZones:
- "brunolira.dev"
dns01:
route53:
region: us-east-2
hostedZoneID: HOSTEDZONE ID ON ROUTE 53
role: arn:aws:iam::IAMUSERID:role/dns-manager
这是我的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- brunolira.dev
secretName: echo-tls
rules:
- host: brunolira.dev
http:
paths:
- path: /common
backend:
serviceName: common-service
servicePort: 80
- path: /offline
backend:
serviceName: offline-service
servicePort: 80
任何关于我如何解决这个问题的帮助、指导、建议或提示将不胜感激!
如果您想查看产品生成的证书,可以访问页面 brunolira.dev 并验证您需要的任何内容! 我还可以提供有关我的配置的任何信息,这些信息将有助于找到解决此问题的方法!
我认为
TLS-secret 将自动创建,您只需在入口规则中提及即可。
已解决! 长话短说,我使用了错误的 letsencrypt 生产 URL :)
尽管在提供的 clusterIssuer 上我使用的是“dns01”求解器,但我也在尝试使用“http01”。
这是我最后的 ClusterIssuer:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: MYEMAIL
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
这是我最后的 Ingress:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/acme-challenge-type: "http01"
cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
tls:
- hosts:
- brunolira.dev
secretName: echo-tls
rules:
- host: brunolira.dev
http:
paths:
- path: /serviceA
backend:
serviceName: serviceA
servicePort: 80
- path: /ServiceB
backend:
serviceName: serviceB
servicePort: 80
这个 link 帮助我看到我做错了什么!很好的教程:)