Docker

在創建 Pod 時在 GKE 中獲取“x509:由未知機構簽署的證書”拉取鏡像(私有系統資料庫)

  • June 17, 2021

我生成了一個 CA 證書,然後基於它為位於同一 GKE 集群中的私有系統資料庫頒發了證書。將伺服器證書放入私有系統資料庫,將 CA 證書放入所有 GKE 節點並執行:

update-ca-certificates && systemctl restart docker

圖像正在建構並毫無問題地放入私有系統資料庫。當 pod 嘗試從儲存庫中提取圖像時,我收到錯誤消息:

x509: certificate signed by unknown authority

此外,我嘗試將 CA 證書放入certs.ddocker 目錄(10.3.240.100:3000 — 私有系統資料庫的 IP 地址)並在 GKE 集群的每個節點上重新啟動 docker,但這也無濟於事:

/etc/docker/certs.d/10.3.240.100:3000/ca.cert

如何解決這個問題呢?我是否正確理解 GKE 節點的 docker 在創建 pod 時負責拉取圖像?

在伺服器上安裝根 CA 證書。就是這樣——現在錯誤應該消失了。如果您不知道根 CA,請在瀏覽器(即 Chrome)中打開出現錯誤的 URL。點擊 URL 旁邊的鎖並選擇證書(有效)。

參考連結:

https://docs.docker.com/registry/insecure/

https://writeabout.net/2020/03/25/x509-certificate-signed-by-unknown-authority/

通過將根 CA 證書文件移動到 /usr/local/share/ca-certificates 然後執行 sudo update-ca-certificates,確保您已添加證書。

解決此問題的第一步是重新啟動 docker,以便系統可以檢測到作業系統證書的更改。docker 有一個額外的位置,我們可以使用它來信任單個系統資料庫伺服器 CA。CA證書需要放在:

/etc/docker/certs.d/<docker registry>/ca.crt

如果我們需要包含埠號,我們需要在圖像標籤中指定它。例如:

/etc/docker/certs.d/my-registry.example.com:5000/ca.crt

如果上述解決方案不能解決問題,則需要執行以下步驟 -

X509 錯誤通常表明您嘗試使用自簽名證書而未正確配置 Docker 守護程序

1:創建文件 /etc/docker/daemon.json 並添加 insecure-registries

{
“insecure-registries” : [“docker.domain.com:3000”]
}

將“docker.domain.com”替換為您的 Docker Registry 實例主機名,將埠“3000”替換為執行 Docker Registry 的埠。

啟用不安全的系統資料庫後,Docker 會執行以下步驟:

  • 首先,嘗試使用 HTTPS。
  • 如果 HTTPS 可用但證書無效,則忽略證書錯誤。如果 HTTPS 不可用,請回退到 HTTP。

2:通過執行命令重啟docker守護程序

systemctl restart docker

3:創建與主機同名的目錄

mkdir -p /etc/docker/certs.d/docker.domain.com

4:將證書保存在新創建的目錄中

ex +’/BEGIN CERTIFICATE/,/END CERTIFICATE/p’ <(echo | OpenSSL s_client -show certs -connect docker.domain.com:443) -suq > /etc/docker/certs.d/docker.domain.com /docker_registry.crt

  • 如果您從私有系統資料庫中提取圖像,請確保您已創建一個包含您需要訪問的憑據的 Secret。還要確保您已在適當的命名空間中添加了 Secret。
  • 您還需要在 Pod 上設置imagePullSecrets 欄位。該欄位告訴 Kubernetes 在向系統資料庫進行身份驗證時應該使用哪個 Secret。

引用自:https://serverfault.com/questions/1065424