24.14. Configuration d'une adresse IP de sortie


En tant qu'administrateur de cluster, vous pouvez configurer le plugin réseau OVN-Kubernetes Container Network Interface (CNI) pour attribuer une ou plusieurs adresses IP de sortie à un espace de noms, ou à des pods spécifiques dans un espace de noms.

24.14.1. Conception architecturale et mise en œuvre de l'adresse IP de sortie

La fonctionnalité d'adresse IP de sortie d'OpenShift Container Platform vous permet de vous assurer que le trafic d'un ou plusieurs pods dans un ou plusieurs espaces de noms a une adresse IP source cohérente pour les services en dehors du réseau du cluster.

Par exemple, vous pouvez avoir un pod qui interroge périodiquement une base de données hébergée sur un serveur extérieur à votre cluster. Pour appliquer les conditions d'accès au serveur, un dispositif de filtrage des paquets est configuré pour n'autoriser le trafic qu'à partir d'adresses IP spécifiques. Pour garantir la fiabilité de l'accès au serveur à partir de ce module spécifique, vous pouvez configurer une adresse IP de sortie spécifique pour le module qui envoie les requêtes au serveur.

Une adresse IP de sortie attribuée à un espace de noms est différente d'un routeur de sortie, qui est utilisé pour envoyer le trafic vers des destinations spécifiques.

Dans certaines configurations de cluster, les pods d'application et les pods de routeur d'entrée fonctionnent sur le même nœud. Si vous configurez une adresse IP de sortie pour un projet d'application dans ce scénario, l'adresse IP n'est pas utilisée lorsque vous envoyez une requête à une route à partir du projet d'application.

Important

Les adresses IP de sortie ne doivent pas être configurées dans les fichiers de configuration du réseau Linux, tels que ifcfg-eth0.

24.14.1.1. Soutien à la plate-forme

La prise en charge de la fonctionnalité d'adresse IP de sortie sur diverses plates-formes est résumée dans le tableau suivant :

Plate-formeSoutenu

Métal nu

Oui

VMware vSphere

Oui

Plate-forme Red Hat OpenStack (RHOSP)

Oui

Amazon Web Services (AWS)

Oui

Google Cloud Platform (GCP)

Oui

Microsoft Azure

Oui

Important

L'attribution d'adresses IP de sortie aux nœuds du plan de contrôle avec la fonctionnalité EgressIP n'est pas prise en charge sur un cluster provisionné sur Amazon Web Services (AWS). (BZ#2039656)

24.14.1.2. Considérations relatives à la plateforme de cloud public

Pour les clusters provisionnés sur une infrastructure de cloud public, il existe une contrainte sur le nombre absolu d'adresses IP assignables par nœud. Le nombre maximal d'adresses IP assignables par nœud, ou le IP capacitypeut être décrit par la formule suivante :

IP capacity = public cloud default capacity - sum(current IP assignments)

Bien que la fonction Egress IPs gère la capacité d'adresses IP par nœud, il est important de tenir compte de cette contrainte dans vos déploiements. Par exemple, pour un cluster installé sur une infrastructure bare-metal avec 8 nœuds, vous pouvez configurer 150 adresses IP de sortie. Toutefois, si un fournisseur de cloud public limite la capacité d'adresses IP à 10 adresses IP par nœud, le nombre total d'adresses IP assignables n'est que de 80. Pour obtenir la même capacité d'adresses IP dans cet exemple de fournisseur de cloud, il faudrait allouer 7 nœuds supplémentaires.

Pour confirmer la capacité IP et les sous-réseaux de n'importe quel nœud de votre environnement de cloud public, vous pouvez entrer la commande oc get node <node_name> -o yaml. L'annotation cloud.network.openshift.io/egress-ipconfig comprend des informations sur la capacité et les sous-réseaux du nœud.

La valeur d'annotation est un tableau contenant un objet unique dont les champs fournissent les informations suivantes pour l'interface réseau primaire :

  • interface: Spécifie l'ID de l'interface sur AWS et Azure et le nom de l'interface sur GCP.
  • ifaddr: Spécifie le masque de sous-réseau pour une ou les deux familles d'adresses IP.
  • capacity: Spécifie la capacité d'adresses IP pour le nœud. Sur AWS, la capacité d'adresses IP est fournie par famille d'adresses IP. Sur Azure et GCP, la capacité d'adresses IP comprend les adresses IPv4 et IPv6.

L'attachement et le détachement automatiques des adresses IP de sortie pour le trafic entre les nœuds sont disponibles. Cela permet au trafic de nombreux pods dans les espaces de noms d'avoir une adresse IP source cohérente vers des emplacements en dehors du cluster. Cela prend également en charge OpenShift SDN et OVN-Kubernetes, qui est le plugin de mise en réseau par défaut dans Red Hat OpenShift Networking dans OpenShift Container Platform 4.12.

Note

La fonctionnalité RHOSP egress IP address crée un port de réservation Neutron appelé egressip-<IP address>. En utilisant le même utilisateur RHOSP que celui utilisé pour l'installation du cluster OpenShift Container Platform, vous pouvez attribuer une adresse IP flottante à ce port de réservation afin de disposer d'une adresse SNAT prévisible pour le trafic de sortie. Lorsqu'une adresse IP de sortie sur un réseau RHOSP est déplacée d'un nœud à un autre, en raison d'un basculement de nœud, par exemple, le port de réservation Neutron est supprimé et recréé. Cela signifie que l'association IP flottante est perdue et que vous devez réassigner manuellement l'adresse IP flottante au nouveau port de réservation.

Note

Lorsqu'un administrateur de cluster RHOSP assigne une IP flottante au port de réservation, OpenShift Container Platform ne peut pas supprimer le port de réservation. L'objet CloudPrivateIPConfig ne peut pas effectuer d'opérations de suppression et de déplacement jusqu'à ce qu'un administrateur de cluster RHOSP désassigne l'IP flottante du port de réservation.

Les exemples suivants illustrent l'annotation des nœuds de plusieurs fournisseurs de nuages publics. Les annotations sont en retrait pour faciliter la lecture.

Exemple d'annotation cloud.network.openshift.io/egress-ipconfig sur AWS

cloud.network.openshift.io/egress-ipconfig: [
  {
    "interface":"eni-078d267045138e436",
    "ifaddr":{"ipv4":"10.0.128.0/18"},
    "capacity":{"ipv4":14,"ipv6":15}
  }
]

Exemple cloud.network.openshift.io/egress-ipconfig annotation sur GCP

cloud.network.openshift.io/egress-ipconfig: [
  {
    "interface":"nic0",
    "ifaddr":{"ipv4":"10.0.128.0/18"},
    "capacity":{"ip":14}
  }
]

Les sections suivantes décrivent la capacité d'adresses IP pour les environnements de cloud public pris en charge, à utiliser dans votre calcul de capacité.

24.14.1.2.1. Limites de capacité des adresses IP d'Amazon Web Services (AWS)

Sur AWS, les contraintes d'attribution des adresses IP dépendent du type d'instance configuré. Pour plus d'informations, voir Adresses IP par interface réseau par type d'instance

24.14.1.2.2. Limites de capacité des adresses IP de Google Cloud Platform (GCP)

Sur le GCP, le modèle de réseau met en œuvre des adresses IP de nœuds supplémentaires par le biais de l'alias d'adresses IP, plutôt que par l'attribution d'adresses IP. Toutefois, la capacité d'adresses IP est directement liée à la capacité d'alias d'adresses IP.

Les limites de capacité suivantes s'appliquent à l'attribution de l'alias IP :

  • Le nombre maximum d'alias IP, tant IPv4 qu'IPv6, est de 10 par nœud.
  • Par VPC, le nombre maximum d'alias IP n'est pas spécifié, mais les tests d'évolutivité d'OpenShift Container Platform révèlent que le maximum est d'environ 15 000.

Pour plus d'informations, voir Quotas par instance et Aperçu des plages d'adresses IP alias.

24.14.1.2.3. Limites de capacité des adresses IP de Microsoft Azure

Sur Azure, les limites de capacité suivantes existent pour l'attribution d'adresses IP :

  • Par NIC, le nombre maximum d'adresses IP assignables, tant pour IPv4 que pour IPv6, est de 256.
  • Par réseau virtuel, le nombre maximum d'adresses IP attribuées ne peut dépasser 65 536.

Pour plus d'informations, voir Limites de mise en réseau.

24.14.1.3. Attribution d'IP de sortie aux pods

Pour attribuer une ou plusieurs IP de sortie à un espace de noms ou à des modules spécifiques d'un espace de noms, les conditions suivantes doivent être remplies :

  • Au moins un nœud de votre cluster doit avoir le label k8s.ovn.org/egress-assignable: "".
  • Il existe un objet EgressIP qui définit une ou plusieurs adresses IP de sortie à utiliser comme adresse IP source pour le trafic quittant le cluster à partir des pods d'un espace de noms.
Important

Si vous créez des objets EgressIP avant d'étiqueter les nœuds de votre cluster pour l'attribution d'IP de sortie, OpenShift Container Platform risque d'attribuer chaque adresse IP de sortie au premier nœud avec l'étiquette k8s.ovn.org/egress-assignable: "".

Pour garantir que les adresses IP de sortie sont largement réparties entre les nœuds du cluster, appliquez toujours l'étiquette aux nœuds destinés à héberger les adresses IP de sortie avant de créer des objets EgressIP.

24.14.1.4. Attribution des adresses IP de sortie aux nœuds

Lors de la création d'un objet EgressIP, les conditions suivantes s'appliquent aux nœuds portant l'étiquette k8s.ovn.org/egress-assignable: "":

  • Une adresse IP de sortie n'est jamais attribuée à plus d'un nœud à la fois.
  • Une adresse IP de sortie est répartie équitablement entre les nœuds disponibles qui peuvent héberger l'adresse IP de sortie.
  • Si le tableau spec.EgressIPs d'un objet EgressIP spécifie plus d'une adresse IP, les conditions suivantes s'appliquent :

    • Aucun nœud n'hébergera jamais plus d'une des adresses IP spécifiées.
    • Le trafic est réparti de manière à peu près égale entre les adresses IP spécifiées pour un espace de noms donné.
  • Si un nœud devient indisponible, les adresses IP de sortie qui lui sont attribuées sont automatiquement réattribuées, sous réserve des conditions décrites précédemment.

Lorsqu'un pod correspond au sélecteur de plusieurs objets EgressIP, il n'est pas garanti que l'adresse IP de sortie spécifiée dans les objets EgressIP soit attribuée en tant qu'adresse IP de sortie pour le pod.

En outre, si un objet EgressIP spécifie plusieurs adresses IP de sortie, il n'y a aucune garantie quant à l'adresse IP de sortie qui sera utilisée. Par exemple, si un pod correspond à un sélecteur pour un objet EgressIP avec deux adresses IP de sortie, 10.10.20.1 et 10.10.20.2, l'une ou l'autre peut être utilisée pour chaque connexion TCP ou conversation UDP.

24.14.1.5. Schéma architectural d'une configuration d'adresses IP de sortie

Le diagramme suivant illustre une configuration d'adresses IP de sortie. Il décrit quatre pods dans deux espaces de noms différents fonctionnant sur trois nœuds d'un cluster. Les nœuds se voient attribuer des adresses IP à partir du bloc CIDR 192.168.126.0/18 sur le réseau hôte.

Le nœud 1 et le nœud 3 sont tous deux étiquetés avec k8s.ovn.org/egress-assignable: "" et sont donc disponibles pour l'attribution d'adresses IP de sortie.

Les lignes en pointillé du diagramme représentent le flux de trafic provenant de pod1, pod2 et pod3 et transitant par le réseau de pods pour sortir de la grappe à partir du nœud 1 et du nœud 3. Lorsqu'un service externe reçoit du trafic de l'un des pods sélectionnés par l'objet EgressIP, l'adresse IP source est soit 192.168.126.10, soit 192.168.126.102. Le trafic est réparti de manière à peu près égale entre ces deux nœuds.

Les ressources suivantes du diagramme sont illustrées en détail :

Namespace objets

Les espaces de noms sont définis dans le manifeste suivant :

Objets de l'espace de noms

apiVersion: v1
kind: Namespace
metadata:
  name: namespace1
  labels:
    env: prod
---
apiVersion: v1
kind: Namespace
metadata:
  name: namespace2
  labels:
    env: prod

EgressIP objet

L'objet EgressIP suivant décrit une configuration qui sélectionne tous les modules dans n'importe quel espace de noms avec l'étiquette env définie sur prod. Les adresses IP de sortie pour les modules sélectionnés sont 192.168.126.10 et 192.168.126.102.

EgressIP objet

apiVersion: k8s.ovn.org/v1
kind: EgressIP
metadata:
  name: egressips-prod
spec:
  egressIPs:
  - 192.168.126.10
  - 192.168.126.102
  namespaceSelector:
    matchLabels:
      env: prod
status:
  items:
  - node: node1
    egressIP: 192.168.126.10
  - node: node3
    egressIP: 192.168.126.102

Pour la configuration de l'exemple précédent, OpenShift Container Platform attribue les deux adresses IP egress aux nœuds disponibles. Le champ status indique si et où les adresses IP de sortie sont attribuées.

24.14.2. Objet EgressIP

Le fichier YAML suivant décrit l'API de l'objet EgressIP. La portée de l'objet est à l'échelle du cluster ; il n'est pas créé dans un espace de noms.

apiVersion: k8s.ovn.org/v1
kind: EgressIP
metadata:
  name: <name> 1
spec:
  egressIPs: 2
  - <ip_address>
  namespaceSelector: 3
    ...
  podSelector: 4
    ...
1
Nom de l'objet EgressIPs.
2
Un tableau d'une ou plusieurs adresses IP.
3
Un ou plusieurs sélecteurs pour les espaces de noms auxquels associer les adresses IP de sortie.
4
Facultatif : Un ou plusieurs sélecteurs de modules dans les espaces de noms spécifiés auxquels associer les adresses IP de sortie. L'application de ces sélecteurs permet de sélectionner un sous-ensemble de modules dans un espace de noms.

Le fichier YAML suivant décrit la strophe du sélecteur d'espace de noms :

Strophe de sélecteur d'espace de noms

namespaceSelector: 1
  matchLabels:
    <label_name>: <label_value>

1
Une ou plusieurs règles de correspondance pour les espaces de noms. Si plusieurs règles de correspondance sont fournies, tous les espaces de noms correspondants sont sélectionnés.

Le YAML suivant décrit la strophe optionnelle pour le sélecteur de pods :

Stance de sélection de pods

podSelector: 1
  matchLabels:
    <label_name>: <label_value>

1
Facultatif : Une ou plusieurs règles de correspondance pour les pods dans les espaces de noms qui correspondent aux règles namespaceSelector spécifiées. Si cette option est spécifiée, seuls les pods qui correspondent aux règles sont sélectionnés. Les autres pods de l'espace de noms ne sont pas sélectionnés.

Dans l'exemple suivant, l'objet EgressIP associe les adresses IP de sortie 192.168.126.11 et 192.168.126.102 aux pods dont l'étiquette app est définie sur web et qui se trouvent dans les espaces de noms dont l'étiquette env est définie sur prod:

Exemple d'objet EgressIP

apiVersion: k8s.ovn.org/v1
kind: EgressIP
metadata:
  name: egress-group1
spec:
  egressIPs:
  - 192.168.126.11
  - 192.168.126.102
  podSelector:
    matchLabels:
      app: web
  namespaceSelector:
    matchLabels:
      env: prod

Dans l'exemple suivant, l'objet EgressIP associe les adresses IP de sortie 192.168.127.30 et 192.168.127.40 à tous les pods dont l'étiquette environment n'est pas réglée sur development:

Exemple d'objet EgressIP

apiVersion: k8s.ovn.org/v1
kind: EgressIP
metadata:
  name: egress-group2
spec:
  egressIPs:
  - 192.168.127.30
  - 192.168.127.40
  namespaceSelector:
    matchExpressions:
    - key: environment
      operator: NotIn
      values:
      - development

24.14.3. Étiquetage d'un nœud pour l'hébergement des adresses IP de sortie

Vous pouvez appliquer le label k8s.ovn.org/egress-assignable="" à un nœud de votre cluster afin qu'OpenShift Container Platform puisse attribuer une ou plusieurs adresses IP de sortie au nœud.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Connectez-vous au cluster en tant qu'administrateur du cluster.

Procédure

  • Pour étiqueter un nœud afin qu'il puisse héberger une ou plusieurs adresses IP de sortie, entrez la commande suivante :

    $ oc label nodes <node_name> k8s.ovn.org/egress-assignable="" 1
    1
    Le nom du nœud à étiqueter.
    Astuce

    Vous pouvez également appliquer le langage YAML suivant pour ajouter l'étiquette à un nœud :

    apiVersion: v1
    kind: Node
    metadata:
      labels:
        k8s.ovn.org/egress-assignable: ""
      name: <node_name>

24.14.4. Prochaines étapes

24.14.5. 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.