首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >入口与负载均衡器

入口与负载均衡器
EN

Stack Overflow用户
提问于 2017-07-13 11:59:29
回答 9查看 138.2K关注 0票数 414

我对库伯奈特中的进题和负载均衡器的角色很困惑。

据我所知,internet用于将来自internet的传入流量映射到集群中运行的服务。

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2017-07-13 15:03:36

负载均衡器:A kubernetes LoadBalancer服务是指向外部负载平衡器的服务,它不是在kubernetes集群中,而是存在于其他地方。它们可以与您的吊舱一起工作,假设您的吊舱是外部可路由的。Google和AWS本机提供这种功能。就亚马逊而言,当在AWS中运行时,这与ELB和kubernetes直接映射,可以自动为部署的每个LoadBalancer服务提供和配置一个ELB实例。

侵入:入口实际上只是传递给正在监听它们的控制器的一组规则。您可以部署大量的入口规则,但是除非您有一个能够处理它们的控制器,否则不会发生任何事情。如果LoadBalancer服务被配置为入口规则,则它可以侦听入口规则。

您还可以创建一个NodePort服务,它在集群外部具有一个外部可路由的IP,但指向集群中存在的一个pod。这可能是个女管理员。

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

例如, nginx控制器能够摄取您定义的入口规则,并将它们转换为nginx.conf文件,该文件将在其荚中加载和启动。

例如,假设您将入口定义为:

代码语言:javascript
复制
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控制器荚,您将看到在/etc/nginx.conf中定义的以下规则

代码语言:javascript
复制
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

下面是如何使用nginx入口控制器实现kubernetes集群的一个例子。希望这能有所帮助!

票数 311
EN

Stack Overflow用户

发布于 2018-05-11 06:06:47

我发现了这篇很有趣的文章,它解释了NodePort、LoadBalancer和Ingress之间的区别。

从该条的现有内容来看:

LoadBalancer:

LoadBalancer服务是向internet公开服务的标准方法。在GKE上,这将产生一个网络负载均衡器,它将为您提供一个IP地址,该地址将向您的服务转发所有通信量。 如果您想直接公开服务,这是默认方法。您指定的端口上的所有通信量都将转发给服务。没有过滤,没有路由等等,这意味着你几乎可以发送任何类型的流量到它,如HTTP,TCP,UDP,Websockets,gRPC,或其他什么。 最大的缺点是,您使用LoadBalancer公开的每个服务都将获得自己的IP地址,而且您必须为每个公开的服务支付一个LoadBalancer,这可能会很昂贵!

信息:

入口实际上不是一种服务。相反,它位于多个服务的前面,充当“智能路由器”或集群的入口点。 您可以使用一个宏来做很多不同的事情,并且有许多类型的宏控制器具有不同的功能。 默认的GKE入口控制器将为您旋转一个HTTP(S)负载均衡器。这将允许您同时执行基于路径的路由和基于子域的后端服务路由。例如,您可以将foo.yourdomain.example上的所有内容发送到foo服务,并将yourdomain.example/bar/路径下的所有内容发送到bar服务。 入口可能是公开服务的最强大的方式,但也可能是最复杂的。有许多类型的侵入控制器,从谷歌云负载均衡器,Nginx,轮廓,Istio,等等。还有一些插件可以自动为您的服务提供SSL证书,比如证书管理器( cert-manager )。 如果您想在同一个IP地址下公开多个服务,而这些服务都使用相同的L7协议(通常是HTTP),那么入口是最有用的。如果您使用的是本地GCP集成,您只需要为一个负载均衡器支付费用,而且由于Ingress是“智能的”,所以您可以从盒子中获得许多特性(如SSL、Auth、路由等)。

票数 140
EN

Stack Overflow用户

发布于 2019-07-28 04:13:51

有4种允许集群中的荚接收外部通信量的方法:

1.)使用HostNetworking: true和(允许每个节点1个Pod直接侦听主机节点上的端口)。Minikube,裸金属,和rasberry pi有时会走这条路线--允许主机节点监听端口80/443 --允许不使用负载均衡器或高级云负载均衡器配置,它还绕过了Kubernetes服务,这对于避免externalTrafficPolicy/实现类似的SNAT效果很有用:在不像AWS那样的情况下它是本地的)。

2.)NodePort服务

3.)LoadBalancer服务(基于NodePort服务)

4.)入口控制器+侵入对象(建立在上述基础上)

假设您在集群中托管了10个网站,并且希望将它们全部暴露在外部流量中。

*如果您使用类型的LoadBalancer服务,您将生成10个HA云负载平衡器(每个费用)

*如果您使用类型的侵入控制器,您将生成一个HA云负载均衡器(省钱),它将指向在您的集群中运行的侵入控制器。

大会主计长是:

  • 负载均衡器类型的服务,由集群中运行的豆荚部署支持。
  • 每个吊舱做两件事: 1.充当在集群中运行的第7层负载均衡器。( Nginx有多种口味,非常流行) 2.基于集群中的宏对象来动态地配置自己(可以将Ingress对象看作是第7层负载均衡器的声明式配置片段)。

集群负载平衡/向群集内的群集IP服务反向代理通信量中的HTTPS LB/ L7控制器,如果您有一个TLS证书类型的Kubernetes秘密和引用它的侵入对象,它也可以终止HTTPS。)

票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45079988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档