对于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
可以参考这份yaml文件安装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