istio + cert-manager 实现免费https

本文主要介绍怎么使用istio+cert-manager+istio-gatewayingress+Virtual service实现 Let’s Encrypt 获取 TLS https免费证书

安装cert-manager

其实istio也有cert-manager 安装时直接开启也可以使用,我这里使用了最新版本所以自己安装了

helm repo add jetstack https://charts.jetstack.io
kubectl apply \
    -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/00-crds.yaml
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation="true"

helm install --name cert-manager --namespace  cert-manage jetstack/cert-manager --version v0.7.0

参考链接:https://hub.helm.sh/charts/jetstack/cert-manager/v0.7.0

安装istio

这里我采用的是先默认安装istio,然后在更新配置成自己想要的配置

  • 默认安装
helm install install/kubernetes/helm/istio \
--name istio --namespace \
istio-system
  • 更新(开启sds)
    这里和https相关的参数主要是 gateways.istio-ingressgateway.sds.enabled=true,此配置是开启了证书自动发现
    下面是我的配置
helm upgrade  istio  install/kubernetes/helm/istio  --namespace istio-system \
--set gateways.istio-ingressgateway.type=NodePort \
--set gateways.istio-egressgateway.type=NodePort \
--set ingress.service.type=NodePort \
--set grafana.enabled=true  \
--set kiali.enabled=true  \
--set tracing.enabled=true \
--set pilot.traceSampling=100.0 \
--set gateways.istio-ingressgateway.sds.enabled=true

参考连接:https://istio.io/zh/docs/setup/kubernetes/install/helm/

DNS解析

需要把想要https的域名做DNS A记录解析,最终能访问到istio-gateway上所配置的域名即可

创建istio配置

  • 创建Gateway
    注意credentialName 代表是cert-manager 生成证书的名称
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: mytest1  #namespace: istio-system
spec:  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - "mytest1.xxx.com"
    port:
      name: http
      number: 80
      protocol: HTTP
    #tls:
    #  httpsRedirect: true
  - hosts:
    - mytest1.xxx.com
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      credentialName: mytest1.xxx.com
      mode: SIMPLE
      privateKey: sds
      serverCertificate: sds
  • 创建VirtualService
    prefix: "/.well-known/" 这个地方是配置VirtualService 路由到cert-manager创建的校验的pod上,(主要是为了证明域名是不是你的)
    host: cm-acme-http-solver-cert.istio-system.svc.cluster.local
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mytest1
  #namespace: istio-system
spec:
  gateways:
  - mytest1
  hosts:
  - mytest1.xxx.com
  http:
  - match:
    - uri:
        prefix: "/.well-known/"
    route:
    - destination:
        host: cm-acme-http-solver-cert.istio-system.svc.cluster.local
        port:
          number: 8089

创建ClusterIssuer

这个只需要创建一次,以后可以直接调用即可

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: shancang.chen@xxx.com
    privateKeySecretRef:
      name: letsencrypt-prod
    http01: {}

创建证书(Certificate)

apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
  annotations:
  name: mytest1
  namespace: istio-system #这里必须是istio-system 空间(目前是这样子的)
spec:
  acme:
    config:
    - domains:
      - mytest1.xxx.com #要配置https的域名(支持多个域名)
      http01:
        ingressClass: none
  dnsNames:
  - mytest1.xxx.com #要配置https的域名(支持多个域名)
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-prod  #这里是上面创建的ClusterIssuer
  secretName: mytest1.xxx.com #这个就是上面gateway所配置的证书名称

这时候查看istio-system 空间应该会有一个cm-acme-http-solver-这个开头的pod,svc,ingress,
接下里两种做法,一种是将VirtualService 中的cm-acme-http-solver-cert 替换成svc的名称,另一中是 创建一个新的svc来指向cert-manager生产的校验pod

生产新的额svc

 kubectl -n istio-system get svc $(kubectl -n istio-system get svc | grep -v cert|grep cm-acme-http-solver | awk '{print $1}'
) -o yaml  |sed "/publicEndpoints/d" | sed "s/cm-acme-http-solver-\(.*\)/cm-acme-http-solver-cert/g" | sed "/selfLink/d"| sed
 "/crea/d"| sed "/IP/d"| sed "/nodePort/d"|sed "/uid/d"| sed "/generateName/d"| sed "/ownerReferences/,/resourceVersion/d" |
sed "/externalTraffi/d"|sed "/annota/,/auth/d"|sed "/status/,/loadBalancer/d"|sed "/sessionA/d"

检查是否颁发证书

  • 可以看cert-manager日志
  • 查看isito-system 空间的kubectl -n istio-system get secrets mytest1.xxx.xyz -o yaml
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 图文:静静地白莲 暖冬艳阳骄,碧空洗悴憔, 逐日光影幻,风清云离霄。 拂戏娇娥面,含羞灼逍遥, 犹醉桃李殷,轻移莲...
    静静的白莲阅读 1,042评论 19 38
  • 老板交给你一个任务,需要你2个小时完成一份报告,在准备过程中,老板时不时过来看一眼,并指出这也不行那也不行,你会怎...
    三片阿司匹林阅读 120评论 0 1
  • Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存...
    随风而逝1027阅读 325评论 0 0
  • 福彩 3D 28期:和值 主选 : 1. 11...
    星空计划阅读 166评论 0 0
  • 本来说好这个暑假用一个月的时间写完所有作业,剩下的一个月预习初三内容的,但我是完全没做到。 6...
    捞芒果王ZYX阅读 202评论 0 0