![新版本kubectl中如何处理docker注册表凭证中的特殊字符](https://linux22.com/image/193948/%E6%96%B0%E7%89%88%E6%9C%ACkubectl%E4%B8%AD%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86docker%E6%B3%A8%E5%86%8C%E8%A1%A8%E5%87%AD%E8%AF%81%E4%B8%AD%E7%9A%84%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6.png)
今天我想在 kubernetes v1.21.3 中添加一个 docker 注册表凭证(在低版本的 kubernetes 中工作正常,但在新版本的 kubernetes 中出现问题):
kubectl create secret docker-registry regcred \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=docker654321 \
--docker-password=$balabala123 \
[email protected] \
-n reddwarf-pro
但它告诉我:
error: either --from-file or the combination of --docker-username, --docker-password and --docker-server is required
我应该怎么做才能将 docker 注册表凭据添加到此集群中?这是版本信息:
[root@k8smasterone ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T21:04:39Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}
答案1
问题的根源
为参数--docker-password
提供了一个值,其中包含外壳特殊字符- 这$
。 shell,预处理命令行参数前它们被传递给实际的程序 ( kubectl
) 因此误以为该声明$balabala123
指的是到一个名为的 shell 变量balabala123
并将其替换为该 shell 变量的内容。但是没有定义这样的 shell 变量或(环境变量),因此该字符串$balabala123
被替换为“nothing”,而是kubectl
看到:
--docker-password= \
错误信息的原因是
解决方案
转义特殊字符:在当前设置中,$
是唯一特殊字符到外壳,所以我们只需要转义这个即可。
kubectl create secret docker-registry regcred \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=docker654321 \
--docker-password=\$balabala123 \
[email protected] \
-n reddwarf-pro
同样的问题也被讨论过在 kubernetes 错误报告论坛上。