如何在Kubernetes Pod中正确创建SSH隧道Sidecar容器并解决CrashLoopBackOff报错
问题原因及解决步骤
- 镜像拉取策略导致加载了旧版本镜像
你本地测试的sql-proxy:latest镜像已经包含tunnel.sh,但Kubernetes节点上缓存了更早构建的、未包含tunnel.sh的同标签镜像,你的Deployment中sidecar容器配置的imagePullPolicy: IfNotPresent会让节点直接使用本地缓存的旧镜像,因此出现找不到脚本的报错。
解决方法:
- 将sidecar容器的镜像拉取策略修改为
imagePullPolicy: Always,每次启动都会拉取最新的镜像 - 更稳妥的方案是给镜像打唯一版本标签(比如
sql-proxy:v1),避免latest标签的版本混淆问题
- 卷名称配置不匹配
即使解决了脚本找不到的问题,后续运行SSH隧道仍然会报错,原因是卷名配置不一致:
sidecar容器的volumeMounts中引用的卷名是keys-sql-proxy,但你在volumes段定义的存储SSH密钥的Secret卷名是spoonity-sql-proxy,两者完全不匹配,导致/keys目录没有正确挂载到密钥Secret,自然找不到私钥文件。
解决方法:
将sidecar容器的volumeMounts配置修改为:
volumeMounts: - mountPath: /keys name: spoonity-sql-proxy readOnly: true
- 可选:修复SSH私钥权限问题
SSH客户端默认要求私钥文件权限为600,否则会出于安全考虑拒绝连接。你当前Secret配置的defaultMode: 420对应八进制权限644,权限过高会导致后续SSH连接报错。
解决方法:
将Secret的defaultMode修改为384(对应八进制权限600):
- name: spoonity-sql-proxy secret: defaultMode: 384 secretName: spoonity-sql-proxy
内容的提问来源于stack exchange,提问作者Chewy
相关产品推荐
相关产品推荐

