专栏首页落跑架构师M让 K8S 在 GFW 内愉快的航行

让 K8S 在 GFW 内愉快的航行

前言

K8S(kubernetes) 日渐火爆,但由于出自Google,对GFW内的用户及其的不友好。 而之前的 *.azk8s.cn 全能镜像站,也于 2020年4月2日限制了对 Azure China 之外的 IP访问,无疑又是雪上加霜 (很多生产集群应该开始跳脚了)。

https://github.com/Azure/container-service-for-azure-china/issues/58 ps: 这么大的事件,居然没有提前公告。。。

今天我们来梳理一下,K8S在GFW内如何愉快的航行。 首先梳理一下 GFW 内 K8S 需要翻越的几座墙。

Linux Source

用于安装 docker、kubelet、kubectl、kubeadm 等软件。

容器镜像库

目前常用的K8S镜像库有

  1. docker.io (docker hub公共镜像库)
  2. gcr.io (Google container registry)
  3. k8s.gcr.io (等同于 gcr.io/google-containers)
  4. quay.io (Red Hat运营的镜像库)

GFW应对之法

Linux Source

Linux的源镜像比较简单,这边推荐阿里的镜像源。 Docker CE: https://developer.aliyun.com/mirror/docker-ce Kubernetes: https://developer.aliyun.com/mirror/kubernetes

容器镜像库

镜像库是一个比较难找的资源,由于 *.azk8s.cn 的关闭目前 gcr.io 还没有可替代资源,如大家有相关资源可以联系我,我会添加到文章上。

Docker Hub

关于 Docker Hub 国内有比较多的加速镜像源。 例如:

  1. 阿里云镜像加速器 (推荐, 需要注册用户)
    • 注册地址: https://cr.console.aliyun.com/cn/instances/mirrors
  2. DaoCloud镜像加速器
    • 加速器地址: https://f1361db2.m.daocloud.io
  3. 七牛云镜像加速器
    • 加速器地址: https://reg-mirror.qiniu.com

使用方式

修改Docker的配置,为其添加 registry-mirrors ,需要重启docker。 配置文件路径位于 /etc/docker/daemon.json

官方文档:https://docs.docker.com/registry/recipes/mirror/

{
  "registry-mirrors": ["https://f1361db2.m.daocloud.io"],
}
# 重启docker
systemctl daemon-reload && systemctl restart docker

说明

如果大家在生产环境使用,推荐优先使用阿里云的镜像加速器,虽然注册麻烦了一些。 这是我目前用下来较为稳定的加速器 (此处极度怀念 dockerhub.azk8s.cn )。

quay.io

关于 quay.io 可用源很少,目前有如下镜像站

  1. quay-mirror.qiniu.com (七牛云, 推荐, 但没有找到长期支持的声明)
  2. quay.mirrors.ustc.edu.cn (中科大, 经常不可用, 不推荐)

使用方式

将镜像中的 quay.io 替换为 quay-mirror.qiniu.com,例如:

quay.io/prometheus/node-exporter:v0.18.1
# 替换成如下格式
quay-mirror.qiniu.com/prometheus/node-exporter:v0.18.1

说明

这两个源都不是长期稳定 七牛云目前可用, 但没有找到任何官方说明长期支持。 中科大声明有维护, 但测试后基本呈现不可用状态。

gcr.io 和 k8s.gcr.io

先说结果,我没有找到这两个源的通用镜像站。 这是最难的一部分,也花费了我很多时间。

k8s.gcr.io 是 gcr.io/google-containers 的别名,所以 k8s.gcr.io/<image>:<tag> == gcr.io/google-containers/<image>:<tag>

目前只有折中方案可以曲线救国,但这在使用上还是造来的不变,没有稳定的镜像同步途径,如果你能FQ那么还好一些,如果不行很多K8S生态中的新兴技术你可能很难体验了 (tekton、knative)等,这种情况下你只能去国内镜像站找别人传上来的副本,如:阿里云第三方镜像、dockerhub等。

目前我找到了如下镜像库:

  1. googlecontainersmirror (我自己从 gcr.io 同步到Docker Hub的镜像, 只包含核心的几个镜像和版本, 能保障K8S正常运行)
    • 镜像内容: https://hub.docker.com/u/googlecontainersmirror
  2. registry.aliyuncs.com/google_containers (阿里云第三方用户上传的镜像,镜像比较多)

使用方式

将镜像中的 k8s.gcr.iogcr.io/google-containers 替换为 registry.aliyuncs.com/google_containersgooglecontainersmirror,例如:

registry.aliyuncs.com/google_containers
gcr.io/google-containers/kube-proxy:v1.18.0
# 替换为
registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0

k8s.gcr.io/kube-proxy:v1.18.0
# 替换为
registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0
googlecontainersmirror
gcr.io/google-containers/kube-proxy:v1.18.0
# 替换为
googlecontainersmirror/kube-proxy:v1.18.0

k8s.gcr.io/kube-proxy:v1.18.0
# 替换为
googlecontainersmirror/kube-proxy:v1.18.0

宣称可以提供镜像的站点 (经测试全部不可用):

  1. gcr.mirrors.ustc.edu.cn (经测试不可用)
  2. gcr-mirror.qiniu.com (经测试不可用)

说明

  1. 为什么要自己同步镜像而不直接使用现有的镜像库?因为现有的镜像库我没找到任何官方认证,应该是个人传上去的,我们担心跑在生产的K8S集群遭遇到安全问题。 对于大家来说都是第三方同步的镜像大家可以自行选择,如果是生产用还是推荐推到自己的镜像库来保障镜像安全。
  2. googlecontainersmirror 在Docker Hub上拉取速度会不会很慢?这边取巧的利用了DockerHub加速器,拉取速度取决于加速器的速度,一般情况下很快。

总结

Linux软件镜像源

Docker CE: https://developer.aliyun.com/mirror/docker-ce Kubernetes: https://developer.aliyun.com/mirror/kubernetes

容器镜像源 (删除线为不可用)

镜像

Docker Hub

https://<user_code>.mirror.aliyuncs.com, https://f1361db2.m.daocloud.io, https://reg-mirror.qiniu.com, dockerhub.azk8s.cn

gcr.io

gcr.azk8s.cn

k8s.gcr.io

googlecontainersmirror, registry.aliyuncs.com/google_containers, gcr.azk8s.cn/google-containers

quay.io

quay-mirror.qiniu.com, quay.mirrors.ustc.edu.cn, quay.azk8s.cn

mcr.microsoft.com

mcr.azk8s.cn

本文分享自微信公众号 - 落跑架构师M(RabbitHub),作者:TodayT

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 5分钟带你快速入门和了解 OAM Kubernetes

    OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴宣布联合微软共同推出。

    落跑架构师M
  • 项目脚手架 - 《Spring Boot + MyBatis + MyBatis Generator》

    最近启动了一个新的项目发现,每当一个新项目的启动往往需要从头搭建一个“框架”,其中虽然很多基础代码可以Copy,但也会浪费不少时间。 基于这个情况,我打算在Gi...

    落跑架构师M
  • 高可用的K8S集群部署方案

    HAProxy反代了K8S Master服务器,提供了K8S Master API的高可用和负载均衡能力。

    落跑架构师M
  • docker相关概念

    镜像是什么呢?通俗地讲,它是一个只读的文件和文件夹组合。它包含了容器运行时所需要的所有基础文件和配置信息,是容器启动的基础。所以你想启动一个容器,那首先必须要有...

    宇宙之一粟
  • 编写Dockerfile的最佳实践

    虽然 Dockerfile 简化了镜像构建的过程,并且把这个过程可以进行版本控制,但是很多人构建镜像的时候,都有一种冲动——把可能用到的东西都打包到镜像中。这种...

    KevinYan
  • Docker 查看镜像

    happyJared
  • openshift-ImageStream

    ImageStream包含任意数量的由标签(tags)标识的Docker格式的容器镜像。它提供了关联镜像的单个虚拟视图,类似于镜像仓库,也许还包含以下镜像:

    用户1470379
  • Docker学习笔记--镜像

    镜像是Docker三大核心概念中最重要的一个,Dokcer运行容器钱需要本地存在对应的镜像,如果不存在对应的镜像,Doker 会先从默认的镜像仓库下载(如果用户...

    喵叔
  • Docker 学习笔记--通过父镜像生成镜像

    一般情况下我们会通过已有镜像(父镜像)生成新的镜像,这个时候我们就需要使用到 FROM 命令。父镜像直接影响了生成新景象的大小和功能。我们可以把基础镜像或者普通...

    喵叔
  • Django容器(上): 自定义基础镜像

    某个 Python 项目,基于 Python:3.6 与 Django:1.11 框架开发,希望项目能够容器化,然后可以通过 docker-compose 等工...

    用户1560186

扫码关注云+社区

领取腾讯云代金券