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 :
Field | Type | Description |
---|---|---|
|
| Spécifie le nom de l'annonce BGP. |
|
| 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. |
|
|
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 |
|
|
Facultatif : Spécifie le nombre de bits à inclure dans un masque CIDR de 128 bits. Par exemple, avec une longueur d'agrégation de |
|
| 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 :
|
|
| 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. |
|
|
Facultatif : La liste de |
|
|
Facultatif : Un sélecteur pour le |
|
|
Facultatif : |
|
| 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
Créer un pool d'adresses IP.
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
Appliquer la configuration du pool d'adresses IP :
$ oc apply -f ipaddresspool.yaml
Créer une annonce BGP.
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
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/32
aveclocalPref
défini sur100
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/30
l'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 sur8000:800
. Les pairs BGP propagent la route203.0.113.200/30
à d'autres pairs BGP. Lorsque le trafic est acheminé vers un nœud doté d'un haut-parleur, la route203.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
Créer un pool d'adresses IP.
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
Appliquer la configuration du pool d'adresses IP :
$ oc apply -f ipaddresspool.yaml
Créer une annonce BGP.
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
Appliquer la configuration :
$ oc apply -f bgpadvertisement1.yaml
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
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
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
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 :
Field | Type | Description |
---|---|---|
|
| Spécifie le nom de l'annonce L2. |
|
| 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. |
|
|
Facultatif : La liste de |
|
|
Facultatif : Un sélecteur pour le |
|
|
Facultatif : 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
Créer un pool d'adresses IP.
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
Appliquer la configuration du pool d'adresses IP :
$ oc apply -f ipaddresspool.yaml
Créer une publicité L2.
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
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
Créer un pool d'adresses IP.
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
Appliquer la configuration du pool d'adresses IP :
$ oc apply -f ipaddresspool.yaml
Créer une publicité L2 annonçant l'IP en utilisant
ipAddressPoolSelectors
.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
Appliquer la configuration :
$ oc apply -f l2advertisement.yaml