0%

Ingress vs LoadBalancer

问题描述

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

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

Load Balancer的作用是将流量转发到主机。在这方面,Ingress与Load Balancer有何不同?与Amazon ELB和ALB相比,kubernetes中的Load Balancer的概念是什么?

高票回答

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

Ingress:Ingress实际上只是将一组规则传递给正在监听它们的控制器。您可以部署一组Ingress规则,但除非您有可以处理它们的控制器,否则不会发生任何事情。如果配置为执行此操作,则LoadBalancer服务可以侦听Ingress规则。

您还可以创建NodePort服务,该服务在群集外部具有可外部路由的IP,但指向群集中存在的Pod。这可能是一个Ingress控制器。

Ingress Controller只是一个配置为解释入口规则的pod。nginx是kubernetes支持的最受欢迎的Ingress控制器之一。就亚马逊而言,ALB可用作Ingress控制器。

例如,这个nginx控制器能够获取你定义的入口规则并将它们转换为一个nginx.conf文件,它在它的pod中加载和启动。比如说你定义了一个Ingress如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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中看到定义的以下规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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。

示例介绍了如何在kubernetes集群中使用nginx ingress控制器。希望这可以帮助!

原文链接

Ingress vs Load Balancer