目录

Kubernetes Dashboard 安装

本文以 Debian 10 , kubernetes 1.19 为例。 kubernetes 安装参考站内另一篇文章 Kubernetes 安装

参考资料:

站内相关资料:

1. 部署 Kubernetes Dashboard

部署

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

通过以下命令查看服务运行情况

kubectl get pods -n kuberenetes-dashboard

2. 配置 Dashboard 服务的访问模式为 NodePort

使用以下命令编辑服务,这里将使用vi编辑器打开服务的yaml定义。

kubectl edit service kubernetes-dashboard -n kubernetes-dashboard

找到 spec 定义,修改其中两处地方,以下是示例

spec:
  type: NodePort              # type 从 ClusterIP 改为 NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 38080         # 增加该项,定义对外暴露的端口
  selector:
    k8s-app: kubernetes-dashboard

3. 创建账号

按照 Creating sample user 中的示例创建账号。(注意,官方声明这个账号权限过大,仅作为演示使用,风险自担。如果了解规则的话,可以自己创建自己的账号)

认证方面的内容可以参考站内另一篇文章 kubernetes RBAC 鉴权简单介绍

3.1 创建 ServiceAccount

在命名空间 kubernetes-dashboard 下创建一个名为 admin-userServiceAccount

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF

3.2 创建 ClusterRoleBinding

把上一步创建的 admin-user 绑定到名字为 cluster-adminClusterRole 中。这样,admin-user 就具有了 cluster-admin 角色所定义的权限。

cat <<EOF | kubectl apply -f -
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
EOF

4. 访问 Dashboard

经过第2步之后,就可以通过 https://node-ip:node-port 的方式打开 Dashboard 管理页面。这里需要有 Token 才能登录。

使用以下命令获取登录 Token

# 这里 grep admin-user 需要跟你的实际账号名一致
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

此命令会输出类似以下的信息

Name:         admin-user-token-v57nw
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: 0303243c-4040-4a58-8a47-849ee9ba79c1

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXY1N253Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwMzAzMjQzYy00MDQwLTRhNTgtOGE0Ny04NDllZTliYTc5YzEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.Z2JrQlitASVwWbc-s6deLRFVk5DWD3P_vjUFXsqVSY10pbjFLG4njoZwh8p3tLxnX_VBsr7_6bwxhWSYChp9hwxznemD5x5HLtjb16kI9Z7yFWLtohzkTwuFbqmQaMoget_nYcQBUC5fDmBHRfFvNKePh_vSSb2h_aYXa8GV5AcfPQpY7r461itme1EXHQJqv-SN-zUnguDguCTjD80pFZ_CmnSE1z9QdMHPB8hoB4V68gtswR1VLa6mSYdgPwCHauuOobojALSaMc3RH7MmFUumAgguhqAkX3Omqd3rJbYOMRuMjhANqd08piDC3aIabINX6gP5-Tuuw2svnV6NYQ

复制最后 token 的内容,粘贴到 Dashboard 登录页面上,就能成功登录进去了。