Ingress 与负载均衡器

2023-12-14

我对 Kubernetes 中 Ingress 和 Load Balancer 的角色很困惑。

据我了解,Ingress 用于将来自互联网的传入流量映射到集群中运行的服务。

负载均衡器的作用是将流量转发到主机。在这方面,ingress 与负载均衡器有何不同?另外,与 Amazon ELB 和 ALB 相比,kubernetes 内部的负载均衡器的概念是什么?


负载均衡器:kubernetes LoadBalancer 服务是指向不在 kubernetes 集群中但存在于其他地方的外部负载均衡器的服务。假设您的 Pod 可从外部路由,它们可以与您的 Pod 配合使用。 Google 和 AWS 本身就提供了此功能。就 Amazon 而言,这直接与 ELB 映射,并且在 AWS 中运行时 kubernetes 可以为部署的每个 LoadBalancer 服务自动预置和配置 ELB 实例。

Ingress:入口实际上只是传递给正在侦听它们的控制器的一组规则。您可以部署一堆入口规则,但除非您有一个可以处理它们的控制器,否则什么都不会发生。 LoadBalancer 服务可以侦听入口规则(如果已配置)。

您还可以创建一个NodePortservice,它在集群外有一个外部可路由的 IP,但指向集群内存在的 pod。这可能是一个入口控制器。

入口控制器只是一个配置为解释入口规则的 Pod。 nginx 支持的最流行的入口控制器之一是 nginx。就亚马逊而言,ALB可以使用作为入口控制器。

举个例子,thisnginx 控制器能够获取您定义的入口规则,并将其转换为 nginx.conf 文件,并在其 pod 中加载和启动。

举例来说,假设您定义了一个入口,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
   ingress.kubernetes.io/rewrite-target: /
 name: web-ingress
spec:
  rules:
  - host: kubernetes.foo.bar
    http:
      paths:
      - backend:
          serviceName: appsvc
          servicePort: 80
        path: /app

如果您随后检查 nginx 控制器 pod,您将看到以下定义的规则/etc/nginx.conf:

server {
    server_name kubernetes.foo.bar;
    listen 80;
    listen [::]:80;
    set $proxy_upstream_name "-";
    location ~* ^/web2\/?(?<baseuri>.*) {
        set $proxy_upstream_name "apps-web2svc-8080";
        port_in_redirect off;

        client_max_body_size                    "1m";

        proxy_set_header Host                   $best_http_host;

        # Pass the extracted client certificate to the backend

        # Allow websocket connections
        proxy_set_header                        Upgrade           $http_upgrade;
        proxy_set_header                        Connection        $connection_upgrade;

        proxy_set_header X-Real-IP              $the_real_ip;
        proxy_set_header X-Forwarded-For        $the_x_forwarded_for;
        proxy_set_header X-Forwarded-Host       $best_http_host;
        proxy_set_header X-Forwarded-Port       $pass_port;
        proxy_set_header X-Forwarded-Proto      $pass_access_scheme;
        proxy_set_header X-Original-URI         $request_uri;
        proxy_set_header X-Scheme               $pass_access_scheme;

        # mitigate HTTPoxy Vulnerability
        # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
        proxy_set_header Proxy                  "";

        # Custom headers

        proxy_connect_timeout                   5s;
        proxy_send_timeout                      60s;
        proxy_read_timeout                      60s;

        proxy_redirect                          off;
        proxy_buffering                         off;
        proxy_buffer_size                       "4k";
        proxy_buffers                           4 "4k";

        proxy_http_version                      1.1;

        proxy_cookie_domain                     off;
        proxy_cookie_path                       off;

    rewrite /app/(.*) /$1 break;
    rewrite /app / break;
    proxy_pass http://apps-appsvc-8080;
    
    }

Nginx 刚刚创建了一条路由规则http://kubernetes.foo.bar/app指向服务appsvc在您的集群中。

Here is 一个例子介绍如何使用 nginx 入口控制器实现 kubernetes 集群。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ingress 与负载均衡器 的相关文章

随机推荐

  • 没有列表的项目符号列表

    我有以下 html 代码 div class magicbullets Nice awesome cool div 我需要它表现得像 div class magicbullets ul li nice li li aweseome li l
  • SQLite 查询限制

    我正在构建一个小界面 我希望用户能够在其中写出他们的信息entiresql语句 然后查看返回的数据 但是 我不希望用户能够做任何有趣的事情 即delete from user table 实际上 我希望用户能够做的唯一一件事就是运行sele
  • 如何在不访问数据库的情况下创建带有延迟字段的 django 模型实例?

    假设我知道数据库中存在 django 模型的一行的一些字段 但没有将它们封装在模型实例中 有没有什么简单的方法可以让我将它们包装在模型实例中 而无需执行额外的数据库查询 并以填充了这些字段但所有其他字段都延迟的实例结束 所以说我有模型 fr
  • C# 代码不会启动程序。 Win32Exception 未处理

    我正在制作一个程序 当单击按钮时启动程序 它似乎适用于 Chrome 或 Word 等程序 但不适用于 fraps 等较小的程序 并给了我错误 System dll 中发生类型为 System ComponentModel Win32Exc
  • Big Endian 和 Little Endian 字节顺序的区别

    Big Endian 和 Little Endian 字节顺序有什么区别 这两个似乎都与 Unicode 和 UTF16 有关 我们到底在哪里使用它 Big Endian BE Little Endian LE 是组织多字节字的两种方法 例
  • 我应该如何在 C++ 中正确使用 FormatMessage()?

    Without MFC ATL 我该如何使用FormatMessage 获取错误文本HRESULT HRESULT hresult application CreateInstance Excel Application if FAILED
  • 多级动态弹出菜单

    我有以下带有纯 CSS 的弹出菜单结构 HTML ul class menu li a href Base a ul li a href Clients a ul li a href New a li li a href Edit a li
  • 如何阻止 numpy hstack 更改 opencv 中的像素值

    我正在尝试使用 opencv 在 python 中显示图像 并在其上显示侧窗格 当我使用np hstack主画面变得无法辨认的白色 只有少量的颜色 这是我的代码 img cv2 imread filename img with gt gt
  • 如何在 Visual Studio 2013 中的源代码管理下复制和重命名解决方案

    我有一个名为 ShoppingService sln 的 VS2013 解决方案 其中有 7 个项目受 TFS 源代码控制 现在我想复制该解决方案 将其重命名为 BasketService sln 并再次将其置于源代码控制之下 我不想创建原
  • 使用 PHP 和 DOTNET 类访问 Windows 注册表

    这是一个简单的问题 如何使用 PHP 和 DOTNET 类访问 Windows 注册表 我想做的是读取另一个程序写入的值 谷歌搜索并没有透露太多信息 我很感激任何答案 我找到了答案 它适用于 COM 对象 wscript new COM W
  • 将一个txt文件内容附加到另一个现有txt文件

    我正在尝试附加names txt将文件内容复制到另一个名为 as 的文件surname txt在文件末尾 不丢失以前的信息surname txt 有什么可能的方法来实现这个操作 为了执行此操作 我使用 php 以下解决方案完美运行 但数据没
  • HtmlUnit 测试失败示例

    我正在尝试通过 Junit 运行示例 HtmlUnit 测试用例 我的项目是基于 Maven 的 我是否需要将编译和测试下列出的所有依赖项添加到我的 POM 中 http htmlunit sourceforge net dependenc
  • android grafika ContinuousCapture 活动问题

    我正在使用 android grafika 进行视频录制 我将更改我想要的所有内容 一切都很完美 只有2个问题 如果我在 7 秒 例如 2 秒或低于 7 秒 后保存视频 那么它会保存 7 秒的视频 如果我拍摄的视频时长为 15 秒或更长时间
  • 在画布上绘制路径作为动画

    我必须再问一次 因为之前没有人回答我的问题 我的问题不是重复的如何在 Android 画布上用动画绘制路径 请仔细阅读并帮助我 如果可能的话 提供代码 上面的例子对我来说不清楚 路径是在绘图流程上创建的 这不是我要找的 我想绘制一条已存在于
  • Java 中的类型擦除

    类型擦除应该擦除所有通用信息 如果是这种情况 像 GSON 这样的库如何使用泛型来确定反序列化为什么类型 e g private Map
  • 将动力学函数应用于相空间中的每个点(由二维矩阵表示)

    我有一个整数矩阵 phase space形状的 n n 其中每个条目代表空间中该位置的点数 我还有两个更新矩阵u x u y也有形状 n n 整数在范围内0 n指定我的动力系统在空间中的每个对应点的位置 我想迭代地将更新矩阵 应用 到相空间
  • 如何使用 Ruby 将阿拉伯/波斯数字翻译成英语?

    如何将一些具有阿拉伯 波斯数字的字符串转换为英语 就像如果我有 str1 str2 12 str3 some string that contains persian digits like 是否有任何函数将其编码为英语 如果字符串包含这样
  • 调用局部视图

    我有一个渲染两个下拉列表的视图 下拉列表的控制器工作正常 他们调用存储库类中的方法来进行数据库选择 在下拉列表下方 我尝试在部分视图中呈现数据表 以响应下拉列表选择 视图中的下拉菜单使用单个模型 model BudgetDemo Model
  • 将数据表中的行选择限制为 3

    我目前正在使用 jQuery 数据表插件 想知道是否有任何方法可以将行选择限制为 3 现在用户可以选择无限数量的行 这是我的代码的 jsfiddle http jsfiddle net EfFA2 JS document ready fun
  • Ingress 与负载均衡器

    我对 Kubernetes 中 Ingress 和 Load Balancer 的角色很困惑 据我了解 Ingress 用于将来自互联网的传入流量映射到集群中运行的服务 负载均衡器的作用是将流量转发到主机 在这方面 ingress 与负载均