Kubernetes 1.28:一种新的(alpha版)机制,用于更安全的集群升级

一文带你了解Kubernetes 1.28混合版本代理功能

Kubernetes 1.28:一种新的(alpha版)机制,用于更安全的集群升级

作者:Richa Banker (Google)

本文介绍了混合版本代理(mixed version proxy),这是 Kubernetes 1.28 版本中的一个新的 alpha 功能。混合版本代理使得在集群中存在多个不同版本的 API 服务器的情况下,能够正确地为资源的 HTTP 请求提供服务。例如,在集群升级期间或者在部署集群控制平面的运行时配置时,这将会非常有用。


这个功能解决了什么问题? 

当集群进行升级时,处于不同版本的 kube-apiserver 可能会为不同的内置资源集(组、版本、资源)提供服务。在这种情况下发起的资源请求可能会由任何一个可用的 apiserver 提供服务,这可能导致请求最终传递到一个不知道所请求资源的 apiserver,从而返回 404 找不到错误,这是不正确的。此外,错误地返回 404 错误可能会导致严重后果,例如错误地阻止命名空间删除或者错误地对对象进行垃圾回收。


我们如何解决这个问题?

Kubernetes 1.28:一种新的(alpha版)机制,用于更安全的集群升级

这项新功能 “混合版本代理” 为 kube-apiserver 提供了将请求代理到了解所请求资源的同级 kube-apiserver 并能够为请求提供服务的能力。为实现此功能,API 服务器的聚合层中添加了一个新的过滤器到处理链中。

1. 处理链中的新过滤器会检查请求是否针对 apiserver 不了解的组/版本/资源(使用现有的 StorageVersion API)。如果是这样的情况,它会将请求代理到 ServerStorageVersion 对象中列出的 apiserver 之一。如果被识别的同级 apiserver 未能响应(可能是因为网络连接问题,请求接收和控制器注册 apiserver 资源信息在 ServerStorageVersion 对象中的竞争等原因),那么会返回 503 错误(”Service Unavailable”)。

2. 为了防止请求的无限代理,一旦确定原始 API 服务器无法处理请求,就会在原始请求中添加一个新的 HTTP 头(在 v1.28 版中引入)。将此标头设置为 true 表示原始 API 服务器无法处理该请求,因此应进行代理。如果目标同级 API 服务器看到此标头,它将不会再次代理请求。X-Kubernetes-APIServer-Rerouted: true

3. 要设置同级 kube-apiserver 使用的网络位置以代理请求,将传递给或者(当未指定时)使用的标志。对于具有不允许使用这些标志中指定的地址之间进行通信的同级 kube-apiserver 的网络配置的用户,可以使用此功能中引入的 –advertise-address 和 –peer-advertise-ip 标志传递正确的同级地址。


如何启用此功能?

以下是启用此功能所需的步骤:

  • 下载最新的 Kubernetes 项目(版本或更高)v1.28.0
  • 使用命令行标志在 kube-apiserver 上打开功能开关–feature-gates=UnknownVersionInteroperabilityProxy=true
  • 使用标志在 kube-apiserver 上传递将被源 kube-apiserver 用于对目标 kube-apiserver 的证书进行验证的 CA bundle。注意:此标志对于此功能的工作是必需的。此标志没有默认启用值。–peer-ca-file
  • 在代理请求时,传递本地 kube-apiserver 的正确 IP 地址和端口,供同级的 kube-apiserver 连接。在 kube-apiserver 启动时,使用标志 –peer-advertise-ip 和 –peer-advertise-port 将这些值传递给它。如果这两个标志都没有设置值,将使用传递给 –advertise-address 或 –bind-address 的值。如果这些值也没有设置,将使用主机的默认接口。–peer-advertise-ip–peer-advertise-port–advertise-address–bind-address

还有什么需要注意的?

目前,我们仅在确定需要这样做时才会代理到同级 kube-apiserver 的资源请求。接下来,我们需要解决在这种情况下如何处理发现请求。目前,我们计划在 beta 版本中拥有以下功能:

  • 在所有 kube-apiserver 之间合并发现请求
  • 对连接到同级 kube-apiserver 的网络连接使用出口拨号器

如何获取更多信息? 

阅读混合版本代理文档

阅读 KEP-4020:未知版本互操作性代理


如何参与其中? 

在 Slack 上与我们联系:#sig-api-machinery,或通过邮件列表。非常感谢那些在这个功能的设计、实现和审核过程中提供帮助的贡献者:Daniel Smith、Han Kang、Joe Betz、Jordan Liggit、Antonio Ojea、David Eads 和 Ben Luddy!


本文翻译自Kubernetes.io

转载请注明出处:https://www.cloudnative-tech.com/technology/5961.html

(0)
上一篇 2023年8月31日 下午12:09
下一篇 2023年8月31日 下午12:22

相关推荐

  • 容器存储方案怎么写?

    容器存储是在容器化环境中管理和持久化数据的重要组成部分。在设计容器存储方案时,需要考虑数据的可靠性、性能、可扩展性和管理便捷性等方面。本文将介绍容器存储的常见方案和最佳实践。

    2023年7月10日
    0
  • 容器化部署流程有哪些?

    容器化部署是一种将应用程序打包为容器,并在容器化环境中进行部署和管理的方法。容器化部署具有灵活性、可移植性和可伸缩性等优势,可以简化应用程序的部署过程,并提高应用程序的可靠性和性能。以下是一个典型的容器化部署流程:

    2023年7月11日
    0
  • Linux容器技术是什么?

    Linux容器技术是一种轻量级的虚拟化技术,通过利用Linux内核的各种特性和机制,实现了对应用程序及其运行环境的隔离和封装。它提供了一种容器化的方式,使得应用程序可以在一个隔离的运行环境中独立运行,而不会对宿主机或其他容器产生影响。

    2023年7月5日
    0
  • 如何使用云原生K8s实现持续交付?

    本文将介绍如何使用云原生K8s实现持续交付。首先我们将讨论什么是云原生K8s以及其优势,然后介绍持续交付的定义和重要性,接着探讨如何使用云原生K8s构建持续交付流程,并介绍常见的工具和实践方法,最后总结本文内容。

    2023年7月12日
    0
  • 云原生开发者必读:如何写出有趣、易懂的项目经验?

    本文将从如何选择经验主题、如何组织文章结构、如何写出清晰易懂的内容等方面,分享云原生项目经验的写作技巧和经验,帮助读者撰写出能够帮助他人的文章。

    2023年5月29日
    0