K8s 安装 dashboard 图形化界面

Dashboard 主页:https://github.com/kubernetes/dashboard

使用 helm 安装 dashboard 可安装最新版(需网络可以访问国际互联网)。由于 dashboard 非必须,本案例安装 2.7.0,使用 Manifest-based 方式安装。

Manifest-based 方式安装(默认国内环境,无法访问国际互联网)

下载 Kubernetes Dashboard 2.7.0 配置文件(CP 节点执行)

# 使用浏览器访问如下地址:
# https://github.com/kubernetes/dashboard/blob/v2.7.0/aio/deploy/recommended.yaml
# 复制出 recommended.yaml 的内容,并在服务器上创建 recommended.yaml,粘贴相关内容

# 过滤出镜像地址
grep "image:" recommended.yaml
          image: kubernetesui/dashboard:v2.7.0
          image: kubernetesui/metrics-scraper:v1.0.8

导入所需镜像(所有 Worker 节点执行)

# 通过其他方式拉取镜像 tar 包并上传至服务器
# 使用 Containerd 导入镜像
# 查看 namespace
ctr namespace ls
# 根据查到的 namespace 导入镜像
ctr -n k8s.io images import dashboard.tar
ctr -n k8s.io images import metrics-scraper.tar

执行安装命令

kubectl apply -f recommended.yaml

# 查看是否创建成功
kubectl get all -n kubernetes-dashboard

创建管理员用户

cat > dashboard-adminuser.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
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

kubectl apply -f dashboard-adminuser.yaml

修改 service 以方便访问

# 查看 service
kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
dashboard-metrics-scraper   ClusterIP   10.98.100.205   <none>        8000/TCP   64m
kubernetes-dashboard        ClusterIP   10.99.209.74    <none>        443/TCP    64m

# 若上述查询结果中 kubernetes-dashboard 的 TYPE 为 ClusterIP
# 则需修改为 NodePort ,以方便访问

# 导出 kubernetes-dashboard service 配置
kubectl get svc kubernetes-dashboard -n kubernetes-dashboard -o yaml > kubernetes-dashboard-svc.yaml

# 修改导出的配置
vim kubernetes-dashboard-svc.yaml
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
    nodePort: 32443 # 添加此项配置
  type: NodePort # 修改此项配置的 ClusterIP 为 NodePort

# 应用配置
kubectl apply -f kubernetes-dashboard-svc.yaml

# 查看修改结果,若 TYPE 为 NodePort 则代表修改成功
kubectl get svc kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.99.209.74   <none>        443:32443/TCP   76m

创建 Token 用于访问 web

kubectl create token admin-user -n kubernetes-dashboard

访问 web 页面

# 使用浏览器访问 32443 端口,使用上一步创建的 Token
https://192.168.1.25:32443

Helm 方式安装(需访问国际互联网)

安装 helm

# https://github.com/helm/helm/releases
# Download your desired version

# Unpack it
tar -zxvf helm-v3.15.3-linux-amd64.tar.gz

# Find the helm binary in the unpacked directory, and move it to its desired destination
mv linux-amd64/helm /usr/local/bin/helm

helm 安装 dashboard

# Add kubernetes-dashboard repository
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

# Deploy a Helm Release named "kubernetes-dashboard" using the kubernetes-dashboard chart
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
  --create-namespace --namespace kubernetes-dashboard

映射服务用于访问(原命令见下方备注)

nohup kubectl -n kubernetes-dashboard port-forward \
  --address 192.168.1.16 \
  svc/kubernetes-dashboard-kong-proxy 8443:443 &
  
# 执行完映射命令后,可以使用浏览器访问192.168.1.16的8443端口直接访问dashboard的web

创建管理员用户

cat > dashboard-adminuser.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
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

kubectl apply -f dashboard-adminuser.yaml

创建 Token 用于访问 web

kubectl create token admin-user -n kubernetes-dashboard

访问 web 页面

# 使用浏览器访问 8443 端口,使用上一步创建的 Token
https://192.168.1.16:8443

备注

映射原始命令

kubectl -n kubernetes-dashboard port-forward \
  svc/kubernetes-dashboard-kong-proxy 8443:443

这条命令用于在本地和 Kubernetes 集群中的 kubernetes-dashboard-kong-proxy 服务之间建立端口转发,具体含义如下:

  1. kubectl: Kubernetes 命令行工具,用于管理集群。

  2. -n kubernetes-dashboard: 指定命名空间为 kubernetes-dashboard,操作将在该命名空间内进行。

  3. port-forward: 用于在本地和集群中的服务或 Pod 之间建立端口转发。

  4. svc/kubernetes-dashboard-kong-proxy: 指定要转发端口的服务,svc 表示服务,kubernetes-dashboard-kong-proxy 是服务名称。

  5. 8443:443: 将本地的 8443 端口转发到服务的 443 端口。443 是服务端口,8443 是本地端口。

总结

该命令将本地的 8443 端口与 kubernetes-dashboard 命名空间中的 kubernetes-dashboard-kong-proxy 服务的 443 端口连接起来。执行后,可以通过 https://localhost:8443 访问 Kubernetes Dashboard。

注意事项

  • 确保 kubectl 已配置正确的集群上下文。

  • 命令执行期间,端口转发保持活动,终止命令会停止转发。

要将 kubectl port-forward 的访问从 localhost 改为使用局域网 IP 访问,需要在命令中明确指定本地监听的 IP 地址。默认情况下,kubectl port-forward 只监听 localhost(即 127.0.0.1),但可以通过 --address 参数指定监听的 IP 地址。

Last updated