Kubernetes 中的网络加载均衡器:Ingress Controller

Kubernetes 是一个流行的容器编排平台,可帮助开发人员轻松部署和管理容器化应用程序。Ingress Controller 是 Kubernetes 中的一种网络加载均衡器,可以让不同的服务通过不同的 URL 路径公开在同一个 IP 地址下。本文将探讨 Ingress Controller 的重要性,如何创建和配置 Ingress Controller,以及如何在 Kubernetes 中使用它。

什么是 Ingress Controller?

Ingress 是 Kubernetes 中的一种资源对象,可以公开多个服务,并将它们配对到单个 IP 地址下的多个 URL 路径。Ingress Controller 是与 Ingress 组件协同工作的一种实际的负载均衡器,可以将流量路由到后端服务。Ingress Controller 使得多个服务的路由配置可以在一个地方集中管理,从而改善服务的可维护性。

如何创建 Ingress Controller?

Kubernetes 社区提供了许多 Ingress Controller 实现,包括 Nginx、Traefik、Istio 等。在这些实现中,Nginx 是最常用的一种。在本教程中,我们将使用 Nginx Ingress Controller。

要创建 Ingress Controller,首先需要安装 Ingress Controller 的 Kubernetes 资源对象。我们可以通过以下命令安装:

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

该命令将从 Github 下载 Nginx Ingress Controller 的配置文件,然后使用 kubectl apply 命令将其安装到 Kubernetes 集群中。

安装完成后,可以通过运行以下命令检查 Ingress Controller 是否处于运行状态:

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

如果 Ingress Controller 运行正常,则会在终端输出 Ingress Controller 的 Pod 名称和其他细节信息。

如何配置 Ingress?

在创建 Ingress 之前,需要先创建后端服务。在本教程中,我们将创建两个服务,即 webapp 和 api。我们可以通过以下命令创建这些服务:

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

然后,我们需要将这些服务公开到 Kubernetes 集群的节点上。我们可以通过以下命令将它们公开到集群内部:

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

在服务创建和公开之后,可以创建 Ingress 资源对象。以下是一个简单的 Ingress 对象示例:

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

上面的示例将 example.com 的请求路由到以下两个服务:

  • 所有 /webapp/ 路径的请求将路由到 webapp 服务。
  • 所有 /api/ 路径的请求将路由到 api 服务。

Ingress Controller 将根据 Ingress 对象中的规则来决定如何路由请求。现在,可以使用以下命令创建 Ingress 对象:

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

需要注意的是,在上述示例中,我们使用了 nginx.ingress.kubernetes.io/rewrite-target 注释来配置请求 URL 的重写规则。这个注释确保了如何重写请求 URL。在本例中,重写规则将请求路径中的 /webapp//api/ 移动到查询字符串中的第一个位置。

如何使用 Ingress?

一旦创建并部署了 Ingress Controller、后端服务、以及 Ingress 对象,就可以从网络中的任何设备(比如我们的本地机器)开始访问这些服务。为了访问这些服务,我们需要使用与 Ingress 对象中指定的主机名和路径匹配的 URL。

在本例中,我们可以使用以下 URL 访问 webapp 服务:

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

通过将 /webapp/ 添加到 URL 中,Ingress Controller 将请求路由到 webapp 服务。

同样地,我们也可以使用以下 URL 访问 api 服务:

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

在这种情况下,将请求路由到 api 服务,以便进行进一步处理。

总结

Kubernetes 中的 Ingress Controller 为管理多个服务的公开方式提供了一个简单而方便的方法。Ingress Controller 可以轻松地管理不同服务之间的负载均衡,从而提高应用的可维护性。本文介绍了在 Kubernetes 中创建和使用 Ingress 的方法,包括了如何安装 Ingress Controller、如何配置 Ingress 规则,以及如何使用 Ingress 访问服务。

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