使用cert-manager给阿里云的DNS域名授权SSL证书
背景介绍
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证书相关推荐
- 阿里云配置https,配置SSL证书
官方教程 SSL证书操作指南 - 数字证书管理服务 - 阿里云 nginx配置ssl教程 在Nginx或Tengine服务器上安装证书 - 数字证书管理服务 - 阿里云 server {listen ...
- 阿里云添加DNS API 的accesskey
阿里云添加DNS API 的accesskey 进入阿里云,在左侧栏搜索 "访问控制",然后来到访问控制界面,如果没有开通,直接开通就OK, 然后在进入用户管理->新建用户( ...
- 云服务器修改dns服务器为阿里云公共dns服务器
为什么要切换使用阿里云的公共dns服务器呢? 为什么修改云服务器的DNS呢,这样是为了更好的提升网站解析能力,从而提升网站打开的速度.我用的就是阿里云默认的公共DNS服务器(223.5.5.5.223 ...
- 内部名称解析设置阿里云私有 DNS 区域,针对于阿里云国际版经验教程
什么是阿里云 DNS? 阿里云 DNS 是一种安全.快速.可靠的 DNS 服务.阿里云 DNS 可以接收 100% 的 SLA,确保应用程序随时准备好为全球流量提供服务.该服务还利用全球部署的节点来确 ...
- 阿里云添加二级域名及生成免费ssl证书
阿里云添加二级域名及生成免费ssl证书 一.问题背景 app上架需要绑定域名进行解析,需要提供域名及对应的ssl证书 二.解决方案 1.公司已有域名,生成二级域名和免费ssl证书提供 三.具体操作 1 ...
- 阿里云服务器解析域名,所引起的服务器IP地址无法访问的问题——已解决
文章目录 一.问题的起因: 二.问题的分析: 三.解决:新建ip站点 一.问题的起因: 作为服务器小白,我在阿里云购买了服务器之后,公网IP是可以访问的.默认显示: 在购买域名并解析后,五分钟内也可访 ...
- 阿里云虚拟机多域名配置
阿里云虚拟机多域名配置 在根目录中创建文件 .htaccess # .htaccess RewriteCond %{HTTP_HOST} ^(www.)?HOSTNAME1.com$ RewriteR ...
- 在阿里云买的域名,如何下载该域名下的域名证书?
域名证书上记录了域名的所有者是谁,以及域名什么时候到期.那么为什么要下载域名证书?域名证书一般有两个主要用处,一是用于域名过户,二是用于域名备案,接下来教大家如何在阿里云上下载域名证书. 1.首先在百 ...
- 阿里云备案一般要多久时间?快速通过阿里云APP进行域名备案方法
如何通过阿里云APP进行域名备案? 1.准备备案材料(很多初次使用阿里云APP进行备案的同学会问备案需要准备哪些资料,不二版本下面就给大家一一列举出来) 个人备案需要材料: ⑴<用户网站备案授权 ...
最新文章
- Ansible源码解析 Inventory组概念
- C3P0-数据库连接池解读
- RXThink 官方网站正式上线
- openMP学习笔记(一)
- 企业微信_H5应用如何本地及真机调试_host配置及代理相关
- html5 canvas系列教程-像素操作(反色,黑白,亮度,复古,蒙版,透明)
- R语言如何处理数据的列中存在多个元素的问题
- 零知识证明在匿名投票中的应用
- CAD2010 64 位 安装后打开就卡死 解决方案
- Octotree访问私有仓库:Error: Private repository
- ubuntu 中的流程图绘制软件
- raft算法 java_raft-java首页、文档和下载 - 分布式一致性算法 Raft 的 Java 实现 - OSCHINA - 中文开源技术交流社区...
- Linux系统安装Mediawiki
- word 方框打勾_复制拿走即用
- 超级马里奥游戏开发一(游戏基本界面)
- 中国的三种特色团购创新模式
- java计算机毕业设计技术的游戏交易平台源程序+mysql+系统+lw文档+远程调试
- tomcat原理简要分析,java
- jswebApi 03
- java的三种代码注释方式
热门文章
- Mac的3个个性化设置,你值得拥有!
- 基于Cesium的火箭发射演示
- linux nslcd服务,redhat – sssd vs nslcd for RHEL-5/6
- 用户头像的背景为头像的模糊头像时候
- 武林三国辅助工具介绍
- 现如今社群乱象,社群玩法正解
- MySQL充电_mysql语法充电
- 英文文章写作|文献管理|​​​​​​​阅读文献|引用文献|国内文章
- vue中EventBus的实现原理
- 利用javascript实现表格数据自动从剪贴板录入