使用cloudfare worker配置容器镜像代理
前提: 已经对dns,cloudfare,和容器熟悉了
发布worker
和创建cf的pages一个地方,流程也几乎一样 创建完成后把edit一下代码,把这个项目里的代码复制进去就好了,不过你自己的域名要在js文件里改一下
https://github.com/cmliu/CF-Workers-docker.io
这个js貌似是适配docker的,如果我是containerd来拉取镜像的,是有点区别的,在router那里加一下
function routeByHosts(host) {
// 定义路由表
console.log("获得routeByHosts入参",host)
const routes = {
// 生产环境
"quay": "quay.io",
"gcr": "gcr.io",
"k8s-gcr": "k8s.gcr.io",
"k8s": "registry.k8s.io",
"ghcr": "ghcr.io",
"cloudsmith": "docker.cloudsmith.io",
"quay.io": "quay.io",
"gcr.io": "gcr.io",
"k8s.gcr.io": "k8s.gcr.io",
"registry.k8s.io": "registry.k8s.io",
"ghcr.io": "ghcr.io",
"docker.cloudsmith.io": "docker.cloudsmith.io",
// 测试环境
"test": "registry-1.docker.io",
};
if (host in routes) return [ routes[host], false ];
else return [ hub_host, true ];
}
主函数稍作修改
const hostname = url.searchParams.get('hubhost') ||url.searchParams.get('ns')|| url.hostname;
const hostTop = hostname.split('.')[0];// 获取主机名的第一部分
const checkHost = routeByHosts(hostname);
hub_host = checkHost[0]; // 获取上游地址
修改或添加下自己的域名
配置containerd
众所周知,gcr.io k8s.io quay.io等基本上是龟速或者直接解析不出,当我不配置containerd的时候下载基本就是这样的
crictl pull docker.io/calico/kube-controllers:v3.25.0
把containerd的配置文件config.toml关于docker.io的endpoint设置下,其他的镜像地址也照猫画虎一下就ok
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://上面cf配置的域名"]
重启containerd后,基本上就能顺利下载了