如何登录Kubernetes Dashboard容器?Traefik转发K8s Dashboard遇404
解决无法登录Kubernetes Dashboard容器的问题
首先得明确:你遇到的问题根源是官方Kubernetes Dashboard镜像属于distroless(无发行版)镜像——这类镜像只打包了运行Dashboard所需的核心二进制文件,完全没有bash、sh、ls这类常用工具,所以你没法通过kubectl exec进入容器执行任何命令。
针对你的需求的解决方案
1. 验证Dashboard服务是否正常(无需进入容器)
如果你只是想确认Dashboard的首页是否能正常返回,完全不需要进入容器,用kubectl port-forward直接把容器的端口转发到本地即可:
# 转发Dashboard容器的8443端口到本地8443 kubectl port-forward pod/kubernetes-dashboard-6466b68b-mrrs9 8443:8443 -n kube-system
保持这个命令运行,然后打开另一个终端执行:
# 注意是HTTPS,Dashboard默认用HTTPS提供服务,-k忽略自签名证书验证 curl -k -L https://127.0.0.1:8443
这样就能获取到首页的HTML内容了。
2. 必须进入容器调试?用Sidecar容器
如果确实需要查看容器内部的文件或者调试,推荐给Dashboard的Pod添加一个带shell工具的Sidecar容器(不修改主容器的镜像,更安全):
- 编辑Dashboard的Deployment:
kubectl edit deployment kubernetes-dashboard -n kube-system
- 在
spec.template.spec.containers数组里添加一个新的容器配置:
- name: debug-sidecar image: busybox:latest command: ["sleep", "3600"] # 让容器保持运行状态 resources: limits: memory: "128Mi" cpu: "500m"
- 保存退出后,Kubernetes会自动滚动更新Pod。等新Pod启动完成后,执行以下命令进入Sidecar容器:
# 替换成新的Pod名称,比如kubernetes-dashboard-xxxxxx-yyyyy kubectl exec -it kubernetes-dashboard-xxxxxx-yyyyy -c debug-sidecar -- /bin/sh -n kube-system
这个Sidecar用的是busybox镜像,自带sh、ls、curl等常用工具,你可以通过它访问主容器的文件系统(Pod内的容器共享网络和存储卷,主容器的文件一般在/路径下,可直接查看)。
3. 为什么之前的命令会报错?
- 一开始的
NotFound错误是因为你没切换到kube-system命名空间,Dashboard默认部署在这个命名空间下; - 后来的
exec failed错误都是因为主容器镜像里完全没有对应的可执行文件(不管是bash、sh还是ls),所以根本没法执行任何命令。
注意事项
官方用distroless镜像的目的是最小化攻击面,减少镜像体积和潜在的安全风险,所以不建议在生产环境替换Dashboard的镜像为带shell的版本。调试尽量用port-forward或者Sidecar的方式。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

