27.2. Configuration des IP externes pour les services


En tant qu'administrateur de cluster, vous pouvez désigner un bloc d'adresses IP externe au cluster qui peut envoyer du trafic aux services du cluster.

Cette fonctionnalité est généralement plus utile pour les clusters installés sur du matériel "bare-metal".

27.2.1. Conditions préalables

  • Votre infrastructure réseau doit acheminer le trafic des adresses IP externes vers votre cluster.

27.2.2. À propos d'ExternalIP

Pour les environnements non cloud, OpenShift Container Platform prend en charge l'attribution d'adresses IP externes à un champ d'objet Service spec.externalIPs[] par l'intermédiaire de la fonction ExternalIP (adresse IP virtuelle). En définissant ce champ, OpenShift Container Platform attribue une adresse IP virtuelle supplémentaire au service. L'adresse IP peut être en dehors du réseau de service défini pour le cluster. Un service configuré avec un ExternalIP fonctionne de la même manière qu'un service avec type=NodePort, ce qui vous permet de diriger le trafic vers un nœud local pour l'équilibrage de la charge.

Vous devez configurer votre infrastructure réseau pour vous assurer que les blocs d'adresses IP externes que vous définissez sont acheminés vers le cluster.

OpenShift Container Platform étend la fonctionnalité ExternalIP de Kubernetes en ajoutant les capacités suivantes :

  • Restrictions sur l'utilisation d'adresses IP externes par les utilisateurs au moyen d'une politique configurable
  • Attribution automatique d'une adresse IP externe à un service sur demande
Avertissement

Désactivée par défaut, l'utilisation de la fonctionnalité ExternalIP peut présenter un risque pour la sécurité, car le trafic interne à la grappe vers une adresse IP externe est dirigé vers ce service. Cela pourrait permettre aux utilisateurs de la grappe d'intercepter le trafic sensible destiné aux ressources externes.

Important

Cette fonctionnalité n'est prise en charge que dans les déploiements non cloud. Pour les déploiements dans le nuage, utilisez les services d'équilibreur de charge pour le déploiement automatique d'un équilibreur de charge dans le nuage afin de cibler les points d'extrémité d'un service.

Vous pouvez attribuer une adresse IP externe de la manière suivante :

Attribution automatique d'une IP externe
OpenShift Container Platform attribue automatiquement une adresse IP du bloc CIDR autoAssignCIDRs au tableau spec.externalIPs[] lorsque vous créez un objet Service avec spec.type=LoadBalancer défini. Dans ce cas, OpenShift Container Platform met en œuvre une version non cloud du type de service d'équilibreur de charge et attribue des adresses IP aux services. L'attribution automatique est désactivée par défaut et doit être configurée par un administrateur de cluster comme décrit dans la section suivante.
Attribution manuelle d'une IP externe
OpenShift Container Platform utilise les adresses IP attribuées au tableau spec.externalIPs[] lorsque vous créez un objet Service. Vous ne pouvez pas spécifier une adresse IP qui est déjà utilisée par un autre service.

27.2.2.1. Configuration pour ExternalIP

L'utilisation d'une adresse IP externe dans OpenShift Container Platform est régie par les champs suivants dans la CR Network.config.openshift.io nommée cluster:

  • spec.externalIP.autoAssignCIDRs définit un bloc d'adresses IP utilisé par l'équilibreur de charge lorsqu'il choisit une adresse IP externe pour le service. OpenShift Container Platform ne supporte qu'un seul bloc d'adresses IP pour l'attribution automatique. Cela peut être plus simple que d'avoir à gérer l'espace de port d'un nombre limité d'adresses IP partagées lors de l'attribution manuelle d'ExternalIPs aux services. Si l'attribution automatique est activée, un objet Service avec spec.type=LoadBalancer se voit attribuer une adresse IP externe.
  • spec.externalIP.policy définit les blocs d'adresses IP autorisés lors de la spécification manuelle d'une adresse IP. OpenShift Container Platform n'applique pas de règles de politique aux blocs d'adresses IP définis par spec.externalIP.autoAssignCIDRs.

S'il est correctement acheminé, le trafic externe provenant du bloc d'adresses IP externes configuré peut atteindre les points d'extrémité du service via n'importe quel port TCP ou UDP auquel le service est exposé.

Important

En tant qu'administrateur de cluster, vous devez configurer le routage vers les IP externes sur les types de réseau OpenShiftSDN et OVN-Kubernetes. Vous devez également vous assurer que le bloc d'adresses IP que vous attribuez se termine sur un ou plusieurs nœuds de votre cluster. Pour plus d'informations, voir Kubernetes External IPs.

OpenShift Container Platform prend en charge l'attribution automatique et manuelle des adresses IP, et chaque adresse est garantie pour être attribuée à un service au maximum. Cela garantit que chaque service peut exposer les ports qu'il a choisis, quels que soient les ports exposés par d'autres services.

Note

Pour utiliser les blocs d'adresses IP définis par autoAssignCIDRs dans OpenShift Container Platform, vous devez configurer l'attribution d'adresses IP et le routage nécessaires pour votre réseau hôte.

Le fichier YAML suivant décrit un service pour lequel une adresse IP externe a été configurée :

Exemple d'objet Service avec spec.externalIPs[] set

apiVersion: v1
kind: Service
metadata:
  name: http-service
spec:
  clusterIP: 172.30.163.110
  externalIPs:
  - 192.168.132.253
  externalTrafficPolicy: Cluster
  ports:
  - name: highport
    nodePort: 31903
    port: 30102
    protocol: TCP
    targetPort: 30102
  selector:
    app: web
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.168.132.253

27.2.2.2. Restrictions concernant l'attribution d'une adresse IP externe

En tant qu'administrateur de cluster, vous pouvez spécifier des blocs d'adresses IP à autoriser et à rejeter.

Les restrictions ne s'appliquent qu'aux utilisateurs qui n'ont pas les privilèges cluster-admin. Un administrateur de cluster peut toujours définir le champ service spec.externalIPs[] sur n'importe quelle adresse IP.

Vous configurez la politique d'adresse IP avec un objet policy défini en spécifiant le champ spec.ExternalIP.policy. L'objet de stratégie a la forme suivante :

{
  "policy": {
    "allowedCIDRs": [],
    "rejectedCIDRs": []
  }
}

Les règles suivantes s'appliquent lors de la configuration des restrictions de politique :

  • Si policy={} est défini, la création d'un objet Service avec spec.ExternalIPs[] défini échouera. C'est la valeur par défaut pour OpenShift Container Platform. Le comportement lorsque policy=null est défini est identique.
  • Si policy est défini et que policy.allowedCIDRs[] ou policy.rejectedCIDRs[] est défini, les règles suivantes s'appliquent :

    • Si allowedCIDRs[] et rejectedCIDRs[] sont tous deux définis, rejectedCIDRs[] a la priorité sur allowedCIDRs[].
    • Si allowedCIDRs[] est défini, la création d'un objet Service avec spec.ExternalIPs[] ne réussira que si les adresses IP spécifiées sont autorisées.
    • Si rejectedCIDRs[] est défini, la création d'un objet Service avec spec.ExternalIPs[] ne réussira que si les adresses IP spécifiées ne sont pas rejetées.

27.2.2.3. Exemples d'objets de politique

Les exemples qui suivent présentent plusieurs configurations de politiques différentes.

  • Dans l'exemple suivant, la politique empêche OpenShift Container Platform de créer un service avec une adresse IP externe spécifiée :

    Exemple de politique de rejet de toute valeur spécifiée pour l'objet Service spec.externalIPs[]

    apiVersion: config.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      externalIP:
        policy: {}
      ...

  • Dans l'exemple suivant, les champs allowedCIDRs et rejectedCIDRs sont tous deux définis.

    Exemple de politique incluant des blocs CIDR autorisés et rejetés

    apiVersion: config.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      externalIP:
        policy:
          allowedCIDRs:
          - 172.16.66.10/23
          rejectedCIDRs:
          - 172.16.66.10/24
      ...

  • Dans l'exemple suivant, policy est défini sur null. S'il est défini sur null, le champ policy n'apparaîtra pas dans le résultat de l'inspection de l'objet de configuration en entrant oc get networks.config.openshift.io -o yaml.

    Exemple de politique autorisant toute valeur spécifiée pour l'objet Service spec.externalIPs[]

    apiVersion: config.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      externalIP:
        policy: null
      ...

27.2.3. Configuration du bloc d'adresses IP externes

La configuration des blocs d'adresses ExternalIP est définie par une ressource personnalisée (CR) Réseau nommée cluster. La CR Réseau fait partie du groupe d'API config.openshift.io.

Important

Lors de l'installation d'un cluster, l'opérateur de version de cluster (CVO) crée automatiquement un CR de réseau nommé cluster. La création d'autres objets CR de ce type n'est pas prise en charge.

Le fichier YAML suivant décrit la configuration ExternalIP :

Network.config.openshift.io CR named cluster

apiVersion: config.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  externalIP:
    autoAssignCIDRs: [] 1
    policy: 2
      ...

1
Définit le bloc d'adresses IP au format CIDR disponible pour l'attribution automatique d'adresses IP externes à un service. Une seule plage d'adresses IP est autorisée.
2
Définit les restrictions relatives à l'attribution manuelle d'une adresse IP à un service. Si aucune restriction n'est définie, la spécification du champ spec.externalIP dans un objet Service n'est pas autorisée. Par défaut, aucune restriction n'est définie.

Le fichier YAML suivant décrit les champs de la strophe policy:

Réseau.config.openshift.io policy stanza

policy:
  allowedCIDRs: [] 1
  rejectedCIDRs: [] 2

1
Liste des plages d'adresses IP autorisées au format CIDR.
2
Liste des plages d'adresses IP rejetées au format CIDR.
Exemple de configurations IP externes

Plusieurs configurations possibles pour les pools d'adresses IP externes sont présentées dans les exemples suivants :

  • Le fichier YAML suivant décrit une configuration qui permet d'attribuer automatiquement des adresses IP externes :

    Exemple de configuration avec spec.externalIP.autoAssignCIDRs set

    apiVersion: config.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      ...
      externalIP:
        autoAssignCIDRs:
        - 192.168.132.254/29

  • Le fichier YAML suivant configure les règles de stratégie pour les plages CIDR autorisées et rejetées :

    Exemple de configuration avec spec.externalIP.policy set

    apiVersion: config.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      ...
      externalIP:
        policy:
          allowedCIDRs:
          - 192.168.132.0/29
          - 192.168.132.8/29
          rejectedCIDRs:
          - 192.168.132.7/32

27.2.4. Configurer des blocs d'adresses IP externes pour votre cluster

En tant qu'administrateur de cluster, vous pouvez configurer les paramètres ExternalIP suivants :

  • Un bloc d'adresses ExternalIP utilisé par OpenShift Container Platform pour remplir automatiquement le champ spec.clusterIP pour un objet Service.
  • Objet de stratégie permettant de restreindre les adresses IP pouvant être attribuées manuellement au tableau spec.clusterIP d'un objet Service.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Accès au cluster en tant qu'utilisateur ayant le rôle cluster-admin.

Procédure

  1. En option : Pour afficher la configuration IP externe actuelle, entrez la commande suivante :

    $ oc describe networks.config cluster
  2. Pour modifier la configuration, entrez la commande suivante :

    $ oc edit networks.config cluster
  3. Modifiez la configuration ExternalIP, comme dans l'exemple suivant :

    apiVersion: config.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      ...
      externalIP: 1
      ...
    1
    Spécifiez la configuration de la strophe externalIP.
  4. Pour confirmer la mise à jour de la configuration ExternalIP, entrez la commande suivante :

    $ oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'

27.2.5. Prochaines étapes

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.