use*_*406 5 kubernetes lets-encrypt cert-manager amazon-eks
我按照此说明在我的 EKS 集群https://cert-manager.io/docs/tutorials/acme/ingress/上设置了一个证书管理器。
这是我的入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "letsencrypt-staging"
spec:
tls:
- hosts:
- '*.test.com'
secretName: test-tls
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test-service
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
这里是发行人。我刚刚从说明中复制了配置
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: info@test.com
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: nginx
Run Code Online (Sandbox Code Playgroud)
部署后发现证书就绪状态为false
kubectl get certificate
NAME READY SECRET AGE
test-tls False test-tls 2m45s
Run Code Online (Sandbox Code Playgroud)
然后我按照此进行故障排除https://cert-manager.io/docs/faq/troubleshooting/
我跑了kubectl describe certificaterequest <request name>,发现错误Waiting on certificate issuance from order test-tls-xxx: "pending"
然后运行kubectl describe order test-tls-xxx,发现错误
Warning Solver 20m cert-manager Failed to determine a valid solver configuration for the set of domains on the Order: no configured challenge solvers can be used for this challenge。
知道为什么它无法确定有效的求解器吗?如何测试求解器是否正常工作?
cluster issuer由于您正在使用暂存 URL 来验证图像,因此它不起作用。
请尝试使用生产 URL。
这是 Clusterissuer 和 ingress YAML 的简单且正确的示例(请注意,您正在尝试使用 staging API https://acme-staging-v02.api.letsencrypt.org/directory如果可能,请使用生产服务器地址,以便它可以与所有浏览器)
例子:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: cluster-issuer-name
namespace: development
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: harsh@example.com
privateKeySecretRef:
name: secret-name
solvers:
- http01:
ingress:
class: nginx-class-name
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx-class-name
cert-manager.io/cluster-issuer: cluster-issuer-name
nginx.ingress.kubernetes.io/rewrite-target: /
name: example-ingress
spec:
rules:
- host: sub.example.com
http:
paths:
- path: /api
backend:
serviceName: service-name
servicePort: 80
tls:
- hosts:
- sub.example.com
secretName: secret-name
Run Code Online (Sandbox Code Playgroud)
注意:当您再次尝试时,请先尝试删除旧对象,例如 ingress、Clusterissuer。
发行者与集群发行者
颁发者是命名空间资源,不可能从不同命名空间中的颁发者颁发证书。这意味着您需要在您希望获取证书的每个命名空间中创建一个颁发者。
如果要创建可在多个命名空间中使用的单个 Issuer,则应考虑创建 ClusterIssuer 资源。这与颁发者资源几乎相同,但它是非命名空间的,因此可用于跨所有命名空间颁发证书。
参考: https: //cert-manager.io/docs/concepts/issuer/
通配符证书
您可以根据要求使用,如果您使用的是发行者,您可以更新入口 注释行,例如
cert-manager.io/issuer: issuer-name
Run Code Online (Sandbox Code Playgroud)
如果您尝试获取通配符 *证书,您将无法使用HTTP 身份验证方法获取它
solvers:
- http01:
ingress:
class: nginx-class-name
Run Code Online (Sandbox Code Playgroud)
相反,您必须使用通配符证书的DNS 身份验证方法。
solvers:
- dns01:
cloudDNS:
project: my-project
serviceAccountSecretRef:
name: prod-clouddns-svc-acct-secret
key: service-account.json
Run Code Online (Sandbox Code Playgroud)
了解更多信息: https: //cert-manager.io/docs/configuration/acme/dns01/
参考文章获取通配符证书:https://medium.com/@harsh.manvar111/wild-card-certificate-using-cert-manager-in-kubernetes-3406b042d5a2
| 归档时间: |
|
| 查看次数: |
8066 次 |
| 最近记录: |