K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问

K8S dashboard 安装配置(v1.17.0)

一、dashboard总配置文件下载

官网地址:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

wget -O kubernetes-dashboard.yaml https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

二、配置文件修改

1、将这段注释掉,下面我们使用自己手工签发的TLS证书并手工创建Secret
K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问_第1张图片
2、修改容器启动参数
K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问_第2张图片
其中auto-generate-certificates不能注释,因为我看到过有帖子说要注释掉(这个参数不仅仅是自动证书的开关,还是总的HTTPS的开关,当我们手工配置了证书后,容器不会自动生成)。
另外两个tls参数指定的是被挂载到容器中的证书的名字,下面我们使用 tls secret 处理的证书,通过配置mountPath: /certs可以得知被挂载到容器的/certs目录中,其名字为tls.crttls.key(为什么叫这2个名字或者是否可以配置其他名字,请继续往下看)。

三、tls证书制作

1、证书制作

# 生成证书请求的key
openssl genrsa -out dashboard.key 2048
# 生成证书请求
openssl req -days 3650 -new -key dashboard.key -out dashboard.csr -subj /C=CN/ST=JiangSu/L=NanJing/O=Shanhy/OU=Shanhy/CN=*.shanhy-k8s.com
# 生成自签证书(证书文件 dashboard.crt 和私钥 dashboad.key)
openssl x509 -req -in dashboard.csr -signkey tls.key -out dashboard.crt
# 查看证书信息
openssl x509 -in dashboard.crt -text -noout

2、创建 kubernetes-dashboard-certs(因为我们把原来的注释掉了,所以这里手工创建)

# 创建 namespace
kubectl create namespace kubernetes-dashboard
# 创建 secret(2行命令自选一个)
kubectl create secret tls kubernetes-dashboard-certs -n kubernetes-dashboard --key dashboard.key --cert dashboard.crt
kubectl create secret tls kubernetes-dashboard-certs -n kubernetes-dashboard --from-file=tls.crt=dashboard.crt --from-file=tls.key=dashboard.key

这里创建 secret 的两种方法命令对上面的问题进行了解释,下面解释一下,彻底把这块的用法说明白:

  • 如果你使用--key --cert方式则创建的secret中data的默认2个文件名就是tls.key和tls.crt,你可以使用命令kubectl describe secret -n kubernetes-dashboard kubernetes-dashboard-certs查看。
  • 如果你使用第二条命令的--from-file的方式,则你需要手工指定文件名称tls.crt和tls.key(看示例的写法),如果你把上面的命令直接写成--from-file=dashboard.crt,那么挂载后的文件就是dashboard.crt,这样你需要把第二步第2点中参数的tls.crt修改为dashboard.crt
  • 你还可以直接使用--from-file=mycert/这样直接指定一个目录,那么会把改目录下的所有文件都挂载到容器的/certs中,文件名保持不变。

四、命令启动服务

应用主配置文件一键启动

kubectl apply -f kubernetes-dashboard.yaml

启动后,查看一下 service、pod、secret 的信息内容确认结果。

五、配置ingress方式访问

创建文件ingress-nginx-kubernetes-dashboard.yaml

apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx-kubernetes-dashboard
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: "nginx"
    # 开启use-regex,启用path的正则匹配 
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    #nginx.ingress.kubernetes.io/secure-backends: "true" //好像是版本0.20.0发布后被删除,请使用下面这行
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  tls:
  - hosts:
    - shanhy-k8s.com
    - "*.shanhy-k8s.com"
    secretName: kubernetes-dashboard-certs
  rules:
  - host: dashboard.shanhy-k8s.com
    http:
      paths:
      - path: /
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443

其中secretName就使用我们上面手工创建的kubernetes-dashboard-certs
然后发布配置:

kubectl apply -f ingress-nginx-kubernetes-dashboard.yaml

六、浏览器登录访问

dashboard.shanhy-k8s.com配置到本机hosts中,对应kubectl get ingree -A中看到的IP地址。
然后打开浏览器访问 https://dashboard.shanhy-k8s.com,打开页面:
K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问_第3张图片
其中Token的获取命令为:

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep kubernetes-dashboard-token | awk '{print $1}')

输入获取的命令,就可以登录进入了。
此时还不能高兴的太早,你会发现等进入后啥都不显示,右上角的小铃铛上的提醒数字在一直增长。
打开浏览器debug模式,你会发现Network网络请求响应的都是forbidden 403这样的错误。

七、解决forbidden 403问题

这个错误是绑定的角色没有权限导致的,最简单的办法再创一个管理员角色,戳这里了解K8S RBAC介绍。
1、创建配置文件kubernetes-dashboard-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

运行配置文件内容,并获取admin-userToken(admin-user不是固定值你随便起什么名字):

kubectl apply -f kubernetes-dashboard-rbac.yaml
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user-token | awk '{print $1}')

退出登录,用新创建的admin-usertoken进行登录,精彩完美呈现~~
K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问_第4张图片

八、彩蛋 —— 中文设置

Kubernetes Dashboard 2.0 已经支持中文界面了,但是你需要做一下浏览器设置,如下图:
K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问_第5张图片
其他浏览器,同理设置语言zh优先即可。


(END)

你可能感兴趣的:(Kubernetes)