要将无法直接访问的镜像(如 registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2)下载并上传到本地镜像库,可以按照以下步骤操作:
1. 设置镜像代理源
由于中国国内可能无法直接访问 registry.k8s.io,需要通过国内可用的代理源获取镜像。以下是常见国内镜像源替代:
替代源示例:
- 阿里云镜像仓库: registry.aliyuncs.com
- Docker Hub 国内代理: dockerproxy.com
通过以下命令拉取镜像:
podman pull dockerproxy.com/registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
如果使用阿里云(需要登录阿里云镜像服务):
podman pull registry.aliyuncs.com/google_containers/sig-storage/nfs-subdir-external-provisioner:v4.0.2
2. 重新标记镜像
将镜像标记为适用于本地私有仓库的名称,例如 cp-registry:
podman tag dockerproxy.com/registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 \
localhost:5001/sig-storage/nfs-subdir-external-provisioner:v4.0.2
这里的 localhost:5001 指向本地私有仓库的地址和端口。localhost最好换成FQDN。
3. 推送镜像到本地仓库
确保本地私有仓库正在运行,并且可以访问(如问题中的容器 cp-registry 运行于 localhost:5001)。推送镜像到本地仓库:
podman push localhost:5001/sig-storage/nfs-subdir-external-provisioner:v4.0.2
如果私有仓库启用了认证,添加 --creds 选项提供用户名和密码:
podman push --creds <username>:<password> \
localhost:5001/sig-storage/nfs-subdir-external-provisioner:v4.0.2
4. 验证镜像是否推送成功
登录本地私有仓库,检查镜像是否存在:
curl -k https://localhost:5001/v2/_catalog
查询特定镜像的标签:
curl -k https://localhost:5000/v2/sig-storage/nfs-subdir-external-provisioner/tags/list
5. 在 Kubernetes 集群中使用本地镜像
在 Kubernetes 集群中创建或修改镜像拉取配置,将镜像拉取地址改为本地仓库,例如:
containers:
- name: nfs-provisioner
image: localhost:5001/sig-storage/nfs-subdir-external-provisioner:v4.0.2
如果本地仓库未启用 TLS,可以在 Kubernetes 配置中跳过 TLS 校验:
imagePullSecrets:
- name: regcred
或在 /etc/containers/registries.conf 配置中添加例外。
总结
通过代理源拉取镜像、重标记为本地仓库格式并推送到本地私有仓库,再配置 Kubernetes 使用本地镜像仓库,就能解决镜像无法直接访问的问题。