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
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.
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 tableauspec.externalIPs[]
lorsque vous créez un objetService
avecspec.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 objetService
. 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 objetService
avecspec.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 parspec.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é.
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.
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 objetService
avecspec.ExternalIPs[]
défini échouera. C'est la valeur par défaut pour OpenShift Container Platform. Le comportement lorsquepolicy=null
est défini est identique. Si
policy
est défini et quepolicy.allowedCIDRs[]
oupolicy.rejectedCIDRs[]
est défini, les règles suivantes s'appliquent :-
Si
allowedCIDRs[]
etrejectedCIDRs[]
sont tous deux définis,rejectedCIDRs[]
a la priorité surallowedCIDRs[]
. -
Si
allowedCIDRs[]
est défini, la création d'un objetService
avecspec.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 objetService
avecspec.ExternalIPs[]
ne réussira que si les adresses IP spécifiées ne sont pas rejetées.
-
Si
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
etrejectedCIDRs
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 surnull
. S'il est défini surnull
, le champpolicy
n'apparaîtra pas dans le résultat de l'inspection de l'objet de configuration en entrantoc 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
.
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 objetService
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
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
setapiVersion: 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
setapiVersion: 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 objetService
. -
Objet de stratégie permettant de restreindre les adresses IP pouvant être attribuées manuellement au tableau
spec.clusterIP
d'un objetService
.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
.
Procédure
En option : Pour afficher la configuration IP externe actuelle, entrez la commande suivante :
$ oc describe networks.config cluster
Pour modifier la configuration, entrez la commande suivante :
$ oc edit networks.config cluster
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
.
Pour confirmer la mise à jour de la configuration ExternalIP, entrez la commande suivante :
$ oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'