Ingress Class详解

在 Kubernetes 常见的 API 中,Ingress 能够暴露 HTTP 和 HTTPS 服务,并支持负载均衡,路由请求流量到后端 Service。默认情况下,所有 Ingress 对象都能够访问同一条 Ingress Controller 路径。为了更好地控制入站请求,可以通过 Ingress Class 在多个 Ingress Controller 中切换。

一、Ingress Class查询

你可以通过命令来查询可用的 Ingress Class 列表:

kubectl get ingressclass

你会看到输出类似下面这样:

NAME       CONTROLLER                     PARAMETERS   AGE
nginx      nginx-ingress-controller              69d
traefik    traefik-ingress-controller            71d
example    custom-ingress-controller      api.example.com/metrics   5d

可以看出,名称机制与 K8s 对象命名相一致。在 Ingress Class 中,可以有多个 Class,使用 `NAME` 字段来区分。 `CONTROLLER` 字段表示哪个 Ingress Controller 实例会处理该 Ingress Class。 另外,`PARAMETERS` 就是该 Ingress Controller 支持的参数,例如上面的示例, `custom-ingress-controller` 支持 `api.example.com/metrics` 作为特殊参数。

二、Ingress Class 控制超时时间

在有些情况下,你需要控制所有 Ingress 对象的超时时间,此时,可以使用 Ingress Class 去创建一个默认的 Ingress Class,从而影响所有的 Ingress 类型的超时时间。

在这里,我们举例说明这一过程:

我们需要在全局控制 Ingress 的超时时间,可以通过以下配置完成:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: global-timeout
spec:
  controller: example-ingress-class
  parameters:
    timeout: "30s"

这里我们定义了一个 Ingress Class 来控制所有 Ingress 的超时时间为 30 秒。 `controller` 指定了哪个 Ingress Controller 会处理该 Ingress Class,并且 `parameters` 用于传递自定义参数给 Ingress Controller。

三、Ingress Class 部署

Ingress Class 像大多数 Kubernetes 对象一样,也可以通过 YAML 文件来部署。

下面的例子展示了如何使用 YAML 文件来创建一个 Ingress Class:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: special
spec:
  controller: ingress-nginx-controller
  parameters:
    api-version: "networking.k8s.io/v2beta1"
    kind: "Ingress"
    name: "nginx-ingress"

在这里,我们指定了 `ingress-nginx-controller` 作为该 Ingress Class 的 Ingress Controller, 并附带了三个参数 `api-version` 表示使用的 Networking API 版本, `kind` 表示使用的对象类型, `name` 表示其他要使用该 Ingress Class 的对象。

四、Ingress Class Name

IngressClass 对象的名称应该标识出 Ingress Class 的用途,以及与之关联的 Ingress Controller。也就是说,名称应该遵循以下格式:

{INGRESS_CONTROLLER_NAME}-{CLASS_NAME}

以下是一些合法的名称示例:

 example-ingress-class # Ingress Controller 名称是 example
 traefik-traefik              # Ingress Controller 名称是 traefik
 nginx-internal               # Ingress Controller 名称是 nginx

五、Ingress Classes False

在 Kubernetes 1.21 之前,使用 Ingress Object 要求集群必须有一个 Ingress Controller。为了解决这一问题,Kubernetes 引入了 Ingress Classes 概念。通过 Ingress Classes, Ingress 对象可以具有与 Ingress Controller 相关的特殊属性,然后由 Ingress Controller 处理适当的请求。

但是,在某些情况下,Ingress Controller 的选择会失败,也就是从 Ingress Controller 获取响应时出错会导致 Selection 失败,因此 Ingress Controller 将不会使用该 Ingress。如果你希望暂时禁用 Ingress Controller 的选择,可以通过在 Ingress Class 中设置 `ingressclass.kubernetes.io/is-default-class` 标签为 false 实现。

以下是一个示例,标记 IngressClass 为非默认 Ingress Class:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: non-defaultclass
  annotations:
    ingressclass.kubernetes.io/is-default-class: "false"
spec:
  controller: nginx-internal

六、Ingress Controller选取

要选择特定的 Ingress Controller,请在 Ingress Class YAML 中设置 `controller` 字段。这个值是 Ingress Controller 的名称,该名称必须与与那个 Ingress Controller 的使用匹配。

我们可以通过以下命令进行设置:

kubectl apply -f ingress-class.yaml

下面是一个使用 Ingress Controller 的示例:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: example-ingress-class
spec:
  controller: ingress-nginx-controller # 设置 Ingress Controller
  parameters:
    api-version: "networking.k8s.io/v1"
    kind: "Ingress"
    name: "nginx-ingress"

七、总结

在 Kubernetes 中,IngressClass 可以使用多个 IngressController 来切换连接,默认 IngressController 可以处理所有的 Ingress。一个 Ingress Class 包含一个 controller 和一组参数,用于与之关联的 Ingress 对象。IngressClasses 可以使得应用抽象化更好,更好地组织和扩展应用程序中的不同部分。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/247741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:22
下一篇 2024-12-12 13:22

相关推荐

  • Idea新建文件夹没有java class的解决方法

    如果你在Idea中新建了一个文件夹,却没有Java Class,应该如何解决呢?下面从多个方面来进行解答。 一、检查Idea设置 首先,我们应该检查Idea的设置是否正确。打开Id…

    编程 2025-04-29
  • Python Class括号中的参数用法介绍

    本文将对Python中类的括号中的参数进行详细解析,以帮助初学者熟悉和掌握类的创建以及参数设置。 一、Class的基本定义 在Python中,通过使用关键字class来定义类。类包…

    编程 2025-04-29
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论