这是在使用 k3s 时处理私有镜像仓库和认证的常见问题。
在 k3s worker 节点上,您无需直接修改 Docker 或标准 containerd 的配置文件,而是需要使用 k3s 提供的专门配置方法。K3s 会在后台管理和配置其内建的 containerd 实例。
您需要配置一个名为 registries.yaml 的文件。
k3s 配置私有镜像仓库及认证
步骤 1: 创建或编辑 registries.yaml 文件
K3s 默认会在 /etc/rancher/k3s/ 目录下查找镜像仓库配置文件。如果文件不存在,请创建它。
在 Worker 节点上创建配置文件目录:
sudo mkdir -p /etc/rancher/k3s/
创建或编辑 registries.yaml 文件:
sudo nano /etc/rancher/k3s/registries.yaml
步骤 2: 配置认证信息(Basic Auth)
在这个 registries.yaml 文件中,您需要为您的私有仓库 (l-docker.itfish.cn) 添加 configs 和 auth 部分,使用 Base64 编码的用户名和密码。
生成 Base64 编码凭证:
将您的用户名和密码用冒号 : 连接起来,然后进行 Base64 编码。
# 替换 YOUR_USERNAME 和 YOUR_PASSWORD 为您的实际凭证
echo -n "YOUR_USERNAME:YOUR_PASSWORD" | base64 -w 0
假设输出为:eW91c2VyOmFwYXNzd29yZA==
编辑 registries.yaml 内容:
将 Base64 字符串填入 auth: username: password: 字段的 auth 部分。
# /etc/rancher/k3s/registries.yaml
# --- 1. 定义私有仓库的认证信息 ---
# 如果您的私有仓库 l-docker.itfish.cn 使用 HTTPS 并且有认证,请这样配置:
configs:
"l-docker.itfish.cn":
auth:
# auth 字段的值是 Base64 编码的 "username:password"
auth: "eW91c2VyOmFwYXNzd29yZA==" # 替换为您自己的 Base64 字符串
# --- 2. (可选) 定义镜像拉取地址重定向 ---
# 如果您想把所有 Docker Hub (docker.io) 的镜像拉取请求,
# 重定向到您的私有仓库 l-docker.itfish.cn 进行代理拉取,请添加此部分。
mirrors:
# 将 docker.io 的镜像拉取指向您的私有仓库
"docker.io":
endpoint:
- "https://l-docker.itfish.cn"
# 注意:重定向功能只有在您的私有仓库是公有镜像的代理时才有意义。
# ----------------------------------------------------
步骤 3: 重启 k3s 服务
配置完成后,您需要重启 k3s 服务,让 containerd 重新加载这个配置文件。
sudo systemctl restart k3s-agent
步骤 4: 验证
重启服务后,您就可以通过 Kubernetes/k3s 部署应用,尝试拉取私有镜像了。
例如,您可以使用您最初尝试拉取的镜像路径来创建一个 Pod 进行测试:
# test-pull.yaml
apiVersion: v1
kind: Pod
metadata:
name: private-image-test
spec:
containers:
- name: my-private-container
# 使用完整的私有仓库路径
image: l-docker.itfish.cn/rancher/local-path-provisioner:v0.0.31
command: ["sleep", "3600"]
如果 Pod 能够顺利启动并进入 Running 状态,说明认证配置成功。