K3s 私有鏡像倉庫配置參考

2022-08-22 11:44 更新

私有鏡像倉庫配置參考

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
  • configs

Mirrors

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

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

以下是在不同模式下使用私有鏡像倉庫的基本例子:

使用 TLS

下面的例子展示了當(dāng)你使用 TLS 時,如何在每個節(jié)點上配置?/etc/rancher/k3s/registries.yaml?。

  • 有認(rèn)證
  • 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文件的路徑。
  • 無認(rèn)證
  • mirrors:
      docker.io:
        endpoint:
          - "https://mycustomreg.com:5000"
    configs:
      "mycustomreg:5000":
        tls:
          cert_file: # 鏡像倉庫中使用的cert文件的路徑。
          key_file:  # 鏡像倉庫中使用的key文件的路徑。
          ca_file:   # 鏡像倉庫中使用的ca文件的路徑。

不使用 TLS

下面的例子展示了當(dāng)你不使用 TLS 時,如何在每個節(jié)點上配置?/etc/rancher/k3s/registries.yaml?。

  • 有認(rèn)證
  • mirrors:
      docker.io:
        endpoint:
          - "http://mycustomreg.com:5000"
    configs:
      "mycustomreg:5000":
        auth:
          username: xxxxxx # 這是私有鏡像倉庫的用戶名
          password: xxxxxx # 這是私有鏡像倉庫的密碼
  • 無認(rèn)證
  • 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?


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號