问题描述
当我们在 Kubernetes Cluster 中部署 cert-manager 之后,便能够在 Ingress 中使用 cert-manager 提供 TLS 证书。
该笔记将记录:在 Kubernetes Cluster 中,如何配置 Ingress 使用 cert-manager 来提供 TLS 证书。
解决方案
第一步、部署 Web 应用
我们需要部署简单的 Web 应用,来作为实验环境。后面的操作将基于该 Web 应用,这里不再深入展开 Web 应用的部署。
第二步、修改 Ingress 资源
我们需要做的便是修改 Ingress 资源:
cp -v myweb-ingress.yaml myweb-ingress.yaml.backup cat > myweb-ingress.yaml <<EOF apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: myweb-ingress annotations: kubernetes.io/ingress.class: "nginx" # 修改此处,添加 Issuer 或 ClusterIssuer 定义 cert-manager.io/cluster-issuer: "letsencrypt" # 根据自己的 ClusterIssuser 定义来填写 spec: # 添加 TLS 配置 tls: - hosts: - k8s-ingress.example.xyz # cert-manager 将使用该字符串作为 Secret 名称 secretName: myk8singress-cert rules: - host: "k8s-ingress.example.xyz" http: paths: - path: / backend: serviceName: myweb servicePort: 8080 EOF kubectl apply -f ./myweb-ingress.yaml
如果需要使用泛域名证书,则配置:
spec: tls: - hosts: - *.example.xyz secretName: myk8singress-cert # 在官方文档中,我们没有找到相关的配置说明 # 但是,既然 Cert Manager 能够根据 Ingress 创建对应的 Certificate,那么我们猜测 Cert Manager 借助 tls.hosts 字段 # 经过测试,该方式是生效的;
第三步、检查 TLS 证书的签发
检查 TLS 证书是否自动申请(即创建 CertificaterRequests 资源,并成功签发):
# kubectl get certificaterequests.cert-manager.io myk8singress-cert-whtzp NAME APPROVED DENIED READY ISSUER REQUESTOR AGE myk8singress-cert-whtzp True True letsencrypt system:serviceaccount:cert-manager:cert-manager 84s # kubectl describe certificates.cert-manager.io myk8singress-cert ... Not After: 2021-08-05T10:46:37Z Not Before: 2021-05-07T10:46:37Z Renewal Time: 2021-07-06T10:46:37Z Revision: 1 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Issuing 4m1s cert-manager Issuing certificate as Secret does not exist Normal Generated 4m1s cert-manager Stored new private key in temporary Secret resource "myk8singress-cert-p25hl" Normal Requested 4m1s cert-manager Created new CertificateRequest resource "myk8singress-cert-whtzp" Normal Issuing 2m42s cert-manager The certificate has been successfully issued
第四步、访问站点,验证 HTTPS 生效
# curl https://k8s-ingress.example.xyz
参考文献
Securing Ingress Resources | cert-manager