我对库伯奈特中的进题和负载均衡器的角色很困惑。
据我所知,internet用于将来自internet的传入流量映射到集群中运行的服务。
负载均衡器的作用是将流量转发给主机。在这方面,入口与负载平衡器有何不同?此外,与Amazon和ALB相比,kubernetes内部负载均衡器的概念是什么?
发布于 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文件,该文件将在其荚中加载和启动。
例如,假设您将入口定义为:
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中定义的以下规则
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集群的一个例子。希望这能有所帮助!
发布于 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、路由等)。
发布于 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云负载均衡器(省钱),它将指向在您的集群中运行的侵入控制器。
大会主计长是:
集群负载平衡/向群集内的群集IP服务反向代理通信量中的HTTPS LB/ L7控制器,如果您有一个TLS证书类型的Kubernetes秘密和引用它的侵入对象,它也可以终止HTTPS。)

https://stackoverflow.com/questions/45079988
复制相似问题