使用traefik作为ingress controller透出集群中的https后端(如kubernetes dashboard)

文章楔子

对于k8s集群中的http/https服务,一种常见的设计是集群内部走http协议,然后在ingress controller处统一管理TLS证书,并负责接受外部的https请求,以及将内部的http响应统一转换为https发回客户端,这样既能降低集群内部通信的复杂度,又能保证集群服务的安全性。

然而对于诸如kubernetes/dashoboard一类的服务,使用其默认的部署配置启动的服务提供的是https协议的服务,从集群外部访问该服务时,通常只能使用类似如下的链接间接的访问。

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.

本文旨在指导读者将集群内部的HTTPS服务通过traefik暴露到集群外部,直接通过ingress访问。

通过ingress访问https协议后端的dashboard

开启https后端ingress

前置条件

  • kubernetes集群
  • traefik 1.6.5

可以参考这份yaml文件安装traefik,需要注意两点:

  • 该文件中的image被我修改成了k8s.gcr.io/traefik:1.6.5,指向我使用的私有仓库。如果读者想从公网拉取该镜像请将镜像名修改为traefik:1.6.5
  • 该文件并不涉及外部https相关代码,对外只开启了http,如果需要https的话请先在kube-system命名空间创建一个名为ssl的secret,里面存放TLS证书,然后使用这份yaml文件部署traefik

配置Traefik

如果使用了我的部署文件,Traefik是直接配置好的,如果是读者先前自己安装好的traefik,请将下面的代码保存为文件,或编辑自己的traefik配置,在适当的位置加入insecureSkipVerify = true。然后将配置应用到集群,并重启所有traefik容器。

kind: ConfigMap
apiVersion: v1
metadata:
 name: traefik-conf
 namespace: kube-system
data:
 traefik.toml: |
   insecureSkipVerify = true
   defaultEntryPoints = ["http"]
   [entryPoints]
     [entryPoints.http]
     address = ":80"

insecureSkipVerify = true,该项配置指定了traefik在访问https后端的时候可以忽略TLS证书验证错误,从而使得https的后端,如kubernetes dashboard,可以像http后端一样直接通过traefik透出

测试效果

这里以透出https的kubernetes dashboard为例,执行下面的yaml文件,为dashboard创建ingress

kind: Service
apiVersion: v1
metadata:
 labels:
   k8s-app: kubernetes-dashboard
 name: kubernetes-dashboard
 namespace: kube-system
spec:
 ports:
 - port: 443
   targetPort: 8443
 selector:
   k8s-app: kubernetes-dashboard
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
 name: dashboard
 namespace: kube-system
 annotations:
   kubernetes.io/ingress.class: traefik
spec:
 rules:
 - host: dashboard.multi.io
   http:
     paths:
     - backend:
         serviceName: kubernetes-dashboard
         servicePort: 443
       path: /

随后配置/etc/hosts文件,并访问该链接

$ cat /etc/hosts
10.130.29.80 dashboard.multi.io


Lentil Sun
Channelsoft Software Engineer
Mail: lentil1016@gmail.com
Site: https://lentil1016.cn
Github: https://github.com/Lentil1016

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址