【发布时间】:2020-03-15 03:05:52
【问题描述】:
深入www,没有找到答案: 我想知道如何将 cert-manager 与 haproxy-ingress 一起使用并进行加密。
任何文档/指南?
【问题讨论】:
标签: kubernetes lets-encrypt haproxy-ingress
深入www,没有找到答案: 我想知道如何将 cert-manager 与 haproxy-ingress 一起使用并进行加密。
任何文档/指南?
【问题讨论】:
标签: kubernetes lets-encrypt haproxy-ingress
您可以尝试安装 jetstack 提供的证书管理器,可以在 here 找到,然后您需要按照此 stackoverflow post 中提到的步骤进行操作,这将为您解决问题。
内部 acme-challenge 将由证书管理器完成,一旦您将证书中提到的密钥名称修补到入口的 TLS,然后证书状态将变为就绪状态,请注意,密钥将自动创建,您需要不创建它
【讨论】:
使用部署 Certmanager:
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.yaml
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.crds.yaml
部署 ClusterIssuer(集群发布者与命名空间无关)
cat > prod-issuer.yaml <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: email@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: haproxy
EOF
使用kubectl apply -f prod-issuer.yaml申请集群发行者
cat > nginx-ingress.yaml <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-router
namespace: production
annotations:
kubernetes.io/ingress.class: "haproxy"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- "example.com"
secretName: nginx-tls-secret
rules:
- host: example.com
http:
paths:
- pathType: ImplementationSpecific
path: "/"
backend:
service:
name: nginx
port:
number: 80
- host: www.example.com
http:
paths:
- pathType: ImplementationSpecific
path: "/"
backend:
service:
name: nginx
port:
number: 80
EOF
使用kubectl apply -f nginx-ingress.yaml应用入口资源
这里的重要信息是,Haproxy 控制器不需要注释 acme.cert-manager.io/http01-edit-in-place: "true"
那个 nginx-ingress 控制器。它按预期工作,没有任何额外的注释。
当您将 Ingress Resource 应用到集群时,证书将在 1-2 分钟内颁发。
使用kubectl describe certificate nginx-tls-secret -n production查看证书状态,查看事件获取证书。
如果出现问题,有关更多调试信息,请参阅此处https://cert-manager.io/docs/faq/acme/
【讨论】: