首先确保你有一个通配符证书,继续看看它是如何使用 certbot 完成的:
https://certbot.eff.org/glossary#wildcard-certificate
对于子子域,您必须在创建证书时指定子域,例如:
user$: certbot certonly --manual \
--preferred-challenges=dns \
--email your-email@gmil.com \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
-d '*.level.domain.com' -d '*.domain.com' -d domain.com
那么您必须进行 dns 质询以验证它是您的域。
使用 certbot "* . * .example.com" 无效,我不知道它是否可能与任何其他证书颁发机构一起使用,但如果您希望这是动态的,您最好使用 kubernetes 证书管理器在当场颁发证书入口规则已创建。
您可以使用以下命令添加 --default-ssl-certificate:
kubectl 编辑部署 ingress-nginx-controller
然后将其添加到 spec.template.spec.containers.args 下
如果您想拥有一个证书。总之,在通过 dns 挑战并获取 .pem 文件后,首先创建一个 tls 机密:
apiVersion: v1
kind: Secret
metadata:
name: tls-secret
data:
# fullchain.pem converted to base64 (all 3 certificates dont remove line breaks before converting)
tls.crt: "LS0tLS1CRUdJTiBQLS0tLS1CRUdJTiBQ.......BTkJna3Foa2lHOXcwQkF=="
# privekey.pem converted to base64 (dont remove line breaks before converting)
tls.key: "LS0tLS1CRUd.......XcwQkFRRUZBQVN=="
type: kubernetes.io/tls
然后使用 tls 创建一个入口规则:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
#ingress-nginx-controller has to be installed/created
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: sub.domain.com
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: http-svc
port:
number: 8080
tls:
- hosts:
- sub.domain.com
secretName: tls-secret