Kubernetes 中使用 Ingress 实现 HTTP 路由

阅读时长 6 分钟读完

什么是 Kubernetes?

Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化的应用程序。Kubernetes 提供了一个高度可扩展的平台,用于构建和运行云原生应用程序。

什么是 Ingress?

Ingress 是 Kubernetes 中的一种资源类型,用于将外部流量路由到 Kubernetes 群集的服务中。通过使用 Ingress,您可以将外部流量路由到 Kubernetes 服务,并使用各种规则指定如何将流量路由到不同的服务。

Ingress 可以将 HTTP 和 HTTPS 流量路由到 Kubernetes 服务。通过 Ingress,您可以配置各种路由规则,如主机名、请求路径、HTTP 方法和负载均衡设置等。

如何使用 Ingress?

在 Kubernetes 中,您可以使用 Ingress 控制器来处理 Ingress 资源。

Ingress 控制器是使用特定的软件或服务来实现 Ingress 资源规则的 Kubernetes 组件。控制器会监视 Ingress 资源,并将所述规则应用到群集的负载均衡器中。

Kubernetes 社区提供了多个 Ingress 控制器的实现。基于 Nginx、Traefik、HAProxy 等常见的开源软件提供了一些主流的 Ingress 控制器。每个 Ingress 控制器都有自己的优缺点。这里我们以 Nginx Ingress 控制器为例,介绍如何在 Kubernetes 环境下使用 Ingress。

在 Kubernetes 中使用 Nginx Ingress 控制器

在使用 Nginx Ingress 控制器之前,您需要在 Kubernetes 群集上安装它。安装 Nginx Ingress 控制器有两种方式:使用 Helm Charts 或使用 YAML 文件部署。

使用 Helm Charts 安装 Nginx Ingress 控制器

Helm 是 Kubernetes 的包管理器,使用 Helm Charts 模板可以轻松地安装和升级 Kubernetes 应用程序。

要使用 Helm 安装 Nginx Ingress 控制器,请执行以下步骤:

  1. 安装 Helm

请根据官方文档的说明安装 Helm。安装 Helm 的最简单方法是通过 Helm 的二进制发行版,可以从 Helm Releases 页面下载。

  1. 添加 Helm 仓库

您需要添加一个 Helm 仓库,以便从 Helm Charts 中获取 Nginx Ingress 控制器的最新版本:

  1. 执行 Helm 安装

您可以使用下面的命令运行 Helm 安装:

这将安装 Nginx Ingress 控制器,并在 Kubernetes 群集中创建相应的资源。

使用 YAML 文件安装 Nginx Ingress 控制器

如果您不想使用 Helm Charts,您可以使用 YAML 文件部署 Nginx Ingress 控制器。要使用 YAML 文件部署 Nginx Ingress 控制器,请执行以下步骤:

  1. 下载 YAML 文件

下载最新版本的 Nginx Ingress 控制器 YAML 文件:

  1. 安装 Nginx Ingress 控制器

使用 kubectl 命令创建资源:

这将在 Kubernetes 群集中安装 Nginx Ingress 控制器。

配置 Ingress 路由

安装了 Nginx Ingress 控制器后,您就可以使用 Ingress 资源来配置路由规则。每个 Ingress 资源都由 spec.rules 定义。在规则中,您可以指定路由规则,例如:路由到哪个后端服务、用于匹配请求的主机名和路径等。在规则中,可以指定以下配置:

  • 后端服务:定义 Ingress 路由规则的目标 Kubernetes 服务。
  • 路径:定义要将传入请求路由到的 Kubernetes 服务的 HTTP 路径。
  • 主机名:定义要将传入请求路由到的 Kubernetes 服务的域名。
  • TLS:定义 HTTPS 加密的证书和密钥。

下面是 Ingress 资源的一个示例 YAML 配置:

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

在此示例中,我们定义了一个名为 my-ingress 的 Ingress 资源。它定义了一条路由规则,将 HTTP 请求路由到 hello-service 应用程序(这是 Kubernetes 群集中的一个服务)的 /hello 路径。当请求进入 my-ingress ,将被重定向到 /hello 路径。以下是各参数含义:

  • spec.rules:定义 Ingress 的路由规则。
  • host:定义请求需要匹配的主机名。
  • http.paths:定义 HTTP 请求的路径匹配和路由规则。
  • path:定义要路由到的路径。
  • pathType:定义路径的匹配类型。在此示例中,我们使用 prefix 来精确匹配前缀为 /hello 的路径。
  • backend:定义要将请求路由到的应用程序,包括名称和服务端口。

总结

本文介绍了 Kubernetes Ingress 和 Ingress 控制器的基本概念,并提供了 Nginx Ingress 控制器的示例。通过使用 Ingress,您可以轻松地将外部流量路由到 Kubernetes 群集中的服务,从而将应用程序部署和扩展带到一个新的水平。

参考

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

纠错
反馈