1. 必要工具准备
1.1 下载部署dashboard 需要的yaml文件
wget https://github.com/kubernetes/dashboard/blob/v2.0.0/aio/deploy/recommended.yaml
也可以用这个文件:
recommended.yaml
1.2 制作证书
vim create_cert.sh#!/bin/bashif [ $# -ne 4 ];thenecho "please user in: `basename $0` SECRET_NAME CERT_NAME DOMAIN NAMESPACE"exit 1fiSECRET_NAME=$1CERT_NAME=$2DOMAIN=$3NAMESPACE=$4# TLS Secretsopenssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ${CERT_NAME}.key -out ${CERT_NAME}.crt -subj "/CN=${DOMAIN}/O=${DOMAIN}"# 创建 NAMESPACEkubectl get namespace |grep ${NAMESPACE}if [ $? -eq 0 ]; thenecho "[INFO] ${NAMESPACE} is already exists"elsekubectl create namespace ${NAMESPACE}echo "[INFO] create ${NAMESPACE} success!"fi# 如果你使用--key --cert方式则创建的secret中data的默认2个文件名就是tls.key和tls.crtkubectl create secret generic ${SECRET_NAME} --from-file=${CERT_NAME}.crt --from-file=${CERT_NAME}.key -n ${NAMESPACE}
运行上面文件
chmod 7 create_cert.sh./create_cert.sh kubernetes-dashboard-certs dashboard dashboard.shiqi.cn kubernetes-dashboardGenerating a 2048 bit RSA private key........+++....................................................+++writing new private key to 'dashboard.key'-----kubernetes-dashboard Active 2m48s[INFO] kubernetes-dashboard is already existssecret/kubernetes-dashboard-certs created
1.3 修改配置文件
[root@m]# vim ./recommended.yaml#将以下内容注释,因为要用我们自己生成的证书# ---#apiVersion: v1#kind: Secret#metadata:# labels:# k8s-app: kubernetes-dashboard# name: kubernetes-dashboard-certs# namespace: kubernetes-dashboard#type: Opaque...# 修改启动参数,添加证书路径...kind: DeploymentapiVersion: apps/v1metadata:spec:...spec:containers:- name: kubernetes-dashboardimage: kubernetesui/dashboard:v2.0.3imagePullPolicy: Alwaysports:- containerPort: 8443protocol: TCPcommand: # 新增- /dashboard # 新增args:- --auto-generate-certificates- --namespace=kubernetes-dashboard- --token-ttl=3600 # 新增- --bind-address=0.0.0.0 # 新增- --tls-cert-file=dashboard.crt # 新增- --tls-key-file=dashboard.key # 新增
kubectl apply -f recommended.yaml
1.4 创建 ingress 文件
[root@uk8s-a ingress]# vim ingress-dashboard.yaml[root@uk8s-a ingress]# cat ingress-dashboard.yamlapiVersion: extensions/v1beta1kind: Ingressmetadata:name: ingress-dashboardnamespace: kubernetes-dashboardannotations: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/backend-protocol: "HTTPS"spec:tls:- hosts:- dashboard.5179.topsecretName: kubernetes-dashboard-certsrules:- host: dashboard.5179.tophttp:paths:- path: /backend:serviceName: kubernetes-dashboardservicePort: 443
1.5 创建用户
[root@m]# cat create-user.yaml---apiVersion: v1kind: ServiceAccountmetadata:name: admin-usernamespace: kubernetes-dashboard---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: admin-userroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-adminsubjects:- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard[root@m]# kubectl apply -f create-user.yamlserviceaccount/admin-user unchangedclusterrolebinding.rbac.authorization.k8s.io/admin-user unchanged
1.6 获取token
[root@m]# cat get-user-token.sh#!/bin/bashUSER=${1:-admin-user}kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep $USER | awk '{print $1}')# 执行一下脚本[root@uk8s-a web-ui]# bash get-user-token.shName: admin-user-token-dhx6rNamespace: kubernetes-dashboardLabels: <none>Annotations: kubernetes.io/service-account.name: admin-userkubernetes.io/service-account.uid: 84583c60-2c95-4118-9158-6341962d917fType: kubernetes.io/service-account-tokenData====ca.crt: 1363 bytesnamespace: 20 bytestoken: eyJhbGciOiJSUzI1NiIsImtpZCI6ImZlaXFTZERBdjhGLWwyZ0xLTzljaHdhSlJ1OWdfeTNDWU4wRzhuS3MyYTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWRoeDZyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI4NDU4M2M2MC0yYzk1LTQxMTgtOTE1OC02MzQxOTYyZDkxN2YiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.tPgicyWaMDfN5GkLY8XX2S-jhS-pvNC6eNvZ1FCIgZi3quWQND_JASqUr4Y9nyzdFtt-Jog1QbBCRGOE1YMrc3CX27TZttsbJNgq_PqlSjJ8NpmQfUzL5EAaYEUk7bcTRsePrGpECLqih7OOMN1lXO3WYiMJLfeDvkSaUweuUQzSTGtdkzbjVmVY-DksejyXSO_DI_-DMa4lq8zTnegwywdNUkFu06J_DXTTZZIpyKBKvpKz0pny2JIS4x9rI6v4g4Ljw47U7GM30CkQeletagQ8tjXf8g2QTp7Puc9NIpK39u8H1SIqbEZCBtRTJEfLTibDXXnlNplZF5FQ5bms1g
1.7 宿主机上访问虚拟机
https://dashboard.shiqi.cn/#/persistentvolume?namespace=default
