手把手教你解决 Chrome、IE 等浏览器无法正常访问 Kubernetes Dashboard 的问题

Posted by Mike on 2020-06-13

一般情况下,正常安装部署完 Kubernetes Dashboard 后,通过大多数主流浏览器(ChromeIESafari)是不能正常访问的,唯有 Firefox 才能解忧。

使用火狐浏览器打开后,会有一个安全风险提示。

接受安全风险后,还是可以正常访问的。

该问题是由于部署 Kubernetes Dashboard 时默认生成的证书有问题导致的。在这篇文章中,我们就来教你如何快速优雅的解决它。

既然是该书问题,那解决办法当然是生成一个新的有效证书替换掉过期的即可。

通过生成新的证书永久解决

下面是生成 Kubernetes Dashboard 域名证书的几种常用方法,你可以根据自身实际情况选用任何一种就行。

  • 通过 https://freessl.cn 网站,在线生成免费 1 年的证书

  • 通过 Let’s Encrypt 生成 90 天免费证书

  • 通过 Cert-Manager 服务来生成和管理证书

  • 通过 IP 直接自签一个证书

几种方式的原理都是一样的,我们这里使用自签证书的方法来进行演示。

  1. 通过自签方式生成证书
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建一个用于自签证书的目录
$ mkdir kubernetes-dashboard-key && cd kubernetes-dashboard-key

# 生成证书请求的key
$ openssl genrsa -out dashboard.key 2048
Generating RSA private key, 2048 bit long modulus
....................................+++
.......................................................................+++

# 生成证书请求
$ openssl req -days 3650 -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.100.100'

# 生成自签证书
$ openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
Signature ok
subject=/CN=192.168.100.100
Getting Private key
  1. 使用新证书来创建一个与 Kubernetes Dashboard 部署文件中同名的 Secret
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查找 Kubernetes 中原有证书的 Secret
$ kubectl get secret kubernetes-dashboard-certs -n kubernetes-dashboard
NAME TYPE DATA AGE
kubernetes-dashboard-certs Opaque 0 65d

# 查看 Kubernetes 中原有的证书 Secret 的内容 (此步骤非必须)
$ kubectl get secret kubernetes-dashboard-certs -n kubernetes-dashboard -o yaml
apiVersion: v1
kind: Secret
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Secret","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard-certs","namespace":"kubernetes-dashboard"},"type":"Opaque"}
creationTimestamp: "2020-03-24T17:42:42Z"
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-certs
namespace: kubernetes-dashboard
resourceVersion: "20913"
selfLink: /api/v1/namespaces/kubernetes-dashboard/secrets/kubernetes-dashboard-certs
uid: 329888d4-aa59-4c32-84d8-b88ef2ebfa32
type: Opaque

# 删除 Kubernetes 中原有的证书 Secret
$ kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
secret "kubernetes-dashboard-certs" deleted
1
2
3
# 使用新证书创建一个同名的 Secret
$ kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
secret/kubernetes-dashboard-certs created

注意:新版的 Dashboard 的 namespace 已经是 kubernetes-dashboard 。

  1. 查找当前正在运行的 Kubernetes-Dashboard 的 Pod
1
2
3
4
$ kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b8b58dc8b-nw7l7 1/1 Running 3 64d
kubernetes-dashboard-5f5f847d57-88ssx 1/1 Running 3 64d
  1. 删除现有的 Kubernetes-Dashboard 的 Pod
1
2
3
4
5
$ kubectl delete po kubernetes-dashboard-5f5f847d57-88ssx -n kubernetes-dashboard
pod "kubernetes-dashboard-5f5f847d57-88ssx" deleted

$ kubectl delete po dashboard-metrics-scraper-7b8b58dc8b-nw7l7 -n kubernetes-dashboard
pod "dashboard-metrics-scraper-7b8b58dc8b-nw7l7" deleted

如果 Pod 比较多的时候,你还可以使用以下这条命令批量删除。

1
$ kubectl get pod -n kubernetes-dashboard | grep -v NAME | awk '{print "kubectl delete po " $1 " -n kubernetes-dashboard"}' | sh

删除完成后,新的 Kubernetes-Dashboard Pod 会自动启动起来。

1
2
3
4
$ kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b8b58dc8b-w9zzh 1/1 Running 0 35s
kubernetes-dashboard-5f5f847d57-4q76w 1/1 Running 0 53s

这时,再次刷新 Chrome 浏览器的 Dashboard 页面后,先点高级:

然后点击继续前往,页面就可以正常显示了。

临时解决方案

如果你只是想临时使用 Chrome 访问下 Kubernetes-Dashboard 或者你没有权限更换 Kubernetes-Dashboard 的证书,你也可以在 Chrome 启动时加上 --ignore-certificate-errors--ignore-urlfetcher-cert-requests 参数来解决该问题。

  1. Windows 用户
1
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors
  1. Mac 用户
1
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ignore-certificate-errors --ignore-urlfetcher-cert-requests &> /dev/null

参考文档

  1. https://www.google.com
  2. https://blog.51cto.com/10616534/2430512
  3. https://www.jianshu.com/p/8021285cc37d
  4. https://stackoverflow.com/questions/26388405/chrome-disable-ssl-checking-for-sites
  5. https://my.oschina.net/u/4407987/blog/3319315
  6. https://zhangguanzhang.github.io/2019/02/12/dashboard/