NLB обеспечивается за счет использования сервисов с типом LoadBalancer.
Примеры настроек для объектов Service
Общий IP-адрес для нескольких сервисов
Для того, чтобы сервисы использовали одни и те же IP-адреса, добавьте к ним аннотацию network.deckhouse.io/load-balancer-shared-ip-key
:
apiVersion: v1
kind: Service
metadata:
name: dns-service-tcp
namespace: default
annotations:
network.deckhouse.io/load-balancer-shared-ip-key: "key-to-share-1.2.3.4"
spec:
type: LoadBalancer
ports:
- name: dnstcp
protocol: TCP
port: 53
targetPort: 53
selector:
app: dns
---
apiVersion: v1
kind: Service
metadata:
name: dns-service-udp
namespace: default
annotations:
network.deckhouse.io/load-balancer-shared-ip-key: "key-to-share-1.2.3.4"
spec:
type: LoadBalancer
ports:
- name: dnsudp
protocol: UDP
port: 53
targetPort: 53
selector:
app: dns
Принудительное назначение IP-адреса
Чтобы принудительно задать адрес для сервиса, добавьте аннотацию network.deckhouse.io/load-balancer-ips
:
apiVersion: v1
kind: Service
metadata:
name: nginx
annotations:
network.deckhouse.io/load-balancer-ips: 192.168.217.217
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
type: LoadBalancer
Назначение IPAddressPool (режим BGP)
В режиме BGP LoadBalancer получение IP-адреса возможно из определённого пула адресов через аннотацию metallb.universe.tf/address-pool
.
Для режима L2 LoadBalancer необходимо использовать настройки MetalLoadBalancerClass.
Пример:
apiVersion: v1
kind: Service
metadata:
name: nginx
annotations:
metallb.universe.tf/address-pool: production-public-ips
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
type: LoadBalancer