k8s集群部署 - Dashboard v2.7
k8s集群部署 - Dashboard v2.7
文章目录
- k8s集群部署 - Dashboard v2.7
- 部署 Kubernetes Dashboard
- 查看 Dashboard 服务
- 验证
- 创建访问权限(RBAC)
- 作用
- 获取访问 Token
- 更改kubernetes-dashboard的网络为集群外可访问
- 访问 Dashboard
- 登录 Dashboard
- 持久化用户token到Secret中(可选)
- 介绍
Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
部署 Kubernetes Dashboard
运行以下命令来部署kubernetes-dashboard:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
这将会创建一个kubernetes-dashboard服务以及所需的相关资源(如deployment、service等)。
查看 Dashboard 服务
你可以通过以下命令查看是否部署成功:
kubectl get pods -n kubernetes-dashboard
验证
如果部署成功,你应该能够看到类似下面的输出:
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5657497c4c-7b8zj 1/1 Running 0 25m
kubernetes-dashboard-78f87ddfc-vlgkq 1/1 Running 0 25m
创建访问权限(RBAC)
为了安全起见,通常需要为kubernetes-dashboard创建访问权限。可以创建一个ClusterRoleBinding,为dashboard-admin用户授权。
创建一个dashboard-admin的YAML文件,dashboard-admin.yaml
sudo vi dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-full-access
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kubernetes-dashboard
roleRef:
kind: ClusterRole
name: kubernetes-dashboard-full-access
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubernetes-dashboard-full-access
rules:
- apiGroups: [""]
resources: ["pods", "services", "endpoints", "secrets", "configmaps", "namespaces"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets", "statefulsets"]
verbs: ["get", "list", "watch"]
- apiGroups: ["extensions"]
resources: ["ingresses"]
verbs: ["get", "list", "watch"]
执行以下命令创建dashboard-admin:
kubectl apply -f ./dashboard-admin.yaml
作用
-
ServiceAccount (dashboard-admin):
创建了一个服务账户 dashboard-admin,用于为 kubernetes-dashboard 提供认证。 -
ClusterRoleBinding (dashboard-admin):
为 dashboard-admin 服务账户绑定 cluster-admin 角色,从而使其拥有集群管理员权限。 -
ClusterRoleBinding (kubernetes-dashboard-full-access):
为 kubernetes-dashboard 服务账户绑定 kubernetes-dashboard-full-access 角色,授予其对多个资源(如 pods、services、endpoints、secrets 等)的完全访问权限。 -
ClusterRole (kubernetes-dashboard-full-access):
定义了一个角色,允许访问 Kubernetes 集群中与 Dashboard 相关的资源,包括:Pods、Services、Endpoints、Secrets、ConfigMaps、Namespaces、Deployments、ReplicaSets、StatefulSets 和 Ingresses。
获取访问 Token
要登录到Dashboard,你需要获取dashboard-admin的Token,运行以下命令:
kubectl -n kubernetes-dashboard create token dashboard-admin
该命令将返回一个Token,复制该Token备用。
更改kubernetes-dashboard的网络为集群外可访问
Kubernetes Dashboard 默认是通过 ClusterIP 类型的服务暴露的,这意味着它只能在集群内部访问。你可以将其更改为 NodePort 或 LoadBalancer 类型,使其能够被外部机器访问。
# 运行以下命令来编辑 Dashboard 的服务:
[root@swarm03 ~]# kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
修改完后保存并退出编辑,Kubernetes 将自动应用更改。
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kubernetes-dashboard"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
creationTimestamp: "2024-12-16T09:18:13Z"
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
resourceVersion: "266985"
uid: 15a16dab-17c0-4d09-acd5-129c264cd885
spec:
# clusterIP: 10.106.149.44
# clusterIPs:
# - 10.106.149.44
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 443
protocol: TCP
targetPort: 8443
nodePort: 30001 # 根据需要设置 NodePort
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: NodePort # 将类型更改为 NodePort
status:
loadBalancer: {}
访问 Dashboard
现在,你可以通过集群节点的 IP 地址和暴露的端口来访问 Dashboard。
例如,如果你的集群控制平面节点 IP 地址是 192.168.10.52,那么在集群外部的机器上,使用以下 URL 访问 Kubernetes Dashboard:
https://192.168.10.52:30001
登录 Dashboard
打开浏览器并访问上述地址,选择“Token”登录方式,并粘贴之前获取的Token进行登录。
持久化用户token到Secret中(可选)
Kubernetes v1.24.0 及更高版本在创建 ServiceAccount 时不会自动生成 Secret(包含 API 访问令牌),就会导致刚生成的token没过多久就失效了,想要登录还得重新生成token。如果需要,请手动创建或更新 Secret。
- 创建 dashboard-admin 的Secret
该Secret用于存储ServiceAccount 中 dashboard-admin 的token等信息,创建后从 Secret 的 token 字段拿就可以了,不用重新生成token。
# 创建secret部署yaml文件
sudo vi secret-dashboard-token.yaml
将下面的内容复制粘贴到dashboard-token-secret.yaml中
由于ServiceAccount “dashboard-admin” 位于 kubernetes-dashboard 中,所以yaml中的定义也要对应
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: secret-dashboard-token # 修改为 kubernetes-dashboard 命名空间
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "dashboard-admin" # 关联到 dashboard-admin ServiceAccount
# 应用secret的部署yaml文件
kubectl create -f ./secret-dashboard-token.yaml
[root@swarm03 ~]# kubectl create -f secret-dashboard-token.yaml
secret/secret-dashboard-token created
- 查看 dashboard-admin 的 Secret 信息及token
# 创建完 Secret 后,你可以使用以下命令查看 Secret 的详细信息,并提取其中的 token:
kubectl get secret secret-dashboard-token -n kubernetes-dashboard -o yaml
# 仅查看secret中的token
kubectl get secret secret-dashboard-token -n kubernetes-dashboard -o jsonpath='{.data.token}' | base64 --decode