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/zh-tw/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

發表回復

登錄後才能評論