32.5. A propos de la publicité pour les pools d'adresses IP


Vous pouvez configurer la MetalLB pour que l'adresse IP soit annoncée par les protocoles de la couche 2, le protocole BGP ou les deux. Avec la couche 2, MetalLB fournit une adresse IP externe tolérante aux pannes. Avec le protocole BGP, MetalLB fournit une tolérance aux pannes pour l'adresse IP externe et l'équilibrage de la charge.

MetalLB prend en charge la publicité par L2 et BGP pour le même ensemble d'adresses IP.

MetalLB offre la possibilité d'attribuer des pools d'adresses à des pairs BGP spécifiques, c'est-à-dire à un sous-ensemble de nœuds sur le réseau. Cela permet des configurations plus complexes, par exemple en facilitant l'isolation des nœuds ou la segmentation du réseau.

32.5.1. A propos de la ressource personnalisée BGPAdvertisement

Les champs de l'objet BGPAdvertisements sont définis dans le tableau suivant :

Tableau 32.2. Configuration de BGPAdvertisements
FieldTypeDescription

metadata.name

string

Spécifie le nom de l'annonce BGP.

metadata.namespace

string

Spécifie l'espace de noms pour l'annonce BGP. Spécifiez le même espace de noms que celui utilisé par l'opérateur MetalLB.

spec.aggregationLength

integer

Facultatif : Spécifie le nombre de bits à inclure dans un masque CIDR de 32 bits. Pour agréger les routes que l'orateur annonce aux homologues BGP, le masque est appliqué aux routes pour plusieurs adresses IP de service et l'orateur annonce la route agrégée. Par exemple, avec une longueur d'agrégation de 24, l'orateur peut agréger plusieurs adresses IP de service 10.0.1.x/32 et annoncer une seule route 10.0.1.0/24.

spec.aggregationLengthV6

integer

Facultatif : Spécifie le nombre de bits à inclure dans un masque CIDR de 128 bits. Par exemple, avec une longueur d'agrégation de 124, l'orateur peut agréger plusieurs adresses IP de service fc00:f853:0ccd:e799::x/128 et annoncer une seule route fc00:f853:0ccd:e799::0/124.

spec.communities

string

Facultatif : Spécifie une ou plusieurs communautés BGP. Chaque communauté est spécifiée sous la forme de deux valeurs de 16 bits séparées par le caractère deux-points. Les communautés connues doivent être spécifiées sous forme de valeurs de 16 bits :

  • NO_EXPORT: 65535:65281
  • NO_ADVERTISE: 65535:65282
  • NO_EXPORT_SUBCONFED: 65535:65283

    Note

    Vous pouvez également utiliser les objets communautaires qui sont créés avec les chaînes.

spec.localPref

integer

Facultatif : Spécifie la préférence locale pour cette annonce. Cet attribut BGP s'applique aux sessions BGP au sein du système autonome.

spec.ipAddressPools

string

Facultatif : La liste de IPAddressPools à annoncer avec cette publicité, sélectionnée par nom.

spec.ipAddressPoolSelectors

string

Facultatif : Un sélecteur pour le IPAddressPools qui est annoncé avec cette annonce. Cela permet d'associer IPAddressPool à la publicité en se basant sur l'étiquette attribuée à IPAddressPool plutôt que sur le nom lui-même. Si aucun IPAddressPool n'est sélectionné par ce sélecteur ou par la liste, la publicité est appliquée à tous les IPAddressPools.

spec.nodeSelectors

string

Facultatif : NodeSelectors permet de limiter les nœuds à annoncer comme prochains sauts pour l'IP de l'équilibreur de charge. S'il est vide, tous les nœuds sont annoncés comme prochains sauts.

spec.peers

string

Facultatif : Peers (pairs) limite le pair BGP auquel annoncer les IP des pools sélectionnés. Lorsqu'elle est vide, l'IP de l'équilibreur de charge est annoncée à tous les pairs BGP configurés.

32.5.2. Configurer MetalLB avec une annonce BGP et un cas d'utilisation de base

Configurez MetalLB comme suit pour que les routeurs BGP homologues reçoivent une route 203.0.113.200/32 et une route fc00:f853:ccd:e799::1/128 pour chaque adresse IP d'équilibreur de charge que MetalLB attribue à un service. Les champs localPref et communities n'étant pas spécifiés, les routes sont annoncées avec localPref à zéro et aucune communauté BGP.

32.5.2.1. Exemple : Annonce d'une configuration de base d'un pool d'adresses avec BGP

Configurez MetalLB comme suit pour que le site IPAddressPool soit annoncé par le protocole BGP.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Connectez-vous en tant qu'utilisateur disposant des privilèges cluster-admin.

Procédure

  1. Créer un pool d'adresses IP.

    1. Créez un fichier, tel que ipaddresspool.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-bgp-basic
      spec:
        addresses:
          - 203.0.113.200/30
          - fc00:f853:ccd:e799::/124
    2. Appliquer la configuration du pool d'adresses IP :

      $ oc apply -f ipaddresspool.yaml
  2. Créer une annonce BGP.

    1. Créez un fichier, tel que bgpadvertisement.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-basic
        namespace: metallb-system
      spec:
        ipAddressPools:
        - doc-example-bgp-basic
    2. Appliquer la configuration :

      $ oc apply -f bgpadvertisement.yaml

32.5.3. Configurer MetalLB avec une annonce BGP et un cas d'utilisation avancé

Configurez MetalLB comme suit pour que MetalLB attribue des adresses IP aux services de load-balancer dans les plages entre 203.0.113.200 et 203.0.113.203 et entre fc00:f853:ccd:e799::0 et fc00:f853:ccd:e799::f.

Pour expliquer les deux annonces BGP, considérons un cas où MetalLB attribue l'adresse IP 203.0.113.200 à un service. Avec cette adresse IP comme exemple, l'orateur annonce deux routes aux pairs BGP :

  • 203.0.113.200/32avec localPref défini sur 100 et la communauté définie sur la valeur numérique de la communauté NO_ADVERTISE. Cette spécification indique aux routeurs homologues qu'ils peuvent utiliser cette route mais qu'ils ne doivent pas propager les informations relatives à cette route aux homologues BGP.
  • 203.0.113.200/30l'adresse IP de l'équilibreur de charge est agrégée par MetalLB en une seule route. MetalLB annonce la route agrégée aux pairs BGP avec l'attribut community défini sur 8000:800. Les pairs BGP propagent la route 203.0.113.200/30 à d'autres pairs BGP. Lorsque le trafic est acheminé vers un nœud doté d'un haut-parleur, la route 203.0.113.200/32 est utilisée pour transférer le trafic dans le cluster et vers un pod associé au service.

Au fur et à mesure que vous ajoutez des services et que MetalLB attribue des adresses IP d'équilibreur de charge à partir du pool, les routeurs pairs reçoivent une route locale, 203.0.113.20x/32, pour chaque service, ainsi que la route agrégée 203.0.113.200/30. Chaque service ajouté génère la route /30, mais MetalLB déduplique les routes en une annonce BGP avant de communiquer avec les routeurs pairs.

32.5.3.1. Exemple : Annonce d'une configuration avancée d'un pool d'adresses avec BGP

Configurez MetalLB comme suit pour que le site IPAddressPool soit annoncé par le protocole BGP.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Connectez-vous en tant qu'utilisateur disposant des privilèges cluster-admin.

Procédure

  1. Créer un pool d'adresses IP.

    1. Créez un fichier, tel que ipaddresspool.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-bgp-adv
        labels:
          zone: east
      spec:
        addresses:
          - 203.0.113.200/30
          - fc00:f853:ccd:e799::/124
        autoAssign: false
    2. Appliquer la configuration du pool d'adresses IP :

      $ oc apply -f ipaddresspool.yaml
  2. Créer une annonce BGP.

    1. Créez un fichier, tel que bgpadvertisement1.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-adv-1
        namespace: metallb-system
      spec:
        ipAddressPools:
          - doc-example-bgp-adv
        communities:
          - 65535:65282
        aggregationLength: 32
        localPref: 100
    2. Appliquer la configuration :

      $ oc apply -f bgpadvertisement1.yaml
    3. Créez un fichier, tel que bgpadvertisement2.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: BGPAdvertisement
      metadata:
        name: bgpadvertisement-adv-2
        namespace: metallb-system
      spec:
        ipAddressPools:
          - doc-example-bgp-adv
        communities:
          - 8000:800
        aggregationLength: 30
        aggregationLengthV6: 124
    4. Appliquer la configuration :

      $ oc apply -f bgpadvertisement2.yaml

32.5.4. Publicité d'un groupe d'adresses IP à partir d'un sous-ensemble de nœuds

Pour annoncer une adresse IP à partir d'un pool d'adresses IP, uniquement à partir d'un ensemble spécifique de nœuds, utilisez la spécification .spec.nodeSelector dans la ressource personnalisée BGPAdvertisement. Cette spécification associe un pool d'adresses IP à un ensemble de nœuds dans le cluster. Ceci est utile lorsque vous avez des nœuds sur différents sous-réseaux dans un cluster et que vous voulez annoncer une adresse IP à partir d'un pool d'adresses à partir d'un sous-réseau spécifique, par exemple un sous-réseau public uniquement.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Connectez-vous en tant qu'utilisateur disposant des privilèges cluster-admin.

Procédure

  1. Créer un pool d'adresses IP en utilisant une ressource personnalisée :

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: pool1
    spec:
      addresses:
        - 4.4.4.100-4.4.4.200
        - 2001:100:4::200-2001:100:4::400
  2. Contrôlez les nœuds du cluster à partir desquels l'adresse IP de pool1 est annoncée en définissant la valeur .spec.nodeSelector dans la ressource personnalisée BGPAdvertisement :

    apiVersion: metallb.io/v1beta1
    kind: BGPAdvertisement
    metadata:
      name: example
    spec:
      ipAddressPools:
      - pool1
      nodeSelector:
      - matchLabels:
          kubernetes.io/hostname: NodeA
      - matchLabels:
          kubernetes.io/hostname: NodeB

Dans cet exemple, l'adresse IP de pool1 ne fait de la publicité que pour NodeA et NodeB.

32.5.5. À propos de la ressource personnalisée L2Advertisement

Les champs de l'objet l2Advertisements sont définis dans le tableau suivant :

Tableau 32.3. Configuration des annonces L2
FieldTypeDescription

metadata.name

string

Spécifie le nom de l'annonce L2.

metadata.namespace

string

Spécifie l'espace de noms pour l'annonce L2. Spécifiez le même espace de noms que celui utilisé par l'opérateur MetalLB.

spec.ipAddressPools

string

Facultatif : La liste de IPAddressPools à annoncer avec cette publicité, sélectionnée par nom.

spec.ipAddressPoolSelectors

string

Facultatif : Un sélecteur pour le IPAddressPools qui est annoncé avec cette annonce. Cela permet d'associer IPAddressPool à la publicité en se basant sur l'étiquette attribuée à IPAddressPool plutôt que sur le nom lui-même. Si aucun IPAddressPool n'est sélectionné par ce sélecteur ou par la liste, la publicité est appliquée à tous les IPAddressPools.

spec.nodeSelectors

string

Facultatif : NodeSelectors limite les nœuds à annoncer comme prochains sauts pour l'IP de l'équilibreur de charge. S'il est vide, tous les nœuds sont annoncés comme prochains sauts.

Important

La limitation des nœuds à annoncer en tant que sauts suivants est une fonctionnalité de l'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

32.5.6. Configuration de MetalLB avec une annonce L2

Configurez MetalLB comme suit pour que le site IPAddressPool soit annoncé avec le protocole L2.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Connectez-vous en tant qu'utilisateur disposant des privilèges cluster-admin.

Procédure

  1. Créer un pool d'adresses IP.

    1. Créez un fichier, tel que ipaddresspool.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-l2
      spec:
        addresses:
          - 4.4.4.0/24
        autoAssign: false
    2. Appliquer la configuration du pool d'adresses IP :

      $ oc apply -f ipaddresspool.yaml
  2. Créer une publicité L2.

    1. Créez un fichier, tel que l2advertisement.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: L2Advertisement
      metadata:
        name: l2advertisement
        namespace: metallb-system
      spec:
        ipAddressPools:
         - doc-example-l2
    2. Appliquer la configuration :

      $ oc apply -f l2advertisement.yaml

32.5.7. Configuration de MetalLB avec une annonce et une étiquette L2

Le champ ipAddressPoolSelectors dans les définitions des ressources personnalisées BGPAdvertisement et L2Advertisement est utilisé pour associer IPAddressPool à l'annonce sur la base de l'étiquette attribuée à IPAddressPool au lieu du nom lui-même.

Cet exemple montre comment configurer MetalLB pour que le site IPAddressPool soit annoncé avec le protocole L2 en configurant le champ ipAddressPoolSelectors.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Connectez-vous en tant qu'utilisateur disposant des privilèges cluster-admin.

Procédure

  1. Créer un pool d'adresses IP.

    1. Créez un fichier, tel que ipaddresspool.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        namespace: metallb-system
        name: doc-example-l2-label
        labels:
          zone: east
      spec:
        addresses:
          - 172.31.249.87/32
    2. Appliquer la configuration du pool d'adresses IP :

      $ oc apply -f ipaddresspool.yaml
  2. Créer une publicité L2 annonçant l'IP en utilisant ipAddressPoolSelectors.

    1. Créez un fichier, tel que l2advertisement.yaml, dont le contenu ressemble à l'exemple suivant :

      apiVersion: metallb.io/v1beta1
      kind: L2Advertisement
      metadata:
        name: l2advertisement-label
        namespace: metallb-system
      spec:
        ipAddressPoolSelectors:
          - matchExpressions:
              - key: zone
                operator: In
                values:
                  - east
    2. Appliquer la configuration :

      $ oc apply -f l2advertisement.yaml

32.5.8. Ressources supplémentaires

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.