kubernetes1.8.6 安装 dashboard1.8.0
最近使用二进制方式手工撸了Kubernetes1.8.6之后,在部署dashboard1.8.0时遇到了问题。按照之前部署dashboard1.7.1的方式部署1.8.0的时候无法访问dashboard页面。报如下问题。
我查看了部署的yaml文件和之前的差别就是1.7.1有initcontainer而1.8.0没有。自己折腾了很久也没有解决。后经过别人指导。发现1.8.0版本的需要自己生产证书,或者只能使用firefox浏览器进行访问。
在使用使用firefox浏览器后选择信任该自动生成的证书之后,果然可以访问到dashboard页面了
另外一种方式是自己使用OpenSSL生成dashboard.crt和dashboard.key.然后使用者两个文件重新生成secret kubernetes-dashboard-certs。
使用OpenSSL生成dashboard.crt和dashboard.key:
- 生成dashboard.pass.key
# openssl genrsa -des3 -passout pass:x -out dashboard.pass.key 2048
- 使用dashboard.pass.key生成dashboard.key
# openssl rsa -passin pass:x -in dashboard.pass.key -out dashboard.key
使用dashboard.key生成dashboard.crt
这里让输入一个复杂的密码,不用输入,直接按回车,留空就行。This password is used by Certificate Authorities to authenticate the certificate owner when they want to revoke their certificate. Since this is a self-signed certificate, there’s no way to revoke it via CRL (Certificate Revocation List)。
意思是这个密码是证书拥有者用来撤销这个证书的,因为这是个个人证书所以无法撤销所以就不需要使用。
# rm dashboard.pass.key
# openssl req -new -key dashboard.key -out dashboard.csr
- 生成一个ssl certificate
#openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
然后生成的dashboard.crt和dashboard.key就可以用生成dashboard使用的secret了。
部署dashboard1.8.0:
第一步:把生成的dashboard.crt和dashboard.key放到$HOME/certs文件夹内,且文件夹内只有这俩文件。
# kubectl create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs -n kube-system
使用这个命令生成secret。
第二步:把dashboard的service使用NodePort方式部署,
下载yaml文件:
# wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
把Kubernetes-dashboard.yaml文件中的部署secret命令删除。
# ------------------- Dashboard Secret ------------------- #
apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-certs
namespace: kube-system
type: Opaque
把service修改成如下:
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
部署yaml文件
# kubectl create -f kubernetes-dashboard.yaml
身份认证:
登录dashboard的时候支持两种方式Kuberconfig和token。Kubeconfig中也依赖token字段,所以生成token,必不可少。
生成toekn
我们创建一个admin用户并授予admin角色绑定,使用下面的yaml文件创建admin用户并授予其管理员权限,然后就可以通过token登录dashboard,这种认证方式的本质是通过Service Account的身份认证加上Bearer token请求API server的方式。
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-admin
namespace: kube-system
部署该yaml文件
kubectl create -f kubernetes-dashboard-admin.rbac.yaml
查看该token
[root@master yaml]# kubectl get secret -n kube-system | grep dashboard-admin
kubernetes-dashboard-admin-token-5rg7x kubernetes.io/service-account-token 3 2m
kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-5rg7x
Name: kubernetes-dashboard-admin-token-5rg7x
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name=kubernetes-dashboard-admin
kubernetes.io/service-account.uid=16a8de6f-fc17-11e7-bd07-e0db55019d08
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1359 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi01cmc3eCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjE2YThkZTZmLWZjMTctMTFlNy1iZDA3LWUwZGI1NTAxOWQwOCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.G-Fc8KzImLfUjMz8FYiWHii9U8J_0hOfc-Ev5jQELiVZgaGrfXrRwvwVUXdT5SpI64zg8iC3NkiMR_u4NKggLKMntruIQhpecd2U48tByUOS2eRD09QxL6Kv-X00Ihz_JAQ1dF0QZlwaIFR3pzSSAw1HOa65-qPHe9XbVLhaCFNO4d7joNHIqj5xKWyLUuD3WPzDQ0kPb25GOIfHL-wM0gtBqm92y7SoVyEDSC2GsV7hoDjZ_ibqRu7jB-Z_iziLjfz4SKlbYoOLkK2K92iNcLKC3wpvk7lqIuaxxK5y_K6vENO2sffIsLb6fXHU7jGPL8AF0OLdpa8nrSStoka7aA
把该token值复制到
参考:
- https://github.com/kubernetes/dashboard/wiki/Installation
- kubernetes dashboard 升级之路