v1.0.0 開始可用
可以配置 Containerd 連接到私有鏡像倉庫,并使用它們在節(jié)點上拉取私有鏡像。
啟動時,K3s 會檢查?/etc/rancher/k3s/
?中是否存在?registries.yaml
?文件,并指示 containerd 使用文件中定義的鏡像倉庫。如果你想使用一個私有的鏡像倉庫,那么你需要在每個使用鏡像倉庫的節(jié)點上以 root 身份創(chuàng)建這個文件。
請注意,server 節(jié)點默認(rèn)是可以調(diào)度的。如果你沒有在 server 節(jié)點上設(shè)置污點,那么將在它們上運(yùn)行工作負(fù)載,請確保在每個 server 節(jié)點上創(chuàng)建?registries.yaml
?文件。
Containerd 中的配置可以用于通過 TLS 連接到私有鏡像倉庫,也可以與啟用驗證的鏡像倉庫連接。下一節(jié)將解釋?registries.yaml
?文件,并給出在 K3s 中使用私有鏡像倉庫配置的不同例子。
該文件由兩大部分組成:
Mirrors 是一個用于定義專用鏡像倉庫的名稱和 endpoint 的指令,例如。
mirrors:
mycustomreg.com:
endpoint:
- "https://mycustomreg.com:5000"
每個 mirror 必須有一個名稱和一組 endpoint。當(dāng)從鏡像倉庫中拉取鏡像時,containerd 會逐一嘗試這些 endpoint URL,并使用第一個可用的 endpoint。
v1.21.0 + K3s1 起可用
每個鏡像都可以有一組重寫。重寫可以根據(jù)正則表達(dá)式來改變鏡像的標(biāo)簽。如果鏡像倉庫中的組織/項目結(jié)構(gòu)與上游的不同,這很有用。
例如,以下配置將透明地從 ?registry.example.com:5000/mirrorproject/rancher-images/coredns-coredns:1.6.3
? 拉取鏡像 ?docker.io/rancher/coredns-coredns:1.6.3
?:
mirrors:
docker.io:
endpoint:
- "https://registry.example.com:5000"
rewrite:
"^rancher/(.*)": "mirrorproject/rancher-images/$1"
鏡像仍將以原始名稱存儲,所以 ?crictl image ls
? 將顯示 ?docker.io/rancher/coredns-coredns:1.6.3
? 在節(jié)點上是可用的,即使鏡像是以不同的名字從鏡像倉庫中拉取的。
Configs 部分定義了每個 mirror 的 TLS 和憑證配置。對于每個 mirror,你可以定義?auth
?或?tls
?。
?tls
?部分包括:
指令 | 描述 |
---|---|
cert_file
|
用來與鏡像倉庫進(jìn)行驗證的客戶證書路徑 |
key_file
|
用來驗證鏡像倉庫的客戶端密鑰路徑 |
ca_file
|
定義用于驗證鏡像倉庫服務(wù)器證書文件的 CA 證書路徑 |
insecure_skip_verify
|
定義是否應(yīng)跳過鏡像倉庫的 TLS 驗證的布爾值 |
?auth
?部分由用戶名/密碼或身份驗證令牌組成:
指令 | 描述 |
---|---|
username
|
鏡像倉庫身份驗證的用戶名 |
password
|
鏡像倉庫身份驗證的用戶密碼 |
auth
|
鏡像倉庫 auth 的認(rèn)證 token |
以下是在不同模式下使用私有鏡像倉庫的基本例子:
下面的例子展示了當(dāng)你使用 TLS 時,如何在每個節(jié)點上配置?/etc/rancher/k3s/registries.yaml
?。
mirrors:
docker.io:
endpoint:
- "https://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
auth:
username: xxxxxx # 這是私有鏡像倉庫的用戶名
password: xxxxxx # 這是私有鏡像倉庫的密碼
tls:
cert_file: # 鏡像倉庫中使用的cert文件的路徑。
key_file: # 鏡像倉庫中使用的key文件的路徑。
ca_file: # 鏡像倉庫中使用的ca文件的路徑。
mirrors:
docker.io:
endpoint:
- "https://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
tls:
cert_file: # 鏡像倉庫中使用的cert文件的路徑。
key_file: # 鏡像倉庫中使用的key文件的路徑。
ca_file: # 鏡像倉庫中使用的ca文件的路徑。
下面的例子展示了當(dāng)你不使用 TLS 時,如何在每個節(jié)點上配置?/etc/rancher/k3s/registries.yaml
?。
mirrors:
docker.io:
endpoint:
- "http://mycustomreg.com:5000"
configs:
"mycustomreg:5000":
auth:
username: xxxxxx # 這是私有鏡像倉庫的用戶名
password: xxxxxx # 這是私有鏡像倉庫的密碼
mirrors:
docker.io:
endpoint:
- "http://mycustomreg.com:5000"
在沒有 TLS 通信的情況下,需要為 endpoints 指定?
http://
?,否則將默認(rèn)為 https。
為了使鏡像倉庫更改生效,你需要重新啟動每個節(jié)點上的 K3s。
首先,從 GitHub 上獲取你正在使用的版本的 k3s-images.txt 文件。 從 docker.io 中拉取 k3s-images.txt 文件中列出的 K3s 鏡像。
示例: ?docker pull docker.io/rancher/coredns-coredns:1.6.3
?
然后,將鏡像重新標(biāo)記成私有鏡像倉庫。
示例: ?docker tag coredns-coredns:1.6.3 mycustomreg:5000/coredns-coredns
?
最后,將鏡像推送到私有鏡像倉庫。
示例: ?docker push mycustomreg.com:5000/coredns-coredns
?
更多建議: