不重啓Docker能添加自籤SSL證書鏡像倉庫嗎?

應用背景

在企業應用Docker規劃初期配置非安全鏡像倉庫時,有時會遺漏一些倉庫沒配置,但此時應用程序已經在Docker平臺上部署起來了,體量越大就越不會讓人去直接重啓Docker。

那麼,不重啓Docker能添加自籤SSL證書鏡像倉庫嗎?

可以,在文中會找到答案。

實現思路

實現思路來自Docker官網(https://docs.docker.com/registry/insecure/),大意是通過複製鏡像倉庫的自簽證書到操作系統目錄,或者到docker的配置目錄中。這樣就可實現不重啓使用該倉庫了。

這裏有個問題是:“某些情況下,例如鏡像倉庫不是我們搭建的 或 拿不到證書,這時候怎麼辦?”

基於命令是可以拿得到的

實現方式

命令行

通過openssl輸出X.509證書到docker證書目錄中實現需求。

# 創建鏡像倉庫證書目錄,xxx.com.cn需替換爲鏡像倉庫域名,如端口非443則需要追加:port
mkdir -p /etc/docker/certs.d/xxx.com.cn

# 使用openssl獲取鏡像倉庫的X.509證書,寫入剛創建目錄下文件中,如端口非443則需替換
echo -n | openssl s_client -connect xxx.com.cn:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/xxx.com.cn/ca.crt

# 測試登錄、拉取等操作
docker login xxx.com.cn
docker pull xxx.com.cn/somepath/nginx:latest

示例:

mkdir -p /etc/docker/certs.d/harbor.test.com.cn:5000

echo -n | openssl s_client -connect harbor.test.com.cn:5000 2>/dev/null | openssl x509 > /etc/docker/certs.d/harbor.test.com.cn:5000/ca.crt

docker login harbor.test.com.cn:5000

Shell腳本

cat > add-insecure-repo.sh <<EOF
#/bin/bash
if [ "\$1x" == "x" ]; then
	echo "請輸入鏡像倉庫地址";
	exit;
fi

REPO=\$1
#包含:443需去除
if [[ "\$1" =~ ":443" ]]; then
	REPO=\${1%:443*}
fi
#包含https://需去除
if [[ "\$REPO" =~ "https://" ]]; then
	REPO=\${REPO#*https://}
fi

mkdir -p /etc/docker/certs.d/\$REPO
#帶端口號的不加:443,不帶的需要加
if [[ "\$REPO" =~ ":" ]]; then
	echo -n | openssl s_client -connect \$REPO 2>/dev/null | openssl x509 > /etc/docker/certs.d/\$REPO/ca.crt
else
	echo -n | openssl s_client -connect \$REPO:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/\$REPO/ca.crt
fi
EOF

# 執行示例
sh add-insecure-repo.sh harbor.test.com.cn:5000

寫作不易,如果有用就點個贊再走唄!~

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章