Kubernetes 中的 Ingress 详解

随着云计算和容器化技术的不断发展,Kubernetes(简称 K8s)逐渐成为了云原生应用开发的主流技术之一。而在 K8s 中,Ingress 是一个十分重要的模块,它的作用是允许外部的 HTTP/HTTPS 流量进入 K8s 集群中的 Service。

Ingress 基础知识

Ingress 是 K8s 中的一个 API 对象,它允许管理进入集群的 HTTP/HTTPS 流量,并允许根据规则将流量转发到 K8s 集群中不同的 Service。

Ingress 的使用需要额外安装 Ingress Controller。而且,不同的 Ingress Controller 可能会支持不同的 Ingress 规则。

下面是一个简单的 Ingress 规则示例:

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

这个 Ingress 规则允许通过 example.com/demo URL 访问名为 demo-service 的 Service。

Ingress Controller

Ingress Controller 是 Ingress 的执行者,它的作用是根据 Ingress 规则将流量转发到对应的 Service。在 K8s 中,有很多种 Ingress Controller 可供选择,比如官方提供的 Nginx Ingress Controller、Traefik、HAProxy 等。

不同的 Ingress Controller 提供了不同的功能和实现方式。例如,Nginx Ingress Controller 使用 Nginx 做为反向代理,而 Traefik 使用了 Go 语言开发的高性能反向代理。因此,在选择 Ingress Controller 的时候,需要根据自己的实际情况进行选择。

Ingress 规则配置

在编写 Ingress 规则之前,需要确定需要使用的 Ingress Controller。本文以 Nginx Ingress Controller 为例进行说明。

Path

Ingress 规则中的 path 是用于匹配 URL 的,它可以包含正则表达式,以实现更加灵活的路由匹配。

下面是一个 path 带有正则表达式的 Ingress 规则示例:

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

这个规则中,path/demo 开头,后面可以是 / 或任意字符,以实现更加灵活的 URL 路由匹配。

Host

host 字段则用于匹配请求的域名。如果要支持多域名,可以配置多个规则。

下面是一个 host 带有多条规则的 Ingress 规则示例:

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

这个规则中,根据不同的域名,请求会被转发到不同的 Service。

TLS

如果要加密 HTTP 流量,可以配置 TLS 证书。

下面是一个带有 TLS 配置的 Ingress 规则示例:

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

这个规则中,请求会被转发到 demo-service,并启用了 TLS 加密。

Ingress Controller 部署

部署 Ingress Controller 的步骤因具体的实现方式而异。在这里以 Nginx Ingress Controller 为例进行说明。

部署 Nginx Ingress Controller

使用 Helm 部署 Nginx Ingress Controller,执行以下命令:

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

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

测试 Ingress

完成 Ingress 配置和 Ingress Controller 部署之后,可以通过以下方法测试 Ingress 是否正常工作:

  1. 配置 hosts 文件:

    ---- ---------- ------------ - ---- --- -- ----------
  2. 部署一个测试 Service:

    ------- ------ ---------- ----------- -------------------------------------------
    ------- ------ ---------- ----------- -----------
  3. 部署一个测试 Ingress 规则:

    ----------- --------------------
    ----- -------
    ---------
      ----- ------------
    -----
      ------
        - ----- -----------
          -----
            ------
            - ----- ------
              --------- ------
              --------
                --------
                  ----- -----------
                  -----
                    ------- ----
  4. 访问 Ingress:

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

如果返回内容为 Hello, world!,则表示 Ingress 工作正常。

结论

本文主要介绍了 Kubernetes 中的 Ingress,包括 Ingress 的基础知识、Ingress Controller 的选择、Ingress 规则配置、以及 Ingress Controller 的部署和测试方法。

合理使用 Ingress 可以帮助开发人员更加灵活地实现 HTTP 流量转发和负载均衡,从而更好地满足业务需求。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671109b1ad1e889fe2fd4a7e