前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这个镜像代理服务,帮您在 K8S 中愉快地拉取国外镜像

这个镜像代理服务,帮您在 K8S 中愉快地拉取国外镜像

作者头像
我的小碗汤
发布2023-10-27 18:15:26
1K0
发布2023-10-27 18:15:26
举报
文章被收录于专栏:我的小碗汤我的小碗汤

大家好,今天给大家介绍一个开源项目:registry-proxy。

目前支持的境外镜像仓库:

  • docker.io
  • ghcr.io
  • gcr.io
  • k8s.gcr.io
  • registry.k8s.io
  • quay.io
  • mcr.microsoft.com

PS:感谢 Docker Proxy 提供的镜像代理服务,本项目才能得以实现。?

实现原理

使用 Mutating Webhook 准入控制器实现。当集群中 Pod 创建时,Mutating Webhook 的工作流程如下:

  1. 判断 Pod 是否属于排除的命名空间,如果是,结束流程;
  2. 判断 Pod 是否属于包含的命名空间,如果不是,结束流程;
  3. 依次判断 Pod 中的容器镜像是否属于包含的镜像仓库,如果是,替换为 Docker Proxy 代理镜像;

快速安装

安装 cert-manager

如果集群中已经安装了 cert-manager,可以跳过这一步。

这里提供快速安装的方式:

代码语言:javascript
复制
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml

# 代理地址
kubectl apply -f https://ghproxy.com/https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml

官方文档:Install cert-manager。

安装 registry-proxy

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/ketches/registry-proxy/master/deploy/manifests.yaml

# 代理地址
kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/ketches/registry-proxy/master/deploy/manifests.yaml

配置

三个配置参数,以下给出默认配置,只有在命名空间范围内的 Pod,且 Pod 镜像在 Registry 范围内,容器镜像才会修改为 Docker Proxy 代理镜像。

  1. excludeNamespaces:["kube-system", "kube-public", "kube-node-lease"]
  2. includeNamespaces: ["*"]
  3. includeRegistries: ["docker.io", "ghcr.io", "gcr.io", "k8s.gcr.io", "registry.k8s.io", "quay.io", "mcr.microsoft.com"]

通过 ConfigMap 修改默认配置,修改会实时生效。

示例:限定代理命名空间 default、dev 和 staging 中 docker.io 的镜像。

代码语言:javascript
复制
kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: registry-proxy-config
  namespace: registry-proxy
data:
  config.yaml: |
    excludeNamespaces:
    - kube-system
    - kube-public
    - kube-node-lease
    includeNamespaces:
    - default
    - dev
    - staging
    includeRegistries:
    - "docker.io"
EOF

使用方式

示例

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/ketches/registry-proxy/master/examples/dockerhub-nginx.yaml

# 代理地址
kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/ketches/registry-proxy/master/examples/dockerhub-nginx.yaml

示例中的 Pod 镜像为 nginx:latest,经过 registry-proxy 处理后,容器镜像变为 dockerproxy.com/library/nginx:latest

代码语言:javascript
复制
kubectl get pod dockerhub-nginx -o=jsonpath='{.spec.containers[*].image}'

卸载&清理

卸载 registry-proxy

代码语言:javascript
复制
kubectl delete -f https://raw.githubusercontent.com/ketches/registry-proxy/master/deploy/manifests.yaml

# 代理地址
kubectl delete -f https://ghproxy.com/https://raw.githubusercontent.com/ketches/registry-proxy/master/deploy/manifests.yaml

清理示例

代码语言:javascript
复制
kubectl delete -f https://raw.githubusercontent.com/ketches/registry-proxy/master/examples/dockerhub-nginx.yaml

# 代理地址
kubectl delete -f https://ghproxy.com/https://raw.githubusercontent.com/ketches/registry-proxy/master/examples/dockerhub-nginx.yaml

代理参考

Docker Hub 官方镜像代理

  • 常规镜像代理
    • stilleshan/frpc:latest => dockerproxy.com/stilleshan/frpc:latest
  • 根镜像代理
    • nginx:latest => dockerproxy.com/library/nginx:latest

GitHub Container Registry

  • 常规镜像代理
    • ghcr.io/username/image:tag => ghcr.dockerproxy.com/username/image:tag

Google Container Registry

  • 常规镜像代理
    • gcr.io/username/image:tag => gcr.dockerproxy.com/username/image:tag

Google Kubernetes

  • 常规镜像代理
    • k8s.gcr.io/username/image:tag => k8s.dockerproxy.com/username/image:tag
    • registry.k8s.io/username/image:tag => k8s.dockerproxy.com/username/image:tag
  • 根镜像代理
    • k8s.gcr.io/coredns:1.6.5 => k8s.dockerproxy.com/coredns:1.6.5
    • registry.k8s.io/coredns:1.6.5 => k8s.dockerproxy.com/coredns:1.6.5

Quay.io

  • 常规镜像代理
    • quay.io/username/image:tag => quay.dockerproxy.com/username/image:tag

Microsoft Artifact Registry

  • 常规镜像代理
    • mcr.microsoft.com/azure-cognitive-services/diagnostic:latest => mcr.dockerproxy.com/azure-cognitive-services/diagnostic:latest

欢迎大家体验或参与该项目。

作者:dp 出处:https://juejin.cn/post/7292948455549698060

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-25,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现原理
  • 快速安装
    • 安装 cert-manager
      • 安装 registry-proxy
        • 配置
        • 使用方式
          • 示例
          • 卸载&清理
            • 卸载 registry-proxy
              • 清理示例
              • 代理参考
                • Docker Hub 官方镜像代理
                  • GitHub Container Registry
                    • Google Container Registry
                      • Google Kubernetes
                        • Quay.io
                          • Microsoft Artifact Registry
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                          http://www.vxiaotou.com