Skip to main content

Command Palette

Search for a command to run...

Kubernetes 1.18 中 Ingress 的增强

Updated
2 min read

作者:Rob Scott (Google) Christopher M Luciano (IBM)

原文:Improvements to the Ingress API in Kubernetes 1.18

Kubernetes 的 Ingress API 是大量 Ingress 控制器的基础,它们通过这一 API,用方便强大的方式为 Kubernetes 提供入站流量的支持。在 Kubernetes 1.18 中,这个 API 有了三个显著的变化:

  • 新的 pathType 字段可以用来匹配 Ingress 路径。
  • IngressClass 资源能够指定控制器实现 Ingress 的方法。
  • 主机名中可以使用通配符。

使用 Path Type 改进路径匹配

Path Type 的新概念让用户可以指定路径的匹配方式,目前有三种:

  • ImplementationSpecific(缺省):这种匹配方式的行为取决于 IngressClass 控制器的实现。
  • Extract:以区分大小写的方式精确匹配整个 URL 路径。
  • Prefix:区分大消息,根据以 / 分割的 URL 元素进行前缀匹配。

使用 Ingress Class 扩展配置

Ingress 资源的设计初衷就是易用性,尝试使用简单的字段为所有应用提供支持。随着应用场景的不断增加,为了适应更广泛的需求,越来越多的 Ingress 控制器要靠大量的自定义注解来完成更复杂的配置。IngressClass 资源提供了一种替换部分注解的思路。

每个 IngressClass 中都指明了用于实现 Ingress 的控制器类型,并且可以引用自定义资源来使用更多参数。

apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: external-lb
spec:
  controller: example.com/ingress-controller
  parameters:
    apiGroup: k8s.example.com/v1alpha
    kind: IngressParameters
    name: external-lb

指定 Ingess 的 Class

Ingress 规范中加入了 ingressClassName 字段,用来指定实现这个 Ingress 资源的的 IngressClass

淘汰 Ingress 注解

在 1.18 加入 IngressClass 之前,需要在 Ingess 资源中使用 kubernetes.io/ingress.class 注解来指定 Ingress 控制器。在没有官方定义的情况下,这个注解被大量的 Ingress 控制器所支持。现在是时候淘汰他了。

设置缺省的 IngressClass

可以使用 ingressclass.kubernetes.io/is-default-class 注解,将其设置为 True,就代表所在的 IngressClass 为缺省控制器。没有显示指定 IngressClassName 的新的 Ingress 资源都会使用该控制器。

主机名通配符

很多 Ingress 控制器都支持通配符,例如 *.foo.com 可以匹配 app1.foo.com,但是直到目前为止,规范还是假设使用完全匹配的 FQDN。主机名现在也可以使用通配符了。

HostHost Header匹配?
*.foo.com*.foo.com根据后缀匹配
*.foo.com*.foo.com不匹配,通配符只能对应一个 DNS 项
*.foo.comfoo.com不匹配,通配符只能对应一个 DNS 项

总结一下

新的 Ingress 功能扩展了配置能力,下面是一个例子,其中用到了上面提到的三个新特性:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress
spec:
  ingressClassName: external-lb
  rules:
  - host: *.example.com
    http:
      paths:
      - path: /example
        pathType: Prefix
        backend:
          serviceName: example-service
          servicePort: 80

Ingress 控制器支持

这个功能是 Kubernetes 1.18 中新增的,因此各种控制器都需要一段时间才能提供支持。请关注相关产品的官方文档。

Ingress 的未来

Ingress API 将在 1.19 进入稳定阶段。它会持续使用简单的方式为 Kubernetes 入站流量提供支持。这个 API 的设计重心就在于轻量和简单,但是更好的配置能力和更广泛的案例支持也是一个持续的努力方向。

目前还在开发一组高配置能力的 API。被称为 Service API 的新 API 会提供一种 Ingress 的替代方案。它的存在目的不是替代 Ingress,而是提供一种更具配置能力的新方案。请查看 Github 上的 Service API 项目。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts