Kubernetes dashboard 经过 Ingress 提供HTTPS访问

Kubernetes dashboard提供外部访问的方式有多种(端口映射、代理、NodePort、LoadBalancer、Ingress)。尽管Dashboard的流量很小,没有必要经过 Ingress 来提供访问,但Dashboard服务是一个很好的现成的服务,能够用来练习Ingress的使用和配置。node

本文内容包括:安装Ingress、配置加密参数、安装Dashboard的Ingress路由等几个步骤。nginx

一、安装 Kubernetes Dashboard

Kubernetes Dashboard是Kubernetes的可视化管理Web界面,安装参考:git

这里咱们将其经过Ingress设置,管理者能够经过Https进行访问,并且不须要端口映射,更符合一般的Web服务访问模式。github

二、安装 Ingress controller

Ingress已经是Kubernetes内置的网络入口服务,但其实现引擎须要单独安装。web

三、建立和安装加密访问凭证

经过https进行访问必须要使用证书和密钥,在Kubernetes中能够经过配置一个加密凭证(TLS secret)来提供。api

3.1 建立 tls secret

这里只是拿来本身使用,建立一个本身签名的证书。若是是公共服务,建议去数字证书颁发机构去申请一个正式的数字证书(须要一些服务费用);或者使用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地址,你能够改为本身的。安全

3.2 安装 tls secret

下一步,将这两个文件的信息建立为一个Kubernetes的secret访问凭证,我将名称指定为 k8s-dashboard-secret ,这在后面的Ingress配置时将会用到。若是你修改了这个名字,注意后面的Ingress配置yaml文件也须要同步修改。服务器

kubectl -n kube-system create secret tls k8s-dashboard-secret --key ./tls.key --cert ./tls.crt
  • 注意:
    • 上面命令的参数 -n 指定凭证安装的命名空间。
    • 为了安全考虑,Ingress全部的资源(凭证、路由、服务)必须在同一个命名空间。

四、配置Ingress 路由

首先建立一个Ingress路由配置文件,而后设置到Kubernetes集群中。网络

4.1 建立Ingress 路由配置文件

将下面的内容保存为文件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
  • 注意
    • 上面的annotations部分是必须的,以提供https和https service的支持。不过,不一样的Ingress Controller可能的实现(或版本)有所不一样,须要安装相应的实现(版本)进行设置。
    • 参见,#issue:https://github.com/kubernetes/ingress-nginx/issues/2460

4.2 配置 Ingress 路由

如今使用kubectl apply命令将Ingress路由设置进去。若是修改了,能够再次运行这个命令,以应用更改,能够当即生效。

kubectl apply -n kube-system -f dashboard-ingress.yaml
  • 注意:
    • 上面命令的参数 -n 指定凭证安装的命名空间。
    • 为了安全考虑,Ingress全部的资源(凭证、路由、服务)必须在同一个命名空间。

五、登陆使用

5.1 创建受权帐号及Token

创建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

5.2 使用Token

使用下面的方法来获取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地址是跟端口映射、代理等方式不同的,更符合通常的网页服务的习惯。

5.3 Dashboard界面

Kubernetes Dashboard的界面以下,跟其它访问方式是同样样的:

  • 最后,由于是自签名证书,不少浏览器不让访问,可使用FireFox,选择添加安全例外(Exceptions)便可。

若是更深刻的使用HTTPS,咱们须要了解和解决几个下面的问题:

由于Kubernetes的版本在快速演进,可能这里的方法已再也不适用。若是你遇到问题,欢迎在下面留言。

相关文章
相关标签/搜索