Kubernetes 中 Ingress 的配置与路由规则详解

阅读时长 8 分钟读完

Ingress 是 Kubernetes 中一个十分重要的资源对象,它提供了路由请求的方法,将来自集群外部的请求路由到不同的 Kubernetes Service。本文将详细介绍 Kubernetes 中 Ingress 的配置和路由规则,为前端开发者提供深入了解 Ingress 的学习和指导。

Ingress 的配置

Ingress 的配置通常包含两个部分,一个是 Ingress Controller 的部署和配置,另一个是 Ingress 对象本身的配置。以下是一个示例的 Ingress 配置文件:

-- -------------------- ---- -------
----------- --------------------
----- -------
---------
  ----- ---------------
  ------------
    ------------------------------------------- -
-----
  ------
  - ----- -----------
    -----
      ------
      - ----- ------
        --------- ------
        --------
          --------
            ----- --------
            -----
              ----- -----
      - ----- ------
        --------- ------
        --------
          --------
            ----- --------
            -----
              ----- -----

上述配置文件可以分为两部分,其中 Ingress 对象的配置保存在 metadata 和 spec 中。

metadata 中包含 Ingress 的名称和注释。注释可以添加一些支持特定 Ingress Controller 的功能,例如上述示例中的 nginx.ingress.kubernetes.io/rewrite-target,它将访问 /path1/path2 的请求转发到了 / 对应的 Service 中。

spec 中则包含了 Ingress 路由规则,包括请求的主机 host 和 URL path,以及对应的 Kubernetes Service。

Ingress 中的路由规则

Ingress 中的路由规则非常灵活,可以根据不同的请求主机和 URL path 进行路由分发。

根据主机路由

根据主机路由是 Ingress 中最基本的路由规则。一个示例的主机路由配置如下:

-- -------------------- ---- -------
-----
  ------
  - ----- -----------
    -----
      ------
      - ----- -
        --------- ------
        --------
          --------
            ----- --------
            -----
              ----- -----

上述配置定义了当请求的主机为 example.com 时,将请求转发到名称为 service1 并监听 port1 的 Kubernetes Service 中。

根据 URL path 路由

Ingress 还可以根据 URL path 进行路由分发。例如以下是一个示例配置:

-- -------------------- ---- -------
-----
  ------
  - ----- -----------
    -----
      ------
      - ----- ------
        --------- ------
        --------
          --------
            ----- --------
            -----
              ----- -----

上述配置定义了当请求的 URL path 为 /path1 时,将请求转发到名称为 service1 并监听 port1 的 Kubernetes Service 中。

需要注意的是,这里的 pathType 必须为 Prefix。如果此处为 Exact,则只有当 URL path 完全匹配时才会进行路由分发。

根据主机和 URL path 路由

Ingress 还可以根据主机和 URL path 进行复杂的路由分发。例如以下是一个示例配置:

-- -------------------- ---- -------
-----
  ------
  - ----- -----------
    -----
      ------
      - ----- ------
        --------- ------
        --------
          --------
            ----- --------
            -----
              ----- -----
      - ----- ------
        --------- ------
        --------
          --------
            ----- --------
            -----
              ----- -----

上述配置定义了当请求的主机为 example.com 时,并且 URL path 为 /path1 时,将请求转发到名称为 service1 并监听 port1 的 Kubernetes Service 中;当 URL path 为 /path2 时,将请求转发到名称为 service2 并监听 port2 的 Kubernetes Service 中。

Ingress 的示例

以下是一个使用 Ingress 进行前后端分离的示例:使用上述规则,将前端请求 /api 路径的请求转发到后端 Service 中。

首先,创建两个 Deployment,分别是前端和后端:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- --------
-----
  ---------
    ------------
      ---- --------
  ---------
    ---------
      -------
        ---- --------
    -----
      -----------
      - ----- --------
        ------ -----------

---

----------- -------
----- ----------
---------
  ----- -------
-----
  ---------
    ------------
      ---- -------
  ---------
    ---------
      -------
        ---- -------
    -----
      -----------
      - ----- -------
        ------ ----------

然后创建两个 Service,并将它们绑定到对应的 Pod 上:

-- -------------------- ---- -------
----------- --
----- -------
---------
  ----- ----------------
-----
  ---------
    ---- --------
  ------
    - ----- ----
      ----- ----
      ----------- --

---

----------- --
----- -------
---------
  ----- ---------------
-----
  ---------
    ---- -------
  ------
    - ----- ----
      ----- --
      ----------- ----

最后,创建 Ingress 并将前端请求的路径转发到后端 Service 中:

-- -------------------- ---- -------
----------- --------------------
----- -------
---------
  ----- ---------------
-----------
  ------------------------------------------- -
-----
  ------
  - ----- -----------
    -----
      ------
      - ----- ----
        --------- ------
        --------
          --------
            ----- ---------------
            -----
              ----- ----

上述配置定义了 Ingress,当主机为 example.com 并访问的 URL path 以 /api 开头时,将请求转发到名称为 backend-service 并监听 http 端口的 Kubernetes Service 中。

结论

本文介绍了 Kubernetes 中 Ingress 的配置和路由规则。通过了解 Ingress 的配置和路由规则,前端开发人员可以更好地理解 Kubernetes 中的负载均衡和路由,以及如何将前端和后端应用程序进行深度整合。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674eb0fce884a3e30f292895

纠错
反馈