开发者社区> kevin_牛> 正文

使用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中的域名验证

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
OSS访问域名使用规则
OSS域名构成规则 针对OSS的网络请求,除了GetService这个API以外,其他所有请求的域名都是带有指定Bucket信息的三级域名组成的。 访问域名规则:BucketName.Endpoint。
8088 0
使用DNS基准工具优化域名服务器性能
通常情况下,对于dns域名服务器来说,性能和时序方面出现的问题都是由可疑的查询结果造成的。这种情况下,无论dns是否进行了解析,造成的后果都是相同的。
847 0
使用 Replication Manager 迁移到CDP 私有云基础
Replication Manager 可用于将 Hive、Impala 和 HDFS 工作负载迁移到 CDP私有云基础.
44 0
证书转换-SSL证书生成:cer,jks文件 韩俊强的博客
一.生成.jks文件 资料:HTTPS-老司机手把手教你SSL证书申购-TrustAsia证书 HTTPS时代已来,手把手指导申请免费SSL证书 1、keystore的生成: 分阶段生成: keytool -genkey -alias yushan(...
5526 0
阿里云湖北授权服务中心分享如何配置安全组
最近发现大家会问为什么通过SSH无法连接服务器?还有刚购买的云服务器都配置好了,网站却不开是什么原因?那么导致这些问题的原因是什么呢?今天阿里云湖北授权服务中心捷讯技术的小编跟大家一起学习下安全组这个知识。这也是很多新手刚开始接触云服务器时都可能会面对的问题。
1852 0
RocketMQ阿里云跨账户授权访问示例
使用企业A的阿里云账号(主账号)创建RAM角色并为该角色授权,并将该角色赋予企业B,即可实现使用企业B的RAM用户(子账号)访问企业A的阿里云资源的目的。本文主要演示相关策略的配置以及Code实现。
665 0
RedisManager使用手册(五)-- 自定义Redis安装包
RedisManager物理机安装包的构建和Docker镜像的构建
1470 0
+关注
1
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载