Балансировщик нагрузки. Служба kubernetes LoadBalancer - это служба, которая указывает на внешние балансировщики нагрузки, которые НЕ находятся в вашем кластере kubernetes, но существуют в другом месте. Они могут работать с вашими модулями, предполагая, что они могут быть внешне маршрутизируемыми. Google и AWS предоставляют эту возможность изначально. В терминах Amazon это сопоставление напрямую с ELB и kubernetes при работе в AWS позволяет автоматически предоставлять и настраивать экземпляр ELB для каждой развернутой службы LoadBalancer.
Вход: вход - это просто набор правил, которые нужно передать контроллеру, который их слушает. Вы можете развернуть несколько правил входа, но ничего не произойдет, если у вас нет контроллера, который может их обрабатывать. Служба LoadBalancer может прослушивать входящие правила, если она настроена на это.
Вы также можете создать службу NodePort , которая имеет внешне маршрутизируемый IP-адрес вне кластера, но указывает на модуль, который существует в вашем кластере. Это может быть Ingress Controller.
Ingress Controller - это просто модуль, настроенный для интерпретации правил входа. Одним из самых популярных входных контроллеров, поддерживаемых kubernetes, является nginx. С точки зрения Amazon, 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
в вашем кластере.
Вот пример того, как реализовать кластер kubernetes с входным контроллером nginx. Надеюсь это поможет!