Kubernetes 中 Ingress 负载均衡详解

前言

Kubernetes 是一个快速发展的容器化平台,而 Ingress 则是 Kubernetes 中一个非常重要的负载均衡组件。Ingress 可以将流量路由到集群内不同的服务中,并提供了许多高级功能,比如 SSL 终止、路径匹配、域名解析等等。由于 Ingress 的重要性,本文将深入讲解 Kubernetes 中 Ingress 负载均衡的相关知识点,同时提供示例代码以便读者更好地理解和学习。

Ingress 的基本使用

1. 安装 Ingress

在运行 Ingress 之前,首先需要安装 Ingress 控制器。Kubernetes 官方提供了对于 Nginx 和 Traefik 两种控制器的支持。这里以 Nginx 为例进行安装。

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

注意:此处使用的是 v1.0.3 版本的控制器,具体版本可以根据实际需求进行选择。

安装完成后,你可以通过以下命令检查 Ingress 控制器是否正常运行:

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

2. 创建 Ingress 资源

在创建 Ingress 资源之前,需要准备好相应的后端服务,并通过 Service 类型将其暴露为集群内的一个 DNS 名称。例如,我们创建了两个部署,分别代表一个网站和一个后端接口:

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

---

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

然后再通过 Service 类型将其暴露为 DNS 名称。这里我们使用了 ClusterIP 服务类型,代表该服务只能在集群内部被访问。注意,使用这种服务类型需要为 Service 指定一个 selector,以选择对应的 Pod 进行负载均衡。

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

---

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

最后,我们就可以创建 Ingress 资源了。Ingress 的规则列表以 YAML 列表的形式呈现,每个规则都包含了一个或多个 IngressPath 对象,代表该规则下的一组 URI 匹配规则。

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

上面的 Ingress 规则将所有访问 example.com/web 或 /backend 的请求都转发到相应的 Service 中进行处理。

3. 测试 Ingress 配置

创建完 Ingress 资源以后,我们可以通过 curl 命令来测试其是否正常工作:

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

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

其中, 是 Ingress 控制器所在的 IP 地址。在 minikube 中可以通过以下命令来获取:

- -------- --

Ingress 的高级使用

除了简单的路径匹配,Ingress 还提供了许多高级功能来方便部署和管理服务。

1. SSL 终止

为了保障网站安全, SSL 终止是部署 Ingress 时必不可少的一个功能。它可以在 Ingress 中添加 TLS 证书,并通过 SSL 协议加密传输。

为了实现 SSL 终止,我们需要首先在 Kubernetes 中创建一个 Secret 对象来存储证书文件。这里我们使用了自签名证书进行测试:

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

注意:此处的证书只是用于测试,实际使用中应该使用安全可靠、经过验证的证书。

然后在 Ingress 规则中添加 tls 字段,并指定使用的 Secret 对象。注意,此处的主机名必须与证书中包含的主机名相匹配,否则将无法启用 SSL 协议。

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

现在,我们可以使用 https 协议来访问 Ingress 了:

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

由于 Ingress 控制器会自动将 SSL 终止后的请求转发给后端的服务,因此在内部通信环节中仍然使用的是 http 协议。

2. 重定向

Ingress 中还可以使用重定向功能来自动将用户请求重定向到其他 URL。常见的应用场景包括将 http 协议转换为 https 协议、URL 统一化等等。

重定向功能可以在 Ingress 规则中的 IngressPath 对象中进行配置。在下面的例子中,我们将所有对 /web 下的访问请求都重定向到 /web-new 下:

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

3. 限制访问源 IP

在某些情况下,我们需要限制特定的 IP 地址访问 Ingress 中的服务。这时候,我们可以使用 NetworkPolicy 对象来定义规则,限制指定 IP 地址范围的访问。

例如,在下面的例子中,我们禁止所有 IP 地址在 10.0.0.0/8 网段中的主机访问 Ingress 中的服务:

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

总结

通过本文,我们可以了解到 Kubernetes 中 Ingress 组件的基本原理和使用方法,并了解了 Ingress 的一些高级功能,如 SSL 终止、重定向和限制访问源 IP。合理使用 Ingress 可以大大简化集群内部服务的管理和部署,提高应用的可靠性和稳定性。

参考资料

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64702cf3968c7c53b0e4ffac


猜你喜欢

  • Headless CMS 解决异构系统集成问题的优势

    传统的 CMS 是带有前端渲染的系统,但是随着前端技术的不断发展和应用的丰富,我们发现前端渲染和 CMS 并没有必然关系,这时就出现了一种新的 CMS,即 Headless CMS。

    1 年前
  • 如何在 LESS 中创建多重选择器

    什么是多重选择器 多重选择器是指在 CSS 中通过一个选择器同时选中多个元素或类,以便于对它们进行相同或类似的样式设置。在 LESS 中,我们可以使用嵌套语法来创建多重选择器。

    1 年前
  • Flexbox 布局实例——侧边栏底部对齐的解决方案

    当我们进行页面布局时,经常会遇到侧边栏高度不固定的情况。这时候,我们可能希望侧边栏在页面中的位置不变,同时让其底部与主体内容的底部对齐。那么,如何实现这个需求呢?本文将介绍一种常用的解决方案——使用 ...

    1 年前
  • 使用 Chai-Http 插件进行 Node.js API 测试的教程

    Node.js 是一个非常流行的后端开发语言,同时也是一个流行的 Web 开发框架。在 Node.js 中实现的应用程序可以通过 REST API 进行通讯,这种方式通常用于将客户端和服务器端分离。

    1 年前
  • 在 Fastify 应用中实现 CORS

    CORS(Cross-Origin Resource Sharing)是一种常用的网络安全机制,它允许 Web 应用程序服务器与多个不同来源的客户端进行交互。在本文中,我们将介绍如何在 Fastify...

    1 年前
  • Cypress:如何从代码中读取并使用环境变量?

    前言 Cypress 是一个流行的端到端测试框架,它具有简单易学、强大的 API 和丰富的可视化工具。在实际项目中,我们通常会需要使用不同的环境配置,例如测试环境和生产环境,这时候就需要引入环境变量作...

    1 年前
  • 利用 CSS Grid 和 Flexbox 实现流体宽度的技巧

    当我们开发响应式网站时,通常需要实现流体宽度的元素,使得页面在不同设备上自适应屏幕大小。CSS Grid 和 Flexbox 是两个强大的工具,可以帮助我们实现这一目标。

    1 年前
  • Serverless 应用如何处理定时任务

    Serverless 架构正在成为当下云端应用开发的热门选择,它可以让开发者将精力更多地投入到业务逻辑上,而不是管理底层基础架构。在 Serverless 架构中,函数是应用程序的核心,通过事件来调用...

    1 年前
  • PWA 前端开发经验总结

    #PWA 前端开发经验总结 Progressive Web App,简称PWA,是一种新型的web应用程序,它利用现代化的Web技术来实现原生应用程序的能力,包括离线访问、推送通知、后台同步等功能,并...

    1 年前
  • 解决 Sequelize 中查询结果数组为空的问题

    在前端开发中,使用 Sequelize 库操作数据库时,有时会遇到查询结果返回空数组的情况,这给开发带来不少困扰。本篇文章将详细介绍解决这个问题的方法,以及如何避免类似问题的发生。

    1 年前
  • Kubernetes 性能优化实践

    Kubernetes 是目前最流行的容器编排系统之一,也是云原生时代不可或缺的一环。随着 Kubernetes 的广泛应用,性能优化成为 Kubernetes 中不可或缺的一部分。

    1 年前
  • 在 Mocha 中使用 Supertest 测试 Express 框架

    Express 是一个常用的 Node.js Web 框架,通过 Supertest 库可以进行对 Express 应用进行集成测试。本文将详细介绍在 Mocha 中使用 Supertest 测试 E...

    1 年前
  • Promise 中的 `all()` 和 `race()` 方法解析

    Promise 是一种广泛应用于异步编程的技术,它可以优雅地处理异步操作,为我们的代码提供了更简洁的解决方案。在使用 Promise 时,我们最常用到的就是 then() 和 catch() 方法,但...

    1 年前
  • MongoDB 和 Redis 的异同比较

    作为常用的 NoSQL 数据库,MongoDB 和 Redis 都在前端开发中扮演着重要的角色。它们可以用于存储、缓存和查询数据,以提高应用程序的性能和可靠性。 MongoDB MongoDB 是一个...

    1 年前
  • Tailwind 中的 Vue.js 实践经验分享

    Tailwind 是一个极其强大的 CSS 框架,它为我们的应用提供了大量的工具类,通过简单的组合就可以快速搭建出美观的 UI 界面。而 Vue.js 则是目前最受欢迎的前端框架之一,它提供了响应式数...

    1 年前
  • 如何在 Kubernetes 中配置 HTTPS

    背景和目的 在现代 Web 开发中,使用 HTTPS 加密协议进行通信是非常必要的,这不仅能够保护网站/应用的安全性,还可以提升用户体验和满意度。而在 Kubernetes 中,如果我们需要搭建一个使...

    1 年前
  • 解决 ES7 中 apply 和 call 方法的报错

    在前端开发中,我们经常使用 apply 和 call 方法来改变函数运行时 this 的指向,但在 ES7 中,如果传入的第一个参数不是函数类型,会抛出一个 TypeError 错误。

    1 年前
  • TypeScript 接口 VS 类型别名

    TypeScript 是一种强类型的 JavaScript 超集语言,它为我们提供了许多新的特性来改善编码体验和代码质量。 在开发 TypeScript 项目的过程中,我们经常需要定义一些类型来规定数...

    1 年前
  • Node.js 必修课之 Koa 框架实战讲解

    1. 前言 在 Node.js 后端开发中,Web 框架是必不可少的工具。而在众多的 Web 框架中,Koa 可谓是一个亮点,它是一款基于 Node.js 平台的新一代 Web 框架,由 expres...

    1 年前
  • ES11 全新的 private 字段:更好的代码封装

    在 JavaScript 中,对于对象属性的访问权限管理一直是一个难题。传统的方式是使用下划线作为属性名称的前缀表示该属性为私有属性,但这只是一种变相的约定,并没有真正实现数据和行为的封装。

    1 年前

相关推荐

    暂无文章