오늘은 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
다음을 포함하는 매개변수에 대한 값이 제공됩니다.쉘 특수 문자- 이것 $
. 쉘, 전처리 명령줄 매개변수앞으로실제 프로그램( kubectl
) 에 전달되므로오해이 진술은 $balabala123
다음을 가리킨다.라는 쉘 변수에balabala123
이를 쉘 변수의 내용으로 대체합니다. 그러나 그러한 쉘 변수 또는 (환경 변수)가 정의되어 있지 않으므로 문자열은 $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 버그 보고 포럼에서.