负载均衡器: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 集群。