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