k8s集群部署 - Dashboard v2.7

k8s集群部署 - Dashboard v2.7

  • 介绍
    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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值