Kubernetes dashboard提供外部访问的方式有多种(端口映射、代理、NodePort、LoadBalancer、Ingress)。尽管Dashboard的流量很小,没有必要经过 Ingress 来提供访问,但Dashboard服务是一个很好的现成的服务,能够用来练习Ingress的使用和配置。node
本文内容包括:安装Ingress、配置加密参数、安装Dashboard的Ingress路由等几个步骤。nginx
Kubernetes Dashboard是Kubernetes的可视化管理Web界面,安装参考:git
这里咱们将其经过Ingress设置,管理者能够经过Https进行访问,并且不须要端口映射,更符合一般的Web服务访问模式。github
Ingress已经是Kubernetes内置的网络入口服务,但其实现引擎须要单独安装。web
values.yaml里面的hostnetwork改成true,由于ingress要使用主机网络。
经过https进行访问必须要使用证书和密钥,在Kubernetes中能够经过配置一个加密凭证(TLS secret)来提供。api
这里只是拿来本身使用,建立一个本身签名的证书。若是是公共服务,建议去数字证书颁发机构去申请一个正式的数字证书(须要一些服务费用);或者使用Let's encrypt去申请一个免费的(后面有介绍);若是使用Cloudflare能够自动生成证书和https转接服务,可是须要将域名迁移过去,高级功能是收费的。浏览器
#https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/tls/README.md openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./tls.key -out ./tls.crt -subj "/CN=192.168.199.230"
将会产生两个文件tls.key和tls.crt,你能够改为本身的文件名或放在特定的目录下(若是你是为公共服务器建立的,请保证这个不会被别人访问到)。后面的192.168.199.230是个人服务器IP地址,你能够改为本身的。安全
下一步,将这两个文件的信息建立为一个Kubernetes的secret访问凭证,我将名称指定为 k8s-dashboard-secret ,这在后面的Ingress配置时将会用到。若是你修改了这个名字,注意后面的Ingress配置yaml文件也须要同步修改。服务器
kubectl -n kube-system create secret tls k8s-dashboard-secret --key ./tls.key --cert ./tls.crt
首先建立一个Ingress路由配置文件,而后设置到Kubernetes集群中。网络
将下面的内容保存为文件dashboard-ingress.yaml。里面的 /dashboard 设定为访问Kubernetes dashboard服务,/web 只是为了测试和占位,若是没有安装nginx,将会返回找不到服务的消息。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: k8s-dashboard namespace: kube-system annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/secure-backends: "true" spec: tls: - secretName: k8s-dashboard-secret rules: - http: paths: - path: /dashboard backend: serviceName: kubernetes-dashboard servicePort: 443 - path: /web backend: serviceName: my-nginx servicePort: 80
如今使用kubectl apply命令将Ingress路由设置进去。若是修改了,能够再次运行这个命令,以应用更改,能够当即生效。
kubectl apply -n kube-system -f dashboard-ingress.yaml
创建Dashboard访问的受权帐号,将下面的内容保存为文件,如dashboard-rbac.yaml。
apiVersion: v1 kind: ServiceAccount metadata: name: dashboard namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dashboard subjects: - kind: ServiceAccount name: dashboard namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
而后执行安装(所创建的帐号为dashboard):
kubectl create -f dashboard-rbac.yaml
使用下面的方法来获取dashboard登陆的token。首页选择Token方法,而后填进去。
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep dashboard-token | awk '{print $1}')
如今,输入 https://192.168.199.230/dashboard 就能够访问Dashboard界面了。注意这里的URL地址是跟端口映射、代理等方式不同的,更符合通常的网页服务的习惯。
Kubernetes Dashboard的界面以下,跟其它访问方式是同样样的:
若是更深刻的使用HTTPS,咱们须要了解和解决几个下面的问题:
由于Kubernetes的版本在快速演进,可能这里的方法已再也不适用。若是你遇到问题,欢迎在下面留言。