配置文件

把配置文件下载到本地,方便自定义

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#deploying-the-dashboard-ui

当前使用的版本是v2.2.0

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

使用默认的配置就可以部署好,但是在使用过程中,会出现https证书、账号权限等问题,所以建议自己修改后再部署

HTTPS证书

生成证书

参考链接:https://kubernetes.io/docs/tasks/administer-cluster/certificates/

提供了3种方式:easyrsa 、openssl 、cfssl ,这里使用 openssl 演示

在文档中是使用CA签发终端证书的方式,但是在部署Dashboard时,由于健康检查时证书无法信任,所以这里用最简单的方式配置

执行文档中的3、4、5步骤,然后通过以下方式生成Dashboard的证书

openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 3650

使用到的是 server.crtserver.key

配置证书到Dashboard

在默认的Dashboard部署文件中,你也许能发现名为kubernetes-dashboard-certsSecret的数据是空,这也是默认部署下,Chrome访问证书的原因

把之前得到的 server.crtserver.key 文件内容,经过base64后,放到 kubernetes-dashboard-certs 里,就可以使用了

apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-certs
  namespace: kubernetes-dashboard
type: Opaque
data:
  server.crt: LS0tLS1CRUdJTiBDRxxxxx
  server.key: LS0tLS1CRUdJTiBSxxxxxx

注意,默认的挂在的文件名称是 dashboard.crtdashboard.key ,由于这里我配置的是 server.xxx,所以,需要在名为 kubernetes-dashboarddeployment 中声明一下

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
    spec:
      containers:
        - name: kubernetes-dashboard
          image: kubernetesui/dashboard:v2.2.0
          imagePullPolicy: Always
          ports:
            - containerPort: 8443
              protocol: TCP
          args:
            # - --auto-generate-certificates
            - --namespace=kubernetes-dashboard
            - --tls-key-file=server.key
            - --tls-cert-file=server.crt
            - --token-ttl=43200
            ......
token-ttl 是声明token过期时间的,默认的时间太短,这里可以设置长一些

访问方式

在文档中提到使用proxy的方式访问,但不是很方便,可以通过nodePort的方式访问

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#command-line-proxy

修改名为 kubernetes-dashboardService,调整 ports 配置

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard

这样部署好后,就可以直接使用 https://localhost:30001 访问Dashboard了

部署

kubectl apply -f recommended.yaml

感谢大家的阅读, 如有疑问可以加我微信