Metallb#

Metallb - контроллер балансировки нагрузки, который используется в DropApp для предоставления статических IP-адресов для сервисов DropApp. Metallb может заменить выделение IP-адресов из общего списка адресов, позволяя конечным пользователям использовать статические IP-адреса для своих сервисов.

Предварительные условия#

Предварительные условия использования:

  • Отредактируйте конфигурацию kube-proxy в текущем кластере:

    kubectl edit configmap -n kube-system kube-proxy
    
  • Внесите конфигурацию:

    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    mode: "ipvs"
    ipvs:
    strictARP: true
    

Сценарий использования#

Сценарий использования metallb:

  1. Примените манифест:

    kubectl apply -f https://example.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
    
  2. Определите список адресов для предоставления услуг:

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: production
      namespace: metallb-system
    spec:
      # Укажите адрес для предоставления услуг.
      addresses:
      - <IP-address>/30
    
  3. Определите список адресов для среды разработки:

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: sandbox
      namespace: metallb-system
    spec:
      addresses:
      # Среда разработки использует частное IP-пространство, этому списку адресов выделяется масса IP-адресов для удобства разработки.
      - <IP-address>/20
    
  4. Установите атрибуты BGP для управления видимостью каждого набора адресов:

    apiVersion: metallb.io/v1beta1
    kind: BGPAdvertisement
    metadata:
      name: external
      namespace: metallb-system
    spec:
      ipAddressPools:
      - production
    

Ниже представлено определение объекта BGP Advertisement в DropApp, которое используется для управления конфигурациями BGP в DropApp-среде.

  • apiVersion определяет версию API, которая используется для описания объекта. В данном случае это metallb/v1beta1.

  • kind определяет тип объекта. В данном случае это BGPAdvertisement.

  • metadata содержит информацию об объекте, такую как имя (name), метку (labels) и пространство имен (namespace).

  • spec определяет конфигурацию объекта, такую как IP-адрес pool (ipAddressPools) и сообщества (communities).

В данном случае, объект описывает конфигурацию BGP, которая будет использоваться для управления IP-адресами в sandbox в namespace metallb-system. Сообщество vpn-only указывает, что эта конфигурация должна использоваться только для VPN-сетей.

apiVersion: metallb.io/v1beta1
kind: BGPAdvertisement
metadata:
  name: local
  namespace: metallb-system
spec:
  ipAddressPools:
  - sandbox
  communities:
    - vpn-only