새 버전의 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다음을 포함하는 매개변수에 대한 값이 제공됩니다.쉘 특수 문자- 이것 $. 쉘, 전처리 명령줄 매개변수앞으로실제 프로그램( 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 버그 보고 포럼에서.

관련 정보