9.3. Déploiement de l'opérateur de pare-feu du nœud d'entrée

Prérequis

  • L'opérateur de pare-feu du nœud d'entrée est installé.

Procédure

Pour déployer l'opérateur de pare-feu du nœud d'entrée, créez une ressource personnalisée IngressNodeFirewallConfig qui déploiera l'ensemble de démons de l'opérateur. Vous pouvez déployer un ou plusieurs CRD IngressNodeFirewall sur des nœuds en appliquant des règles de pare-feu.

  1. Créez le site IngressNodeFirewallConfig à l'intérieur de l'espace de noms openshift-ingress-node-firewall nommé ingressnodefirewallconfig.
  2. Exécutez la commande suivante pour déployer les règles de l'opérateur de pare-feu du nœud d'entrée :

    $ oc apply -f rule.yaml

9.3.1. Objet de configuration du pare-feu du nœud d'entrée

Les champs de l'objet de configuration Ingress Node Firewall sont décrits dans le tableau suivant :

Tableau 9.1. Objet de configuration du pare-feu du nœud d'entrée

FieldTypeDescription

metadata.name

string

Le nom de l'objet CR. Le nom de l'objet règles de pare-feu doit être ingressnodefirewallconfig.

metadata.namespace

string

Espace de noms pour l'objet CR de l'opérateur du pare-feu d'entrée. Le CR IngressNodeFirewallConfig doit être créé dans l'espace de noms openshift-ingress-node-firewall.

spec.nodeSelector

string

Une contrainte de sélection de nœuds utilisée pour cibler les nœuds par le biais d'étiquettes de nœuds spécifiées. Par exemple :

spec:
  nodeSelector:
    node-role.kubernetes.io/worker: ""
Note

L'une des étiquettes utilisées dans nodeSelector doit correspondre à une étiquette sur les nœuds pour que l'ensemble de démons démarre. Par exemple, si les étiquettes de nœuds node-role.kubernetes.io/worker et node-type.kubernetes.io/vm sont appliquées à un nœud, au moins une étiquette doit être définie à l'aide de nodeSelector pour que le jeu de démons démarre.

Note

L'opérateur consomme le CR et crée un ensemble de démons de pare-feu de nœuds d'entrée sur tous les nœuds qui correspondent à nodeSelector.

Exemple de configuration de l'opérateur de pare-feu du nœud d'entrée

L'exemple suivant présente une configuration complète du pare-feu du nœud d'entrée :

Exemple d'objet de configuration du pare-feu du nœud d'entrée

apiVersion: ingressnodefirewall.openshift.io/v1alpha1
kind: IngressNodeFirewallConfig
metadata:
  name: ingressnodefirewallconfig
  namespace: openshift-ingress-node-firewall
spec:
  nodeSelector:
    node-role.kubernetes.io/worker: ""

Note

L'opérateur consomme le CR et crée un ensemble de démons de pare-feu de nœuds d'entrée sur tous les nœuds qui correspondent à nodeSelector.

9.3.2. Objet "règles de pare-feu" du nœud d'entrée

Les champs de l'objet Règles de pare-feu du nœud d'entrée sont décrits dans le tableau suivant :

Tableau 9.2. Objet "règles de pare-feu" du nœud d'entrée

FieldTypeDescription

metadata.name

string

Le nom de l'objet CR.

interfaces

array

Les champs de cet objet spécifient les interfaces auxquelles appliquer les règles de pare-feu. Par exemple, - en0 et - en1.

nodeSelector

array

Vous pouvez utiliser nodeSelector pour sélectionner les nœuds auxquels appliquer les règles de pare-feu. Définissez la valeur de vos étiquettes nodeselector à true pour appliquer la règle.

ingress

object

ingress vous permet de configurer les règles qui autorisent l'accès extérieur aux services de votre cluster.

Configuration de l'objet d'entrée

Les valeurs de l'objet ingress sont définies dans le tableau suivant :

Tableau 9.3. ingress objet

FieldTypeDescription

sourceCIDRs

array

Permet de définir le bloc CIDR. Vous pouvez configurer plusieurs CIDR de différentes familles d'adresses.

Note

Des CIDR différents vous permettent d'utiliser la même règle d'ordre. S'il existe plusieurs objets IngressNodeFirewall pour les mêmes nœuds et interfaces avec des CIDR qui se chevauchent, le champ order indiquera la règle à appliquer en premier. Les règles sont appliquées par ordre croissant.

rules

array

Les objets du pare-feu d'entrée rules.order sont classés en commençant par 1 pour chaque source.CIDR, avec un maximum de 100 règles par CIDR. Les règles d'ordre inférieur sont exécutées en premier.

rules.protocolConfig.protocol prend en charge les protocoles suivants : TCP, UDP, SCTP, ICMP et ICMPv6. Les règles ICMP et ICMPv6 peuvent correspondre à des types ou des codes ICMP et ICMPv6. Les règles TCP, UDP et SCTP peuvent correspondre à un seul port de destination ou à une série de ports au format <start : end-1>.

Définissez rules.action sur allow pour appliquer la règle ou deny pour l'interdire.

Note

Les règles de pare-feu en entrée sont vérifiées à l'aide d'un webhook de vérification qui bloque toute configuration invalide. Le webhook de vérification vous empêche de bloquer les services critiques du cluster tels que le serveur API ou SSH.

Exemple d'objet de règles de pare-feu pour le nœud d'entrée

L'exemple suivant présente une configuration complète du pare-feu du nœud d'entrée :

Exemple de configuration du pare-feu du nœud d'entrée

apiVersion: ingressnodefirewall.openshift.io/v1alpha1
kind: IngressNodeFirewall
metadata:
  name: ingressnodefirewall
spec:
  interfaces:
  - eth0
  nodeSelector:
    matchLabels:
      <do_node_ingress_firewall>: 'true'
  ingress:
  - sourceCIDRs:
       - 172.16.0.0/12
    rules:
    - order: 10
      protocolConfig:
        protocol: ICMP
        icmp:
          icmpType: 8 #ICMP Echo request
      action: Deny
    - order: 20
      protocolConfig:
        protocol: TCP
        tcp:
          ports: "8000-9000"
      action: Deny
  - sourceCIDRs:
       - fc00:f853:ccd:e793::0/64
    rules:
    - order: 10
      protocolConfig:
        protocol: ICMPv6
        icmpv6:
          icmpType: 128 #ICMPV6 Echo request
      action: Deny

Exemple d'objet de règles de pare-feu de nœud d'entrée à confiance zéro

Les règles de pare-feu de nœud d'entrée à confiance zéro peuvent fournir une sécurité supplémentaire aux clusters à interfaces multiples. Par exemple, vous pouvez utiliser des règles de pare-feu de nœud d'entrée à confiance zéro pour supprimer tout le trafic sur une interface spécifique, à l'exception de SSH.

L'exemple suivant présente une configuration complète d'un ensemble de règles de pare-feu de nœud d'entrée à confiance zéro :

Important

Les utilisateurs doivent ajouter tous les ports que leur application utilisera à leur liste d'autorisations dans le cas suivant afin de garantir un fonctionnement correct.

Exemple de règles de pare-feu de nœud d'entrée à confiance zéro

apiVersion: ingressnodefirewall.openshift.io/v1alpha1
kind: IngressNodeFirewall
metadata:
 name: ingressnodefirewall-zero-trust
spec:
 interfaces:
 - eth1 1
 nodeSelector:
   matchLabels:
     <do_node_ingress_firewall>: 'true'
 ingress:
 - sourceCIDRs:
      - 0.0.0.0/0 2
   rules:
   - order: 10
     protocolConfig:
       protocol: TCP
       tcp:
         ports: 22
     action: Allow
   - order: 20
     action: Deny 3

1
Cluster multi-interface
2
0.0.0.0/0 défini pour correspondre à n'importe quel CIDR
3
action fixé à deny