背景介绍
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-selfsignednamespace: cert-manager-test
spec:selfSigned: {}
---
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:name: selfsigned-certnamespace: cert-manager-test
spec:commonName: example.comsecretName: selfsigned-cert-tlsissuerRef: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中的域名验证

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

  1. 阿里云配置https,配置SSL证书

    官方教程 SSL证书操作指南 - 数字证书管理服务 - 阿里云 nginx配置ssl教程 在Nginx或Tengine服务器上安装证书 - 数字证书管理服务 - 阿里云 server {listen ...

  2. 阿里云添加DNS API 的accesskey

    阿里云添加DNS API 的accesskey 进入阿里云,在左侧栏搜索 "访问控制",然后来到访问控制界面,如果没有开通,直接开通就OK, 然后在进入用户管理->新建用户( ...

  3. 云服务器修改dns服务器为阿里云公共dns服务器

    为什么要切换使用阿里云的公共dns服务器呢? 为什么修改云服务器的DNS呢,这样是为了更好的提升网站解析能力,从而提升网站打开的速度.我用的就是阿里云默认的公共DNS服务器(223.5.5.5.223 ...

  4. 内部名称解析设置阿里云私有 DNS 区域,针对于阿里云国际版经验教程

    什么是阿里云 DNS? 阿里云 DNS 是一种安全.快速.可靠的 DNS 服务.阿里云 DNS 可以接收 100% 的 SLA,确保应用程序随时准备好为全球流量提供服务.该服务还利用全球部署的节点来确 ...

  5. 阿里云添加二级域名及生成免费ssl证书

    阿里云添加二级域名及生成免费ssl证书 一.问题背景 app上架需要绑定域名进行解析,需要提供域名及对应的ssl证书 二.解决方案 1.公司已有域名,生成二级域名和免费ssl证书提供 三.具体操作 1 ...

  6. 阿里云服务器解析域名,所引起的服务器IP地址无法访问的问题——已解决

    文章目录 一.问题的起因: 二.问题的分析: 三.解决:新建ip站点 一.问题的起因: 作为服务器小白,我在阿里云购买了服务器之后,公网IP是可以访问的.默认显示: 在购买域名并解析后,五分钟内也可访 ...

  7. 阿里云虚拟机多域名配置

    阿里云虚拟机多域名配置 在根目录中创建文件 .htaccess # .htaccess RewriteCond %{HTTP_HOST} ^(www.)?HOSTNAME1.com$ RewriteR ...

  8. 在阿里云买的域名,如何下载该域名下的域名证书?

    域名证书上记录了域名的所有者是谁,以及域名什么时候到期.那么为什么要下载域名证书?域名证书一般有两个主要用处,一是用于域名过户,二是用于域名备案,接下来教大家如何在阿里云上下载域名证书. 1.首先在百 ...

  9. 阿里云备案一般要多久时间?快速通过阿里云APP进行域名备案方法

    如何通过阿里云APP进行域名备案? 1.准备备案材料(很多初次使用阿里云APP进行备案的同学会问备案需要准备哪些资料,不二版本下面就给大家一一列举出来) 个人备案需要材料: ⑴<用户网站备案授权 ...

最新文章

  1. Ansible源码解析 Inventory组概念
  2. C3P0-数据库连接池解读
  3. RXThink 官方网站正式上线
  4. openMP学习笔记(一)
  5. 企业微信_H5应用如何本地及真机调试_host配置及代理相关
  6. html5 canvas系列教程-像素操作(反色,黑白,亮度,复古,蒙版,透明)
  7. R语言如何处理数据的列中存在多个元素的问题
  8. 零知识证明在匿名投票中的应用
  9. CAD2010 64 位 安装后打开就卡死 解决方案
  10. Octotree访问私有仓库:Error: Private repository
  11. ubuntu 中的流程图绘制软件
  12. raft算法 java_raft-java首页、文档和下载 - 分布式一致性算法 Raft 的 Java 实现 - OSCHINA - 中文开源技术交流社区...
  13. Linux系统安装Mediawiki
  14. word 方框打勾_复制拿走即用
  15. 超级马里奥游戏开发一(游戏基本界面)
  16. 中国的三种特色团购创新模式
  17. java计算机毕业设计技术的游戏交易平台源程序+mysql+系统+lw文档+远程调试
  18. tomcat原理简要分析,java
  19. jswebApi 03
  20. java的三种代码注释方式

热门文章

  1. Mac的3个个性化设置,你值得拥有!
  2. 基于Cesium的火箭发射演示
  3. linux nslcd服务,redhat – sssd vs nslcd for RHEL-5/6
  4. 用户头像的背景为头像的模糊头像时候
  5. 武林三国辅助工具介绍
  6. 现如今社群乱象,社群玩法正解
  7. MySQL充电_mysql语法充电
  8. 英文文章写作|文献管理|​​​​​​​阅读文献|引用文献|国内文章
  9. vue中EventBus的实现原理
  10. 利用javascript实现表格数据自动从剪贴板录入