使用cert-manager给阿里云的DNS域名授权SSL证书

简介: 背景介绍cert-manager是Kubernetes上一个管理SSL证书的插件,配合nginx-ingress可以对网站配置https访问,在加上letsencrypt提供免费的SSL证书,所有就产生了cert-manager+nginx-ingress+letsencrypt的免费套餐。

背景介绍
cert-manager是Kubernetes上一个管理SSL证书的插件,配合nginx-ingress可以对网站配置https访问,在加上letsencrypt提供免费的SSL证书,所有就产生了cert-manager+nginx-ingress+letsencrypt的免费套餐。 但是cert-manager默认是不支持阿里云的DNS的,需要自己编写webhook,借助网上大神编写的webhook,自己修改后用于本篇文章使用
环境准备
Kubernetes 1.12.1+
nginx-ingress(必须能够有公网IP,不然DNS认证过不了),阿里云的Kubernetes集群已经提供这个功能
cert-manager
阿里云DNS(已经备案,如果没有备案www是打不开的)
部署大致步骤
一. 在Kubernetes上安装cert-manager
二. 安装alidns的webhook
三. 配置Issuer
四. 配置Ingress

一 K8S上安装cert-manager

$ kubectl create namespace cert-manager
$ kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
如果是1.12或者以下的k8s集群,需要添加--validate=false,我的集群就需要添加
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v0.10.0/cert-manager.yaml --validate=false
$ kubectl get po  -n cert-manager

NAME                                           READY     STATUS    RESTARTS   AGE
cert-manager-78d674b8b5-wfqh4                  1/1       Running   0          3h39m
cert-manager-cainjector-664bb64c66-9h9sc       1/1       Running   0          3h39m
cert-manager-webhook-9c6fd5f7f-tz2gj           1/1       Running   0          3h39m
#验证cert-manager
$ cat <<EOF > test-resources.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: cert-manager-test
---
apiVersion: certmanager.k8s.io/v1alpha1
kind: Issuer
metadata:
  name: test-selfsigned
  namespace: cert-manager-test
spec:
  selfSigned: {}
---
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  name: selfsigned-cert
  namespace: cert-manager-test
spec:
  commonName: example.com
  secretName: selfsigned-cert-tls
  issuerRef:
    name: test-selfsigned
EOF
$ kubectl apply -f test-resources.yaml
$ kubectl describe certificate -n cert-manager-test , 最后一行看到Certificate issued successfully,就代表安装成功
Events:
  Type    Reason      Age   From          Message
  ----    ------      ----  ----          -------
  Normal  CertIssued  4s    cert-manager  Certificate issued successfully
$ kubectl delete -f test-resources.yaml

二 安装alidns的webhook

   $ git clone https://github.com/kevinniu666/cert-manager-webhook-alidns.git
   $ cd cert-manager-webhook-alidns
   $ helm install --name cert-manager-webhook-alidns --namespace=cert-manager ./deploy/webhook-alidns
   #查看webhook
   $ kubectl get po -n cert-manager
   NAME                                           READY     STATUS    RESTARTS   AGE
cert-manager-78d674b8b5-wfqh4                  1/1       Running   0          3h50m
cert-manager-cainjector-664bb64c66-9h9sc       1/1       Running   0          3h50m
cert-manager-webhook-9c6fd5f7f-tz2gj           1/1       Running   0          3h50m
cert-manager-webhook-alidns-6f9695b7c4-cmdwz   1/1       Running   0          65m

三 配置Issuer

   #cert-manager有两种issuer,Issuer和ClusterIssuer,区别就是Role和ClusterRole的区别吧(自己理解的)
   #通过阿里云RAM创建一个账号,并授权DNSFullAccess权限,将账号的AK记下来,并通过下面的命令创建secret,这个secret用于webhook在DNS认证的时候,会向DNS解析里面写入一条txt类型的记录,认证完成后删除.如果要在一个cert-manager配置多个在不同阿里云账号下的DNS,后面有说明,主要是ClusterRole要改一下。
   $ kubectl -n cert-manager create secret generic alidns-credentials --from-literal=accessKeySecret='evNH0A***fONnnTy2r'
   $ kubectl apply -f letsencrypt-clusterissuer.yaml #这个文件里面就引用了刚刚创建的secret,AK的ID是直接输入的,也可以把ID放在secret里面,然后应用。
   $ kubectl get clusterissuer
NAME                            AGE
letsencrypt-prod                1h

四 配置ingress

 $ kubectl apply -f ingress.yaml , 这里面加入了cluster-issuer的注解,cert-manager会自动根据域名去创建certificate,order,challenge等
 $ kubectl get ing 
NAME                HOSTS                 ADDRESS          PORTS     AGE
demo-ingress        cert.****.com   1**.2*.164.22*   80, 443   70m
$ kubectl get certificate, REDAY是True就代表证书从letsencrypt下发成功了。
NAME                 READY     SECRET               AGE
da***-com-tls        True      da**-com-tls   1h
#如果是false,看看challenge状态,dns的验证需要等一会,为了让txt记录生效
$ kubectl get challenge
NAME                            STATE     DOMAIN         AGE
**-tls-2231756264-0             pending   ***.com   5m
$ kubectl describe challenge ***-tls-2231756264-0 ,成功后会有如下的提示,challenge在成功验证后会被自动删除
....
  Normal   Presented     28s              cert-manager  Presented challenge using dns-01 challenge mechani

五 打开浏览器,访问ingress里面的地址

PS:对于不同阿里云账号下的域名,需要创建不同的ClusterIssuer然后分别应用不同的secret,在ingress创建的时候,注解也需要引用响应的issuer.

$ kubectl -n cert-manager create secret generic alidns-credentials-2 --from-literal=accessKeySecret='evNH*****fONnnTy2r'

$ kubectl apply -f letsencrypt-clusterissuer-2.yaml

$ kubectl apply -f ingress-2.yaml

$ kubectl edit clusterrole cert-manager-webhook-alidns:secret-reader #将刚刚创建的secret加入到resourceNames里面

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: 2019-09-18T07:31:41Z
  name: cert-manager-webhook-alidns:secret-reader
  resourceVersion: "100733766"
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/cert-manager-webhook-alidns%3Asecret-reader
  uid: 5bcdb127-d9e6-11e9-bd87-00163e08a2e5
rules:
- apiGroups:
  - ""
  resourceNames:
  - alidns-credentials-2
  - alidns-credentials
  resources:
  - secrets
  verbs:
  - get
  - watch

访问ingress-2中的域名验证

目录
相关文章
|
9月前
|
网络协议 应用服务中间件 网络安全
阿里云免费版SSL证书申请及部署按照流程,白嫖阿里云20张SSL证书
阿里云提供免费SSL证书,品牌为DigiCert,单域名证书每账号可申领20张,有效期3个月。通过数字证书控制台申请,支持DNS验证,审核通过后可下载多种格式证书,适用于Nginx、Apache等服务器,轻松实现网站HTTPS加密。
1221 9
|
9月前
|
网络协议 应用服务中间件 网络安全
阿里云ssl证书申请具体操作流程图,2025年新手图文教程
2025年阿里云SSL免费证书申请图文教程:通过数字证书管理控制台,申请Digicert品牌单域名免费证书,每账号可领20张,有效期3个月。流程包括登录控制台、购买免费证书、创建证书、DNS验证(TXT记录)、审核及下载,支持Nginx、Tomcat等多格式证书,全程免费,操作简单。
|
9月前
|
网络协议 应用服务中间件 网络安全
阿里云SSL证书申请具体操作流程,以申请免费SSL证书为例
阿里云免费SSL证书由Digicert提供,单域名可申请20张,有效期3个月。通过数字证书管理控制台,完成购买、域名验证(DNS或文件)、提交审核后下载,支持Nginx、Apache等多服务器格式。
1453 0
|
10月前
|
安全 数据建模 网络安全
阿里云SSL证书价格一年多少钱?单域名和通配符SSL证书收费价格表
阿里云SSL证书提供免费及多种付费选择,免费版为DigiCert品牌,有效期3个月。付费证书涵盖DV、OV、EV类型,支持DigiCert、GlobalSign等品牌,价格从238元至万元不等,满足不同网站安全需求。
1208 0
|
10月前
|
安全 数据建模 网络安全
阿里云申请SSL证书价格多少钱一年?免费版和付费版手动整理
阿里云SSL证书提供免费及多种付费选择,免费版为Digicert品牌,有效期3个月。付费证书涵盖DV、OV、EV类型,品牌包括DigiCert、GlobalSign等,价格从238元至万元不等,满足不同网站安全需求。
697 0
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
930 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1520 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
599 4
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章

推荐镜像

更多
  • DNS