新しいバージョンの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のバグを見てフォーラムで

おすすめ記事