新版本kubectl中如何处理docker注册表凭证中的特殊字符

新版本kubectl中如何处理docker注册表凭证中的特殊字符

今天我想在 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 错误报告论坛上

相关内容