Kubernetes1.13安装kubernetes-dashboard及遇到的坑

本文详细记录了在Kubernetes 1.13中安装kubernetes-dashboard的过程,包括yaml配置、RBAC设置、访问方式选择以及遇到的403 Forbidden和Unauthorized问题的解决方案。最终通过修改RoleBinding为ClusterRoleBinding并赋予cluster-admin权限成功访问Dashboard。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kubernetes-dashboard.yaml简介

官网参考
官网推荐安装模式

kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

我为了看下kubernetes-dashboard.yaml的内容,所有先把kubernetes-dashboard.yaml下载下来

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

spec.containers.image:填写dashboard的镜像路径。大家可以通过docker search查询1.10.0版本的dashboard。

spec.containers.args:此处填写的是一些参数,由于kubernetes1.13.0是通过HTTPS安全验证的安装,访问的是http://masterip:6443,因此,此处默认填写了- --auto-generate-certificates,用以自动生成dashboard证书,此处不需要填写apiserver地址。

RBAC配置

因为kubernetes1.13开启了 RBAC 所以这里需要创建一个 RBAC 认证。在Kubernetes1.13安装Helm文中已详述rbac的配置过程,请参考helm rbac配置

dashboard安装启动

官网推荐了两种启动访问方式

执行kubectl proxy命令

可以通过下面的地址进行访问
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
但是存在一个问题

The UI can only be accessed from the machine where the command is executed.
只能从执行命令的机器进行访问

这明显不符合我们的需求,我们是打算通过其他管理机访问

直接通过apiserver访问

https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/, where <master-ip> is IP address or domain name of the Kubernetes master.

通过第二种又遇到了一些坑
访问dashboard网页时,可能出现下面这种报错:

  • 403 Forbidden问题
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get services/p
<think>嗯,用户遇到了Kubernetes Dashboard Pod出现CrashLoopBackOff的问题,需要排查原因并找到解决方案。首先,我得回忆一下CrashLoopBackOff的常见原因。通常这种情况是因为容器启动后崩溃,然后Kubernetes不断重启,每次重启间隔时间增加。所以需要一步步排查。 首先,用户应该检查Pod的详细信息,用kubectl describe pod命令。这样可以看到事件日志,了解Pod的状态变化和可能的错误信息。比如,是否有调度失败、镜像拉取错误或者容器启动失败的原因。比如用户提供的示例输出中,容器已经重启了5次,并且有BackOff警告,说明容器反复崩溃。 接下来,可能需要查看Pod的日志,用kubectl logs命令。不过如果容器一直崩溃,可能需要加上--previous参数来查看前一个实例的日志。比如,用户提到Dashboard的日志中有权限问题,比如无法访问证书文件,这可能导致启动失败。这时候需要检查证书挂载是否正确,路径是否配置正确。 然后,资源限制也是一个可能的原因。如果Dashboard的Pod配置了过高的资源请求或限制,而节点资源不足,就会导致容器无法启动。这时候需要检查Pod的资源配置,调整requests和limits,或者确保节点有足够资源。 另外,镜像问题也不能忽视。比如镜像标签错误或者镜像损坏,导致容器无法启动。需要确认Dashboard的镜像名称和标签是否正确,特别是如果使用了自定义镜像的话。同时,检查镜像拉取策略,是否需要imagePullSecrets来拉取私有镜像。 网络策略或服务依赖也可能导致问题。比如Dashboard需要访问API Server,如果网络策略阻止了这种通信,或者服务依赖的其他组件(如kong代理)没有正确配置,就会导致Dashboard无法正常工作。需要检查相关的网络策略和服务配置。 还有配置文件和参数的问题。Kubernetes Dashboard通常需要一些启动参数,比如端口绑定、证书路径等。如果这些参数配置错误,容器可能启动失败。需要检查Deployment或Pod的配置,确保参数正确,特别是TLS证书相关的路径和文件是否存在。 最后,如果以上步骤都没解决问题,可能需要考虑升级或回滚Dashboard版本。有时候某些版本存在已知的bug,更新到最新版本或回滚到稳定版本可能解决问题。 总结下来,用户需要按照步骤依次排查:描述Pod状态、查看日志、检查资源、验证镜像、检查网络和依赖、核对配置参数,最后考虑版本问题。同时,用户提供的引用中提到检查启动命令和参数,这也是重要的一步。可能需要结合具体错误日志,比如证书权限问题,调整挂载卷的权限或路径设置。</think>### Kubernetes Dashboard Pod CrashLoopBackOff 排查与解决方案 #### 1. 获取 Pod 详细状态与事件日志 执行以下命令检查 Pod 事件: ```bash kubectl describe pod kubernetes-dashboard-kong-96874686b-wm4qf -n kubernetes-dashboard ``` 重点关注输出中的: - **Status**: 当前状态为 `CrashLoopBackOff` 表示容器反复崩溃 - **Restart Count**: 显示已重启次数(例如 `Restart Count: 5`) - **Events**: 包含关键错误提示(如 `Back-off restarting failed container` 或具体错误描述)[^1] #### 2. 查看容器日志定位崩溃原因 使用以下命令查看最近日志: ```bash kubectl logs kubernetes-dashboard-kong-96874686b-wm4qf -n kubernetes-dashboard ``` 若容器已崩溃多次,追加 `--previous` 参数查看前次崩溃日志: ```bash kubectl logs kubernetes-dashboard-kong-96874686b-wm4qf --previous -n kubernetes-dashboard ``` 常见错误场景: - **证书加载失败**: `panic: open /etc/kubernetes/pki/dashboard.crt: no such file or directory` - **权限问题**: `Error: failed to start container: Error response from daemon: oci runtime error: container_linux.go:235` - **端口冲突**: `listen tcp :8443: bind: address already in use` #### 3. 检查资源限制配置 通过以下命令检查资源配额: ```bash kubectl get pod kubernetes-dashboard-kong-96874686b-wm4qf -o=jsonpath='{.spec.containers[*].resources}' -n kubernetes-dashboard ``` 典型问题: ```yaml resources: limits: cpu: "500m" memory: "256Mi" # 内存限制过低可能导致 OOM ``` #### 4. 验证镜像与配置文件 检查 Deployment 配置: ```bash kubectl get deployment kubernetes-dashboard-kong -o yaml -n kubernetes-dashboard ``` 重点关注: - **image 版本**: `image: kubernetesui/dashboard:v2.7.1`(推荐使用稳定版本) - **volumeMounts 路径**: 确认证书挂载路径与容器内路径匹配 - **启动参数**: 检查 `--tls-cert-file` 和 `--tls-key-file` 参数是否正确 #### 5. 网络策略与服务依赖检查 执行端口连通性测试: ```bash kubectl exec -it kubernetes-dashboard-kong-96874686b-wm4qf -n kubernetes-dashboard -- curl -v https://kubernetes.default.svc ``` 确认以下依赖服务状态: ```bash kubectl get svc -n kubernetes-dashboard | grep -E 'dashboard|kong' ``` #### 6. 具体解决方案示例 **场景:证书路径错误** ```bash # 检查 secret 挂载配置 kubectl get secret dashboard-cert -n kubernetes-dashboard -o yaml # 更新 deployment 挂载配置 volumeMounts: - name: cert-volume mountPath: /certs # 确保容器内路径与启动参数一致 args: - --tls-cert-file=/certs/tls.crt - --tls-key-file=/certs/tls.key ``` **场景:权限不足** ```yaml securityContext: runAsUser: 1001 capabilities: add: ["NET_BIND_SERVICE"] # 添加网络绑定权限 ``` ### 进阶排查流程图 $$ \begin{array}{ccc} \text{检查 Pod 描述} & \rightarrow & \text{查看容器日志} \\ \downarrow & & \downarrow \\ \text{资源限制分析} & \leftarrow & \text{网络策略验证} \\ \end{array} $$
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值