K8S 生态周报| Ingress-NGINX v1.8 发布,升级前请先检查

news2024/11/19 16:56:05

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]

大家好,我是张晋涛。

很抱歉,最近一段时间真的太忙了,写文章都断断续续的。主要在使用 Langchain 搭配 GPT-4 开发一些项目。

此外,在 6 月 11 日的 Gopher China 大会上我会做一个 Service Mesh 相关的分享,来参会的小伙伴欢迎来打个招呼。

Docker v24.0 正式发布

Docker v23.0.0 在今年 2 月份发布,我也写了一篇 K8S 生态周报| Docker v23.0.0 正式发布,带来众多新特性 | MoeLove 来详细进行了介绍。

事实上 Docker 在 v23.0.0 之前的一个大版本是 v20.10 发布于 2020 年的 12 月份,看起来沉寂了两年多的时间,不过却也是一直在发 patch 版本,上个大版本的 patch 版本也更新到了 v20.10.25。Docker v20.10.25 也将是 v20.10 系列的最后一个版本,不会再继续更新。

作为一个真正被用户采用的开源项目,在初期会不断的满足用户需求,并且也不断的有贡献者参与进来,迭代速度相对较快。 但是当大多数需求已经被满足,成为一个基础设施的时候,大多数用户会更加关注于上层的项目,比如 Kubernetes,而逐步放弃对该项目的投入。

目前 Docker Inc. 一直在积极发展,整体在变好,所以 Docker 社区上的投入也在逐步增加。

我在之前的文章 K8S 生态周报| Docker v24.0.0-beta.1 发布 | MoeLove中简要介绍过其中的一些特性,如今它终于发布了正式版!

以下补充一些其他值得关注的内容:

废弃

  • --oom-score-adjust 配置项被弃用,这个配置项原本是用来调整 dockerd 的 oom_score_adj 配置的,可用于避免 dockerd 在系统出现 OOM 的时候早于容器被 OOM kill,相关的内容可以在我两年前写的这篇文章中看到:K8S 生态周报| Docker v20.10.6 发布, 修正了 K8S 中 dind 的异常行为 | MoeLove

它的实现也比较简单,调整 /proc/self/oom_score_adj 即可。

func setupOOMScoreAdj(score int) error {
 if score == 0 {
  return nil
 }
 f, err := os.OpenFile("/proc/self/oom_score_adj", os.O_WRONLY, 0)
 if err != nil {
  return err
 }
 defer f.Close()
 stringScore := strconv.Itoa(score)
 _, err = f.WriteString(stringScore)
 if os.IsPermission(err) {
  if !userns.RunningInUserNS() {
   logrus.Debugf("Permission denied writing %q to /proc/self/oom_score_adj", stringScore)
  }
  return nil
 }

 return err
}
  • docker info 不再展示 Registry 字段了。

不知道是否有人去尝试过,如果访问这个地址其实会得到 404 响应。

tao@moelove:~$ docker info |grep Registry
 Registry: https://index.docker.io/v1/

index.docker.io 是第一个 DockerHub 的域名,也是它得第一个名称,它实际被命名为 "Docker Index"(因此是 index.docker.io)。 该注册表使用了注册表规范的 v1 版本,其中包括 search。

后来 Docker Index 变成了 DockerHub,并且注册表 v2 API 成为 OCI Distribution Spec 的基础。

DockerHub 注册表迁移到另一个域名(registry-1.docker.io),但是 v2 规范(按设计)不提供搜索接口,因此这些接口仍然使用 v1 API(可在 https://index.docker.io/v1/search/ 上访问)。

在某个时候,Docker Engine 和 Docker CLI 代码中实现了逻辑来映射域名到其新位置(例如,对于 docker.io/xxxx image 引用到 registry-1.docker .io 的映射以及从 index.docker.io 进行身份验证的映射);

相同的逻辑也进入所有容器生态(containerd、cri-o、kubernetes),这意味着随着 Docker Engine 已经有超过3000万月度安装量,要更改这些内容而不破坏现有安装变得非常具有挑战性。

所以这些内容后来也就一直没有变化了,但是这对于用户而言,有可能会产生一些误解,干脆就不再展示了。

Kubernetes Ingress-NGINX v1.8 发布

我们在近期已经发布了 Kubernetes Ingress-NGINX 项目的 v1.8 版本。

这个版本中有一个非常重要的变更需要注意 ⚠️

请所有 Kubernetes Ingress-NGINX 的用户及管理员在升级至新版本前先进行检查。

为了规避我们遇到的一些 CVE 漏洞,所以我们在 ingress-nginx controller 中新增了一个配置项,用户可以选择开启该配置项,以便对 Ingress 资源进行严格校验。

Ingress 资源中的 pathType 用于描述如何匹配请求路径。在 Kubernetes Ingress 中,有三种 pathTypeImplementationSpecificPrefixExact。下面是对这三种 pathType 的解释以及使用例子。

  1. ImplementationSpecific(实现特定): 这是默认的 pathType,它允许 Ingress 控制器自定义路径匹配的规则。实际的匹配规则取决于 Ingress 控制器的实现。例如,Kubernetes Ingress-NGINX 将 ImplementationSpecific 视为 Prefix 类型。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: my-host.example.com
    http:
      paths:
      - path: /app
        pathType: ImplementationSpecific
        backend:
          service:
            name: my-service
            port:
              number: 80

由于 ImplementationSpecific 的实际行为取决于 Ingress 控制器的实现,以 nginx-ingress-controller 为例,它将 ImplementationSpecific 视为 Prefix 类型。因此,以下请求路径将正确路由到 my-service

  • /app

  • /app/

  • /app/something

以下请求路径将不会被正确路由:

  • /application

  • /anotherapp

  1. Prefix:前缀匹配

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: my-host.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 80

对于 Prefix 类型,以下请求路径将正确路由到 api-service

  • /api

  • /api/

  • /api/some-resource

  • /api/users/123

以下请求路径将不会被正确路由:

  • /apis

  • /application

  • /anotherapi

  1. Exact:精确匹配

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: my-host.example.com
    http:
      paths:
      - path: /exact
        pathType: Exact
        backend:
          service:
            name: exact-service
            port:
              number: 80

对于 Exact 类型,只有一个请求路径将正确路由到 exact-service

  • /exact

以下请求路径将不会被正确路由:

  • /exact/

  • /exact/something

  • /exactly

这些例子说明了每种 pathType 的路径匹配行为及正确和错误的路由。在实际应用中,可以根据具体需求选择合适的 pathType

此外,正如前面提到的,不同的 ingress-controller 的实现并不完全一样。

比如 Apache APISIX Ingress controller 默认将 ImplementationSpecific 视为 Exact 类型。 这与数据面的 Apache APISIX 也是有关系的。 在处理 Prefix 类型的 pathType 时,创建了两个 uri 来进行兼容。

该版本中的其他变化影响并不是很大,有兴趣的小伙伴可以看看 ReleaseNote

上游进展

  • kubeadm: add the "config validate" subcommand by neolit123 · Pull Request #118013 · kubernetes/kubernetes

kubeadm 添加了一个 config validate 的子命令,用于验证配置是否正确,如果有错误或者警告将会直接提示出来。 这使得在使用 kubeadm 的时候,可以先通过此命令检查配置是否存在问题,提前进行修正。

此外还可以配合使用 kubeadm config migrate 命令, 将旧版本的配置升级到新版本。

  • add no resources found message to rollout-status command by gxwilkerson33 · Pull Request #117884 · kubernetes/kubernetes

修复了一个在没有任何 deployment 时,执行 kubectl rollout status deployment 命令没有返回的 bug, 而且执行该命令后,会一直卡住没有反应。

本次修复增加了对应的报错信息。

  • LegacyServiceAccountTokenCleanUp alpha by yt2985 · Pull Request #115554 · kubernetes/kubernetes

Bound service account tokens 在 v1.22 版本中已经 GA,并且是分配 service tokens 的当前和更安全的方式。

然而,旧版基于密钥的令牌的自动生成仍然可用,并且生产集群将会存储大量旧版令牌。

KEP 2799 清理了这个问题,结束了旧版令牌的自动生成。

这个 PR 实现了对旧版令牌进行清除,如果启用 LegacyServiceAccountTokenCleanUp feature gate,则可以使用该功能来清除它们。到 v1.30 左右,预计默认情况下将启用此功能。

感谢大家,我们下期再见!


欢迎订阅我的文章公众号【MoeLove】

f012bb704b67a87bff5cf425d1b9c88f.png
TheMoeLove

参考资料

[1]

k8s生态: https://zhuanlan.zhihu.com/container

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/633267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx扩展篇之Location语法规则

1 Location语法规则 1.1 Location规则 语法规则: location [||*|^~] /uri/ {… } 首先匹配 ,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 …

Nginx部署多个前端项目【Linux/Windows-详细操作】

需求:项目上线需要将前端的前台和后台部署在服务器上提供用户进行使用,部署在不同的服务器直接在服务器安装nginx即可。但是在内网安装还是有点麻烦,因为需要联网,如果是内网可以参考Linux安装Nginx并部署前端项目【内/外网-保姆级教程】_MXi…

将数组s中的每个元素的内容在原来的位置上重复n次numpy.char.multiply(s,n)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数组s中的每个元素的内容 在原来的位置上重复n次 numpy.char.multiply(s,n) 下列代码最后输出的结果是? import numpy as np x np.array([I, have, 2, cats]) print(&qu…

如何看待ICML2023的录用结果?

链接:https://www.zhihu.com/question/597314456 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:知乎用户 https://www.zhihu.com/question/597314456/answer/3000946712 不是因为文章被拒,而是因…

一文读懂 Mysql MVCC

💕💕 推荐:体系化学习Java(Java面试专题) 文章目录 1、什么是 MVCC2、什么是当前读、快照读3、MVCC 具体解决什么问题4、MVCC 的实现原理4.1、4个隐式字段4.2、undo 日志4.3、Read View 5、使用 MVCC 时,需…

CSS灯光效果,背景黑金效果

先看效果 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>灯光效果</title><link href"https://fonts.googleapis.com/css2?familyCinzel:wght700&amp;dis…

MyBatis 动态sql移除最后的逗号 mybatis trim标签用法 Mybatis 去掉最后的逗号符号

MyBatis 动态sql移除最后的逗号 mybatis trim标签用法 Mybatis 去掉最后的逗号符号 一、概述 在使用MyBatis 写动态sql时&#xff0c;经常会遇到要移除最后多余的 符号 &#xff0c;and &#xff0c; or之类的关键字 &#xff1b; 还有可能需要移除的前缀 where &#xff0c; s…

续-初识JAVaScript---(2)

初识JavaScript ———&#xff08;2&#xff09;&#xff01;&#xff01;&#xff01; 一、关于JavaScript中的数据类型 虽然在JS中的变量在声明的时候不需要指定数据类型&#xff0c;但是在赋值的时候&#xff0c;每一个数据还是有类型的&#xff0c;所以还是需要学习JS中…

c语言第一课---------它来了,它来了,带着薪资走来了

作者前言: 这是我的gitee仓库:https://gitee.com/qin-laoda/python-exercises 有兴趣的小可爱们可以点进去看看,里面有我写的代码我们一起来借鉴 由于本人的自我介绍已经自我介绍过了,在我的的第一篇博客里,有兴趣的小可爱可以去看看, 作者的建议 下面我们简单介绍学好C语言…

【Python】Python进阶系列教程-- Python3 JSON 数据解析(九)

文章目录 前言Python 编码为 JSON 类型转换对应表&#xff1a;JSON 解码为 Python 类型转换对应表&#xff1a;json.dumps 与 json.loads 实例 前言 往期回顾&#xff1a; Python进阶系列教程-- Python3 正则表达式&#xff08;一&#xff09;Python进阶系列教程-- Python3 C…

LLVM 标准 C++ 排序算法

Nature 官网发表《深度强化学习发现更快的排序算法》。 排序或散列这样的基本算法在任何一天都会被使用数万亿次1。随着计算需求的增长&#xff0c;这些算法的性能变得越来越重要 算法已经集成到 LLVM 标准 C排序库中&#xff0c;使用强化学习的新算法替换掉了原有的 LLVM libc…

STM32CubeMX | 44 - 使用GPIO点亮单总线RGBLED

一、单总线RGBLED 1. 硬件连接 在DragonFly上有四个全彩灯相连: 其中RGB_LED连接到STM32的PB9引脚。 2. 单总线通信协议 单总线通信协议中,表示bit0和bit1的码型如下: 时序值如下: 驱动一个单总线RGBLED只需要传输24bit颜色数据即可(MSB,高位优先),格式如下(注意…

OpenGL 冯氏光照模型

1.简介 现实世界的光照是极其复杂的&#xff0c;而且会受到诸多因素的影响&#xff0c;这是我们有限的计算能力所无法模拟的&#xff0c;冯氏光照模型的主要结构由3个分量组成&#xff1a;环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看…

V4L2框架解析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、概览二、流程简介三、关键结构体四、模块初始化五、处理用户空间请求 一、概览 相机驱动层位于HAL Moudle与硬件层之间&#xff0c;借助linux内核驱…

MacOS使用docker安装nginx

文章目录 一、docker安装nginx1、查看可用的nginx2、安装Nginx镜像3、查看是否安装成功4、安装成功后执行nginx5、查看容器6、本地验证 二、创建本地挂载文件1、第一步&#xff1a;宿主机创建目录2、第二步&#xff1a;将docker安装的nginx里面文件复制到宿主机3、第三步&#…

安洵杯2023wp - ukfc战队

喜提牛马第23名&#xff0c;不过对于我来说尽力了。 主方向逆向、密码学都极限输出了、但是第二道同模的题差一个点没想通&#xff0c;没得写很难受。 补题&#xff1a;NULL Web CarelessPy 目录 Web CarelessPy Confronting robot Reverse ez_cpp babythread 3D_m…

深入学习 Mysql 引擎 InnoDB、MyISAM

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 &#x1f495;&#x1f495; 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#…

【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

一、线性表1.1 概念与特点1.2 线性表的存储结构1.3 常见操作1.4 应用场景 二、链表2.1 链表简介2.2 单向链表&#xff08;单链表&#xff09;2.21 基本概念2.22 单链表基本操作2.23 C语言实现▶ 带头结点▶ 不带头结点 2.3 双向链表2.31 基本概念2.32 与单链表比较2.33 双向链表…

【Python】Python进阶系列教程-- urllib(十三)

文章目录 前言urllib.requesturllib.errorurllib.parseurllib.robotparser 前言 往期回顾&#xff1a; Python进阶系列教程-- Python3 正则表达式&#xff08;一&#xff09;Python进阶系列教程-- Python3 CGI编程&#xff08;二&#xff09;Python进阶系列教程-- Python3 My…

C++面向对象丨3. 函数提高——默认参数、占位参数和函数重载

文章目录 系列文章目录基础入门面向对象 1 函数默认参数2 函数占位参数3 函数重载 系列文章目录 基础入门 C基础入门丨1. 初识C像极了C语言C基础入门丨2. 数据类型基础C基础入门丨3. 搞明白4类运算符——运算符C基础入门丨4. 程序结构有哪几种&#xff1f;——程序流程结构C基…