查看原文
其他

k8s.gcr.io -> registry.k8s.io:更快、更便宜,且普遍可用(GA)

Kubernetes 进击云原生 2024-02-25

关注公众号并添加到“星标⭐”,防止错过消息

后台回复【资料包】获取学习资料

作者:Adolfo García Veytia(Chainguard),Bob Killen(Google)

从 Kubernetes 1.25 开始,我们的容器镜像注册中心已经从 k8s.gcr.io 更改为 registry.k8s.io。这个新的注册中心将负载分散到多个云提供商和地区,充当 Kubernetes 容器镜像的一种内容交付网络(CDN,content delivery network)。这一改变减少了项目对单个实体的依赖,并为大量用户提供了更快的下载体验。

TL;DR(长话短说):你需要知道什么

  • 从 1.25 开始,Kubernetes 版本的容器镜像不再发布到 k8s.gcr.io,而只发布到 registry.k8s.io。
  • 在即将到来的 12 月补丁发布中,新的注册域默认值将被反向移植到所有仍受支持的分支(1.22、1.23、1.24)。
  • 如果在受限环境中运行,并应用仅限于 k8s.gcr.io 的严格域/IP 地址访问策略,则在迁移到这个新的注册中心后,镜像提取将不起作用。对于这些用户,推荐的方法,是将发布镜像镜像到一个私有注册中心。

如果你想知道更多关于我们为什么做这个改变,或者你可能遇到的一些潜在问题,请继续阅读。

为什么 Kubernetes 更改为不同的镜像注册中心?

k8s.gcr.io 托管在专门为 Kubernetes 项目设置的自定义 Google 容器注册中心(GCR)域上。自项目开始以来,这一点一直很好,我们感谢谷歌提供这些资源,但今天有其他云提供商和供应商希望托管镜像,为他们平台上的人们提供更好的体验。除了谷歌再次承诺捐赠 300 万美元支持该项目的基础设施,亚马逊在底特律举行的 Kubecon NA 2022 主题演讲中也宣布了相应的捐赠。这将为用户提供更好的体验(更近的服务器=更快的下载),同时将减少 GCR 的出口带宽和成本。registry.k8s.io 将在谷歌和亚马逊之间分担负载,其他提供商将在未来跟进。

为什么没有稳定的域名/IP 列表?为什么我不能限制镜像提取?

registry.k8s.io 是一个安全的 blob 重定向器[1],将客户端连接到最近的云提供商。这种变化的本质,意味着提取镜像的客户端,可以被重定向到大量后端中的任何一个。我们预计后端的设置会不断变化,并且只会随着越来越多的云提供商和供应商加入进来,帮助镜像发布镜像而增加。

限制访问特定 IP/域列表的限制性控制机制(如中间人代理或网络策略)将随着这一变化而被打破。对于这些场景,我们鼓励你将发布镜像镜像到你严格控制的本地注册中心。

有关此策略的更多信息,请参见registry.k8s.io 文档的稳定性部分[2]

我会看到什么样的错误?我如何知道我是否还在使用旧地址?

错误可能取决于你使用的容器运行时的类型,以及你路由到的端点,但它应该显示为容器创建失败,并显示警告 FailedCreatePodSandBox。

下面是一个错误消息示例,显示由于未知证书,代理部署无法获取:

FailedCreatePodSandBox: Failed to create pod sandbox: rpc error: code = Unknown desc = Error response from daemon: Head “https://us-west1-docker.pkg.dev/v2/k8s-artifacts-prod/images/pause/manifests/3.8”: x509: certificate signed by unknown authority

我受到此更改的影响,如何恢复到旧的注册中心地址?

如果无法使用新的注册域名,则对于低于 1.25 的群集版本,你可以恢复到旧的域名。请记住,最终,你将不得不切换到新的注册中心,因为新的镜像标签将不再被推送到 GCR。

在 kubeadm 中恢复注册中心名称

kubeadm 用来提取镜像的注册中心可以通过两种方法来控制:

设置--image-repository 标志。

kubeadm init --image-repository=k8s.gcr.io

或者在kubeadm 配置[3]ClusterConfiguration 中:

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
imageRepository: "k8s.gcr.io"

在 kubelet 中恢复注册中心名称

通过设置--pod-infra-container-image 标志,可以覆盖 kubelet 用于 pod 沙箱(pasue)的镜像。例如:

kubelet --pod-infra-container-image=k8s.gcr.io/pause:3.5

鸣谢

改变是困难的,为了确保项目的永续发展,需要改进我们的镜像服务平台。我们努力让每个使用 Kubernetes 的人过得更好。来自我们社区各个角落的许多贡献者长期以来一直在努力工作,以确保我们做出可能的最佳决策,执行计划,并尽最大努力传达这些计划。

感谢来自 SIG K8s Infra 的 Aaron Crickenberger、Arnaud Meukam、Benjamin Elder、Caleb Woodbine、Davanum Srinivas、Mahamed Ali 和 Tim Hockin、来自 SIG Node 的 Brian McQueen 和 Sergey Kanzhelev、来自 SIG Cluster Lifecycle 的 Lubomir Ivanov、来自 SIG Release 的 Adolfo García Veytia、Jeremy Rickard、Sascha Grunert 和 Stephen Augustus、来自 SIG Contribex 的 Bob Killen 和 Kaslin Fields、来自安全响应委员会的 Tim Allclair。也非常感谢我们的朋友充当我们的云提供商合作伙伴的联络人:来自亚马逊的 Jay Pipes 和来自谷歌的 Jon Johnson Jr.。

参考资料

[1]

安全的 blob 重定向器: https://github.com/kubernetes/registry.k8s.io/blob/main/cmd/archeio/docs/request-handling.md

[2]

registry.k8s.io 文档的稳定性部分: https://github.com/kubernetes/registry.k8s.io#stability

[3]

kubeadm 配置: https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta3/

- END -




后台回复“加群”,带你进入高手交流群

推荐阅读
K8S 节点 CPU 升级,导致 kubelet 无法启动排障
K8S master 节点更换 IP 与高可用故障模拟实战
46 张图详解 Zabbix 分布式监控平台建设
这 11 张图把 K8S 权限认证说的很清楚了
10 张图解 K8S CNI Calico 网络模型原理与功能实战
网关 Apache APISIX 3.0 版本发布!功能丰富
19 张图详解 Rsync 远程同步
企业级网关 Kong 部署 Spring Boot 项目实战
24 张图初探开源容器安全平台 NeuVector
23 张图细讲使用 Devtron 简化 K8S 中应用开发
2023 年值得关注的 5 个新 CNCF 项目
K8S 1.25 中的重大更改和删除18 张图 Java 容器化最佳实践总结
17 张图解 Redis On K8S 编排部署与实战操作
三大示例实战 Prometheus API 使用12 张图讲解 Spark 在 K8S 中实战操作
ES、Kibana on K8S 详解与实战操作
深入理解 K8S Pod 调试与实践技巧用 Grafana Mimir 可视化云原生监控报警K8S 1.25 两特性减少应用滚动上线停机时间Docker 镜像构建保姆级入门实战指南17 张图实战 + 理清 K8S 网络排错思路,硬核!16 张图硬核讲解 Kubernetes 网络模型
全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料,回复【加群】进入高手如云技术交流群
继续滑动看下一个

k8s.gcr.io -> registry.k8s.io:更快、更便宜,且普遍可用(GA)

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存