Rancher Dashboard Shell 镜像拉取难题:从超时到认证的实战排查与修复

张开发
2026/4/14 0:27:15 15 分钟阅读

分享文章

Rancher Dashboard Shell 镜像拉取难题:从超时到认证的实战排查与修复
1. 问题背景与现象分析最近在帮客户部署Rancher时遇到一个典型问题当点击Dashboard右上角的Shell按钮时系统尝试创建dashboard-shell Pod却失败了。这个问题在国内企业环境中特别常见主要表现有两种第一种是超时错误日志显示类似Failed to pull image docker.io/rancher/shell:v0.1.21: failed to resolve reference docker.io/rancher/shell:v0.1.21: dial tcp 199.59.149.235:443: i/o timeout第二种是认证失败即使已经配置了私有镜像仓库Failed to pull image uhub.service.ucloud.cn/sre-paas/rancher/shell:v0.1.21: failed to authorize: 401 Unauthorized这两种情况本质上都是镜像拉取问题但成因不同。第一种是网络连通性问题Rancher默认使用Docker Hub上的镜像国内访问经常不稳定。第二种是虽然配置了镜像仓库但缺乏正确的认证信息。2. 解决方案一修改默认Shell镜像地址2.1 理解Rancher的Shell镜像机制Rancher通过MutatingWebhookConfiguration动态注入Shell Pod的配置。这个Webhook会读取一个名为shell-image的Setting资源获取要使用的镜像地址。默认情况下这个值指向Docker Hub。我们可以通过以下命令查看当前配置kubectl get settings.management.cattle.io shell-image -n cattle-system -o yaml如果这个资源不存在很多新版本确实如此我们需要手动创建。2.2 配置私有镜像仓库地址假设我们使用UCloud的镜像仓库服务配置步骤如下创建或更新shell-image设置kubectl apply -f - EOF apiVersion: management.cattle.io/v3 kind: Setting metadata: name: shell-image namespace: cattle-system value: uhub.service.ucloud.cn/sre-paas/rancher/shell:v0.1.21 EOF重启Rancher Deployment使配置生效kubectl rollout restart deployment rancher -n cattle-system这里有几个关键点需要注意镜像地址必须包含完整的仓库路径和tag确保你使用的镜像仓库中确实存在对应版本的镜像重启Rancher是必须的因为配置是启动时加载的3. 解决方案二配置镜像拉取密钥3.1 创建docker-registry Secret大多数企业级镜像仓库都需要认证。我们需要创建一个Secret来存储认证信息kubectl create secret docker-registry ucloud-regcred \ --docker-serveruhub.service.ucloud.cn \ --docker-usernameyour-username \ --docker-passwordyour-password \ -n cattle-system这里有几个实用技巧密码中如果包含特殊字符建议先base64编码再使用可以添加--docker-email参数虽然不是必须的Secret必须创建在cattle-system命名空间3.2 绑定Secret到ServiceAccount创建Secret后需要将其绑定到default ServiceAccountkubectl patch serviceaccount default \ -p {imagePullSecrets: [{name: ucloud-regcred}]} \ -n cattle-system验证是否绑定成功kubectl get serviceaccount default -n cattle-system -o yaml应该能看到类似输出imagePullSecrets: - name: ucloud-regcred4. 问题排查与验证4.1 检查Pod状态和事件如果配置后仍然失败可以检查具体Pod的状态kubectl describe pod shell-pod-name -n cattle-system重点关注Events部分常见问题包括镜像路径错误检查shell-image设置认证失败检查Secret和服务账号绑定网络策略限制检查Calico/NetworkPolicy配置4.2 验证镜像拉取密钥继承Dashboard Shell Pod应该自动继承default ServiceAccount的imagePullSecrets。可以通过以下命令验证kubectl get pod shell-pod-name -n cattle-system -o yaml | grep imagePullSecrets如果没有显示可能是MutatingWebhookConfiguration没有正确工作需要检查Rancher的日志。5. 高级场景与注意事项5.1 混合云环境下的配置在多集群或混合云环境中需要注意每个集群都需要单独配置shell-image Setting如果使用全局镜像仓库确保所有集群都能访问考虑使用Cluster API批量管理这些配置5.2 镜像同步策略为了避免依赖外部镜像仓库建议使用工具定期同步所需镜像到私有仓库考虑使用Harbor的代理缓存功能建立镜像更新通知机制5.3 版本升级注意事项Rancher升级时可能会更新默认Shell镜像版本需要提前检查新版本使用的镜像tag同步新版本镜像到私有仓库更新shell-image Setting在实际操作中我发现很多问题都是由于镜像版本不匹配引起的。比如Rancher升级后使用了新版本的shell镜像但私有仓库中只有旧版本。这种情况下的错误信息可能不太直观需要仔细对比版本号。

更多文章