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