前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TKE/EKS集群使用cert-manager申请免费的HTTPS证书

TKE/EKS集群使用cert-manager申请免费的HTTPS证书

原创
作者头像
聂伟星
发布2023-12-16 20:49:19
2630
发布2023-12-16 20:49:19
举报

cert-manager是一个云原生证书管理开源工具,用于在Kubernetes集群中提供HTTPS证书并自动续期。以下示例介绍了如何使用cert-manager给nginx ingress申请免费证书并自动续期。

本次部署是基于eks集群,tke集群也可同样的方式进行操作。

1. 安装cert-manager

可以执行下面命令部署cert-manager到集群

代码语言:shell
复制
wget https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml
sed -i 's/quay.io\/jetstack/ccr.ccs.tencentyun.com\/niewx-k8s/g' cert-manager.yaml
kubectl apply -f cert-manager.yaml

2. 安装nginx ingress

集群内安装nginx ingress可以参考文档/document/product/457/50503

nginx实例有创建成功后,会生成一个的clb,然后自行在域名解析将业务域名解析到这个clb的vip上。

3. 创建ClusterIssuer对象

然后我们执行下面命令创建下ClusterIssuer

代码语言:shell
复制
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-weixnie-nginx-ingress-wushan
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: xxxx # 替换为您的邮箱名。
    privateKeySecretRef:
      name: letsencrypt-http01
    solvers:
    - http01: 
        ingress:
          class: weixnie-nginx-ingress-wushan
EOF

这里需要注意下,class这里需要和对应的nginx ingress class一样,比如我的nginx ingress class就是weixnie-nginx-ingress-wushan。

如果这里配置没有对应好,后续在ingress指定ClusterIssuer申请证书的时候,证书会创建不成功,cert-manager日志会一直报如下错。

代码语言:text
复制
I1216 08:36:12.216121       1 pod.go:59] "cert-manager/challenges/http01/selfCheck/http01/ensurePod: found one existing HTTP01 solver pod" resource_name="ingress-tls-1-3233249396-374266583" resource_namespace="weixnie" resource_kind="Challenge" resource_version="v1" dnsName="nginx.tke.niewx.cn" type="HTTP-01" related_resource_name="cm-acme-http-solver-fmqg6" related_resource_namespace="weixnie" related_resource_kind="" related_resource_version=""
I1216 08:36:12.216179       1 service.go:45] "cert-manager/challenges/http01/selfCheck/http01/ensureService: found one existing HTTP01 solver Service for challenge resource" resource_name="ingress-tls-1-3233249396-374266583" resource_namespace="weixnie" resource_kind="Challenge" resource_version="v1" dnsName="nginx.tke.niewx.cn" type="HTTP-01" related_resource_name="cm-acme-http-solver-s9gvr" related_resource_namespace="weixnie" related_resource_kind="" related_resource_version=""
I1216 08:36:12.216228       1 ingress.go:99] "cert-manager/challenges/http01/selfCheck/http01/ensureIngress: found one existing HTTP01 solver ingress" resource_name="ingress-tls-1-3233249396-374266583" resource_namespace="weixnie" resource_kind="Challenge" resource_version="v1" dnsName="nginx.tke.niewx.cn" type="HTTP-01" related_resource_name="cm-acme-http-solver-n5tfr" related_resource_namespace="weixnie" related_resource_kind="Ingress" related_resource_version="v1"
E1216 08:36:12.655730       1 sync.go:190] "cert-manager/challenges: propagation check failed" err="wrong status code '404', expected '200'" resource_name="ingress-tls-1-3233249396-374266583" resource_namespace="weixnie" resource_kind="Challenge" resource_version="v1" dnsName="nginx.tke.niewx.cn" type="HTTP-01"

你的集群如果有多个nginx ingress实例,那就配置多个ClusterIssuer对象,注意class配置和nginx ingress实例对应好即可。

4. 配置ingress申请免费证书

这里我们提前部署了一个测试的nginx deploy和svc,通过下面命令创建下ingress

代码语言:shell
复制
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-weixnie-nginx-ingress-wushan
    kubernetes.io/ingress.class: weixnie-nginx-ingress-wushan
  name: cert-demo-ingress
  namespace: weixnie
spec:
  rules:
  - host: nginx.tke.niewx.cn
    http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - nginx.tke.niewx.cn
    secretName: ingress-tls
EOF

因为我的测试版本比较多,ingress的api版本是networking.k8s.io/v1beta1,如果是高版本的话,需要改下api版本为networking.k8s.io/v1。

这里需要在ingress加上下面这个注解,对应的ClusterIssuer名称就是上一步我们创建的。

代码语言:text
复制
cert-manager.io/cluster-issuer: letsencrypt-weixnie-nginx-ingress-wushan

看证书是否创建成功,如果READY状态为True,则说明证书创建成功

代码语言:shell
复制
# k get cert -n weixnie
NAME          READY   SECRET        AGE
ingress-tls   True    ingress-tls   24h

5. 测试https访问服务

ingress创建正常,证书正常生成后,这里可以浏览器https访问下域名,看看证书是否有效

浏览器https访问域名证书有效,这里通过cert-manager申请给nginx ingress域名自动申请证书成功。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 安装cert-manager
  • 2. 安装nginx ingress
  • 3. 创建ClusterIssuer对象
  • 4. 配置ingress申请免费证书
  • 5. 测试https访问服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com