Configuration des équilibreurs de charge et des équilibreurs de charge de réseau

Découvrez comment définir les équilibreurs de charge et les équilibreurs de charge de réseau d'Oracle Cloud Infrastructure provisionnés par Kubernetes Engine (OKE) pour un service Kubernetes de type LoadBalancer.

Création des équilibreurs de charge internes

Vous pouvez créer des équilibreurs de charge et des équilibreurs de charge de réseau Oracle Cloud Infrastructure pour contrôler l'accès aux services exécutés sur une grappe :

  • Lorsque vous créez une grappe dans le flux de création personnalisée, vous sélectionnez un VCN existant qui contient les ressources de réseau utilisées par la nouvelle grappe. Si vous voulez utiliser un équilibreur de charge ou un équilibreur de charge de réseau pour contrôler le trafic dans le VCN, vous sélectionnez un sous-réseau public ou privé existant dans ce VCN pour l'héberger.
  • Lorsque vous créez une grappe dans le flux de création rapide, le VCN créé automatiquement contient un sous-réseau régional public pour héberger un équilibreur de charge ou un équilibreur de charge de réseau. Si vous voulez héberger un équilibreur de charge ou un équilibreur de charge de réseau dans un sous-réseau privé, vous pouvez ajouter un sous-réseau privé au VCN ultérieurement.

Vous pouvez également définir un service Kubernetes interne de type LoadBalancer (généralement appelé "équilibreur de charge interne") dans une grappe pour permettre à d'autres programmes qui s'exécutent dans le même VCN que la grappe d'accéder aux services de celle-ci. Un équilibreur de charge interne peut être provisionné :

  • en tant qu'équilibreur de charge ou en tant qu'équilibreur de charge de réseau
  • avec une adresse IP publique ou avec une adresse IP privée (affectée par le service d'équilibrage de charge ou le service d'équilibrage de charge de réseau)
  • dans un sous-réseau public ou dans un sous-réseau privé

Un équilibreur de charge ou un équilibreur de charge de réseau ayant une adresse IP publique est appelé public. Un équilibreur de charge public ou un équilibreur de charge de réseau peut être hébergé dans un sous-réseau public ou dans un sous-réseau privé.

Un équilibreur de charge ou un équilibreur de charge de réseau ayant une adresse IP privée est appelé équilibreur privé. Un équilibreur de charge privé ou un équilibreur de charge de réseau peut être hébergé dans un sous-réseau public ou dans un sous-réseau privé.

Par défaut, les équilibreurs de charge internes sont provisionnés avec des adresses IP publiques et hébergés dans des sous-réseaux publics.

Pour plus d'informations :

Créer un équilibreur de charge interne en tant qu'équilibreur de charge OCI

Pour créer un équilibreur de charge interne en tant qu'équilibreur de charge OCI avec une adresse IP privée, hébergé dans le sous-réseau spécifié pour les équilibreurs de charge lors de la création de la grappe, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

service.beta.kubernetes.io/oci-load-balancer-internal: "true"

Pour créer un équilibreur de charge interne en tant qu'équilibreur de charge OCI avec une adresse IP privée hébergée, hébergée dans un autre sous-réseau que celui spécifié pour les équilibreurs de charge lors de la création de la grappe, ajoutez les deux annotations suivantes dans la section de métadonnées du fichier manifeste :

service.beta.kubernetes.io/oci-load-balancer-internal: "true"
service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"

ocid1.subnet.oc1..aaaaaa....vdfw est l'OCID du sous-réseau alternatif. Il peut s'agir d'un sous-réseau privé ou public.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-internal: "true"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 8100
  selector:
    app: nginx
Créer un équilibreur de charge de réseau interne en tant qu'équilibreur de charge de réseau OCI

Pour créer un équilibreur de charge de réseau interne en tant qu'équilibreur de charge de réseau OCI avec une adresse IP privée, hébergé sur le sous-réseau spécifié pour les équilibreurs de charge lors de la création de la grappe, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/internal: "true"

Pour créer un équilibreur de charge de réseau interne en tant qu'équilibreur de charge de réseau OCI avec une adresse IP privée, hébergé sur un sous-réseau différent de celui spécifié pour les équilibreurs de charge lors de la création de la grappe, ajoutez les deux annotations suivantes dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/internal: "true"
oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"

ocid1.subnet.oc1..aaaaaa....vdfw est l'OCID du sous-réseau privé. Il peut s'agir d'un sous-réseau privé ou public.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/internal: "true"
    oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Spécification des adresses IP publiques réservées

Lorsqu'un service Kubernetes de type LoadBalancer est déployé sur une grappe, Kubernetes Engine crée un équilibreur de charge public ou un équilibreur de charge de réseau Oracle Cloud Infrastructure pour accepter le trafic dans la grappe. Par défaut, une adresse IP publique éphémère est affectée à l'équilibreur de charge public ou à l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure. Toutefois, une adresse IP publique éphémère est temporaire et ne dure que pendant toute la durée de vie de l'équilibreur de charge public ou de l'équilibreur de charge de réseau.

Si vous voulez que l'équilibreur de charge public ou l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure créé par Kubernetes Engine ait le même déploiement d'adresses IP publiques après le déploiement, vous pouvez lui affecter une adresse IP publique réservée à partir du groupe d'adresses IP publiques réservées. Pour plus d'informations sur la création et la consultation des adresses IP publiques réservées, voir Adresses IP publiques.

Pour affecter une adresse IP publique réservée à l'équilibreur de charge public ou à l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure créé par Kubernetes Engine, ajoutez la propriété LoadBalancerIP dans la section de spécification du fichier manifeste qui définit le service de type LoadBalancer et spécifiez l'adresse IP publique réservée.

Affecter une adresse IP publique réservée à un équilibreur de charge public

Exemple :

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
spec:
  loadBalancerIP: 144.25.97.173
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
Affecter une adresse IP publique réservée à un équilibreur de charge de réseau public

Exemple :

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
  loadBalancerIP: 144.25.97.173
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Notez ce qui suit :

  • Si vous définissez la propriété loadBalancerIP du service LoadBalancer, vous ne pouvez plus modifier directement l'adresse IP de l'équilibreur de charge public ou de l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure créé par Kubernetes Engine. Si vous voulez modifier l'adresse IP, supprimez le service LoadBalancer, spécifiez une autre adresse IP publique réservée dans le fichier manifeste, puis déployez à nouveau le service LoadBalancer.
  • Si vous ne définissez pas la propriété loadBalancerIP du service LoadBalancer, vous ne pourrez plus passer directement de l'adresse IP de l'équilibreur de charge public ou de l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure créée par Kubernetes Engine à partir d'une adresse IP éphémère à une adresse IP publique réservée. Si vous voulez passer de l'adresse IP éphémère à une adresse IP publique réservée, supprimez le service de type LoadBalancer, réglez la propriété loadBalancerIP à une adresse IP publique réservée dans le fichier manifeste, et déployez à nouveau le service de type LoadBalancer.
  • Vous pouvez supprimer le service de type LoadBalancer et libérer l'adresse IP publique réservée pour d'autres utilisations (par exemple, pour l'affecter à un autre service de type LoadBalancer).
  • Vous ne pouvez pas spécifier une adresse IP publique réservée pour un service de type LoadBalancer si la même adresse IP est déjà affectée à une autre ressource (telle qu'une instance de calcul ou un autre service de type LoadBalancer).
  • Vous ne pouvez pas ajouter la propriété loadBalancerIP au fichier manifeste pour un service d'équilibreur de charge interne (c'est-à-dire un fichier manifeste qui inclut l'annotation service.beta.kubernetes.io/oci-load-balancer-internal: "true" ou oci-network-load-balancer.oraclecloud.com/internal: "true").
  • Par défaut, l'adresse IP publique réservée que vous spécifiez comme propriété loadBalancerIP d'un service de type LoadBalancer dans le fichier manifeste doit être une ressource dans le même compartiment que la grappe. Si vous voulez spécifier une adresse IP publique réservée dans un autre compartiment :

    • pour les équilibreurs de charge publics, ajoutez la politique suivante à la location :
      ALLOW any-user to read public-ips in tenancy where request.principal.type = 'cluster'
      ALLOW any-user to manage floating-ips in tenancy where request.principal.type = 'cluster'
    • pour les équilibreurs de charge de réseau, ajoutez la politique suivante à la location :
      ALLOW any-user to use private-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'}
      ALLOW any-user to manage public-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'}

Définir des groupes de sécurité de réseau (recommandé)

Les groupes de sécurité de réseau d'Oracle Cloud Infrastructure vous permettent de contrôler le trafic entrant et sortant des ressources, ainsi qu'entre les ressources. Les règles de sécurité définies pour un groupe de sécurité de réseau garantissent que toutes les ressources de ce groupe ont la même situation en matière de sécurité. Pour plus d'informations, voir Groupes de sécurité de réseau.

Vous pouvez utiliser des groupes de sécurité de réseau pour contrôler l'accès à l'équilibreur de charge ou à l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure que Kubernetes Engine provisionne pour un service Kubernetes de type LoadBalancer.

Lors de l'utilisation de groupes de sécurité de réseau pour contrôler l'accès, des règles de sécurité appropriées doivent exister pour autoriser le trafic entrant et sortant vers et depuis le sous-réseau de l'équilibreur de charge ou de l'équilibreur de charge de réseau. Voir Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge de réseau.

Si vous décidez d'utiliser des groupes de sécurité de réseau pour contrôler l'accès aux équilibreurs de charge ou aux équilibreurs de charge de réseau :

  • Les groupes de sécurité de réseau et les règles de sécurité peuvent être entièrement gérés pour vous par le gestionnaire oci-cloud-controller-manager (voir Définition des options de gestion des règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge de réseau).
  • Vous pouvez gérer vous-même les groupes de sécurité de réseau et les règles de sécurité, et ajouter l'équilibreur de charge ou l'équilibreur de charge de réseau aux groupes existants (comme décrit dans cette section).
  • Vous pouvez demander au gestionnaire oci-cloud-controller-manager de gérer certaines règles de sécurité dans un groupe de sécurité de réseau, alors que vous gérez d'autres règles de sécurité dans un autre groupe.

Pour contrôler l'accès à l'aide d'un groupe de sécurité de réseau que vous gérez, vous incluez des annotations dans le fichier manifeste afin de spécifier le groupe auquel vous voulez ajouter l'équilibreur de charge ou l'équilibreur de charge de réseau.

Ajouter un équilibreur de charge à un groupe de sécurité de réseau existant

Pour ajouter l'équilibreur de charge Oracle Cloud Infrastructure créé par le moteur Kubernetes à un groupe de sécurité de réseau que vous gérez, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"

<nsg-ocid> est l'OCID d'un groupe de sécurité de réseau existant.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
Ajouter un équilibreur de charge de réseau à un groupe de sécurité de réseau existant

Pour ajouter l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure créé par le moteur Kubernetes à un groupe de sécurité de réseau que vous gérez, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"

<nsg-ocid> est l'OCID d'un groupe de sécurité de réseau existant.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Notez ce qui suit :

  • Le groupe de sécurité de réseau que vous spécifiez doit se trouver dans le même VCN que l'équilibreur de charge ou l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure.
  • Si le groupe de sécurité de réseau que vous spécifiez appartient à un autre compartiment de la grappe, vous devez inclure un énoncé de politique similaire à celui qui suit dans une politique IAM :
    ALLOW any-user to use network-security-groups in TENANCY where ALL { request.principal.type = 'cluster' }

    Si vous considérez que cet énoncé de politique est trop permissif, vous pouvez restreindre l'autorisation de spécifier explicitement le compartiment auquel le groupe de sécurité de réseau appartient ou de spécifier explicitement la grappe. Par exemple :

    Allow any-user to use network-security-groups in compartment <compartment-ocid> where all { request.principal.id = '<cluster-ocid>' }
  • Vous pouvez spécifier jusqu'à cinq groupes de sécurité de réseau, dans une liste séparée par des virgules, dans le format suivant :
    oci.oraclecloud.com/oci-network-security-groups: "<nsg1-ocid>,<nsg2-ocid>,<nsg3-ocid>,<nsg4-ocid>,<nsg5-ocid>"
  • Pour supprimer un équilibreur de charge ou un équilibreur de charge de réseau d'un groupe de sécurité de réseau, ou pour modifier le groupe dans lequel se trouve l'équilibreur de charge ou l'équilibreur de charge de réseau, mettez à jour l'annotation et réappliquez le manifeste.
  • Si vous décidez de contrôler l'accès à un équilibreur de charge ou à un équilibreur de charge de réseau Oracle Cloud Infrastructure à l'aide d'un groupe de sécurité de réseau que vous gérez, Oracle recommande de désactiver la gestion des listes de sécurité Kubernetes en ajoutant l'une des annotations suivantes dans la section de métadonnées du fichier manifeste pour l'équilibreur de charge ou l'équilibreur de charge de réseau respectivement :

    service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
    oci-network-load-balancer.oraclecloud.com/security-list-management-mode:  "None"

    Vous pouvez également ajouter l'annotation équivalente suivante :

    oci.oraclecloud.com/security-rule-management-mode: "None" 

    Si vous suivez la recommandation et ajoutez l'annotation, la gestion des listes de sécurité Kubernetes n'est pas activée. Vous devez configurer des groupes de sécurité de réseau avec des règles de sécurité de trafic entrant et sortant pour les groupes de noeuds et pour le point d'extrémité de l'API Kubernetes (pour plus d'informations, voir Configuration de règles de sécurité dans les groupes de sécurité de réseau ou les listes de sécurité et Exemples de configurations de ressources de réseau). Vous devez également configurer des groupes de sécurité de réseau avec des règles de sécurité de trafic entrant et sortant pour le port d'état kube-proxy, pour l'intervalle de ports de vérification d'état et pour les équilibreurs de charge.

Spécification des options de gestion des règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge de réseau

Les règles de sécurité contrôlent l'accès aux équilibreurs de charge et aux équilibreurs de charge de réseau d'Oracle Cloud Infrastructure provisionnés pour les services Kubernetes de type LoadBalancer. Les règles de sécurité peuvent être gérées (c'est-à-dire créées, mises à jour et supprimées) comme suit :

  • Dans un groupe de sécurité de réseau ou un groupe de sécurité de réseau (recommandé) Les règles de sécurité d'un groupe de sécurité de réseau s'appliquent à toute ressource Kubernetes ajoutée au groupe de sécurité de réseau. Ainsi, les groupes de sécurité de réseau peuvent fournir un contrôle d'accès détaillé aux ressources individuelles.
  • Dans une liste de sécurité. Les règles de sécurité d'une liste s'appliquent à toutes les ressources Kubernetes d'un sous-réseau. Les listes de sécurité ne fournissent pas de contrôle d'accès détaillé aux ressources individuelles du sous-réseau.

Pour des informations importantes sur le fonctionnement des règles de sécurité et une comparaison générale des listes de sécurité et des groupes de sécurité de réseau, voir Règles de sécurité.

Note

Si les règles de sécurité sont gérées dans des listes de sécurité, la configuration et la gestion de la sécurité peuvent devenir compliquées lorsque l'infrastructure est complexe et lorsque vous utilisez des outils tels que Terraform. Notez également que la possibilité d'utiliser des listes de sécurité pour gérer les règles de sécurité sera obsolète dans une version ultérieure. Pour ces raisons, Oracle recommande d'utiliser des groupes de sécurité de réseau (NSG) et l'annotation oci.oraclecloud.com/security-rule-management-mode pour gérer les règles de sécurité.

Vous pouvez gérer les règles de sécurité vous-même, en créant, en mettant à jour et en supprimant des règles, au besoin. Vous pouvez également spécifier que le gestionnaire oci-cloud-controller-manager (qui s'exécute sur le plan de contrôle de la grappe) doit gérer certaines ou toutes les règles de sécurité pour vous. Le moteur Kubernetes utilise oci-cloud-controller-manager pour provisionner des équilibreurs de charge et des équilibreurs de charge de réseau pour les services Kubernetes de type LoadBalancer.

Vous utilisez différentes annotations pour spécifier si oci-cloud-controller-manager gère les règles de sécurité pour un équilibreur de charge ou un équilibreur de charge de réseau dans un groupe de sécurité de réseau ou dans une liste de sécurité, comme suit :

Quelles que soient les annotations que vous utilisez, et que vous ou le gestionnaire oci-cloud-controller-manager gère les règles de sécurité dans une liste de sécurité ou dans un groupe de sécurité de réseau, vous pouvez également spécifier l'OCID d'un ou de plusieurs groupes de sécurité de réseau supplémentaires auxquels vous voulez que le gestionnaire oci-cloud-controller-manager ajoute l'équilibreur de charge ou l'équilibreur de charge de réseau. Dans ce cas, vous utilisez l'annotation oci.oraclecloud.com/oci-network-security-groups ou oci-network-load-balancer.oraclecloud.com/oci-network-security-groups. Notez que le gestionnaire oci-cloud-controller-manager ne gère pas les règles de sécurité dans les groupes de sécurité de réseau supplémentaires spécifiés par ces annotations. Il est donc de votre responsabilité de gérer les règles de sécurité. Pour plus d'informations sur l'utilisation des annotations oci.oraclecloud.com/oci-network-security-groups ou oci-network-load-balancer.oraclecloud.com/oci-network-security-groups, voir Définition des groupes de sécurité de réseau (recommandé).

Utilisation de l'annotation oci.oraclecloud.com/security-rule-management-mode pour gérer les règles de sécurité dans les groupes de sécurité de réseau et les listes de sécurité

Politiques IAM requises pour gérer les règles de sécurité dans les groupes de sécurité de réseau

Pour permettre au gestionnaire oci-cloud-controller-manager de gérer les règles de sécurité pour l'équilibreur de charge d'une grappe dans les groupes de sécurité de réseau, vous devez accorder à la grappe l'autorisation de gérer les groupes de sécurité de réseau. Par exemple, pour accorder cette autorisation dans un compartiment particulier :

ALLOW any-user to manage network-security-groups in compartment <compartment-name> where request.principal.type = 'cluster' 

En outre, pour permettre au gestionnaire oci-cloud-controller-manager de créer un groupe de sécurité de réseau, vous devez également accorder à la grappe l'autorisation de gérer les réseaux en nuage virtuels ou de gérer les familles de réseaux virtuels. Par exemple, en spécifiant l'un ou l'autre des énoncés de politique suivants :

  • ALLOW any-user to manage vcns in compartment <compartment-name> where request.principal.type = 'cluster'
  • ALLOW any-user to manage virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'

Utilisation de l'annotation oci.oraclecloud.com/security-rule-management-mode

Pour indiquer que le gestionnaire oci-cloud-controller-manager doit gérer les règles de sécurité pour un équilibreur de charge ou un équilibreur de charge de réseau dans un groupe de sécurité de réseau (comme recommandé par Oracle), vous devez d'abord configurer les politiques IAM nécessaires. Voir Politiques IAM requises pour gérer les règles de sécurité dans les groupes de sécurité de réseau. Après avoir configuré les politiques IAM préalables, vous pouvez ensuite ajouter l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci.oraclecloud.com/security-rule-management-mode: "NSG"

Le gestionnaire oci-cloud-controller-manager gère toutes les règles de sécurité requises pour l'entrée dans l'équilibreur de charge ou le service d'équilibreur de charge de réseau, dans un groupe de sécurité de réseau que le gestionnaire oci-cloud-controller-manager crée à cette fin. Ce groupe de sécurité de réseau est appelé groupe de sécurité de réseau frontal et autorise le trafic entrant vers l'équilibreur de charge ou l'équilibreur de charge de réseau à partir de 0.0.0.0/0, ou à partir du bloc CIDR source (et dans l'intervalle de ports sources) s'il est spécifié dans le fichier manifeste. Le gestionnaire oci-cloud-controller-manager crée les règles de sécurité suivantes dans le groupe de sécurité de réseau frontal :

Direction Source Protocole/ Port Description
Trafic entrant 0.0.0.0/0 (ou bloc CIDR source si spécifié dans le fichier manifeste) Ports spécifiés dans le fichier manifeste. Autoriser le trafic entrant vers l'équilibreur de charge OCI.
Trafic sortant Groupe de sécurité de réseau dorsal (si l'OCID d'un groupe de sécurité de réseau dorsal est spécifié dans le fichier manifeste) ALL/(Nodeports pour le service) Autoriser le trafic vers les noeuds de travail.
Trafic sortant Groupe de sécurité de réseau dorsal (si l'OCID d'un groupe de sécurité de réseau dorsal est spécifié dans le fichier manifeste) Port de vérification d'état de TCP (10256)

Si l'adresse IP source est conservée, le port de vérification de l'état est sélectionné automatiquement par le service.

Autoriser l'équilibreur de charge ou l'équilibreur de charge de réseau OCI à communiquer avec kube-proxy sur les noeuds de travail pour le port de vérification d'état.

Si vous voulez que le gestionnaire oci-cloud-controller-manager gère les règles de sécurité pour le trafic entrant vers les noeuds de travail du jeu dorsal, ainsi que le trafic sortant de l'équilibreur de charge ou du service d'équilibreur de charge de réseau, vous devez spécifier l'OCID d'un groupe de sécurité de réseau existant à utiliser à cette fin. Ce groupe de sécurité de réseau est appelé groupe de sécurité de réseau dorsal. Le gestionnaire oci-cloud-controller-manager n'ajoute des règles de trafic sortant au groupe de sécurité de réseau frontal que si vous spécifiez un groupe de sécurité de réseau dorsal. Pour spécifier le groupe de sécurité de réseau à utiliser en tant que groupe dorsal, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci.oraclecloud.com/oci-backend-network-security-group: "<nsg-ocid>"

où <NSG-OCID> est l'OCID d'un groupe de sécurité de réseau existant qui se trouve à la fois dans le même VCN que la grappe et dans un groupe de sécurité de réseau auquel les instances de calcul hébergeant des noeuds de travail ont déjà été ajoutées. Par exemple :

oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex"

Vous pouvez spécifier les OCID de plusieurs groupes de sécurité de réseau dorsaux dans une liste délimitée par des virgules. Par exemple :

oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex,ocid1.networksecuritygroup.oc1.phx.aaaaaa....jfle,ocid1.networksecuritygroup.oc1.phx.aaaaaa....pkrj"

Notez que les instances de calcul hébergeant les noeuds de travail dans le jeu dorsal doivent avoir déjà été ajoutées au groupe de sécurité de réseau dorsal que vous spécifiez en tant que valeur de l'annotation oci.oraclecloud.com/oci-backend-network-security-group. Vous pouvez ajouter les instances de calcul au groupe de sécurité de réseau dorsal de l'une des façons suivantes :

  • En spécifiant le groupe de sécurité de réseau lors de la création d'un groupe de noeuds (dans le cas des noeuds gérés et des noeuds virtuels).
  • En ajoutant manuellement les cartes vNIC principales des instances de calcul hébergeant les noeuds de travail au groupe de sécurité de réseau à l'aide du service de calcul (dans le cas des noeuds gérés). Par exemple, à l'aide des pages de la console du service de calcul (ou de l'interface de ligne de commande ou de l'API du service de calcul).

Le gestionnaire oci-cloud-controller-manager crée les règles de sécurité suivantes dans le groupe de sécurité de réseau dorsal :

Direction Source Protocole/ Port Description
Trafic entrant OCID du groupe de sécurité de réseau frontal Port de vérification d'état de TCP (10256)

Si l'adresse IP source est conservée, le port de vérification de l'état est sélectionné automatiquement par le service.

Autoriser l'équilibreur de charge ou l'équilibreur de charge de réseau OCI à communiquer avec kube-proxy sur les noeuds de travail pour les vérifications d'état.
Trafic entrant OCID du groupe de sécurité de réseau frontal ALL/(Nodeports pour le service) Autoriser l'équilibreur de charge ou l'équilibreur de charge de réseau OCI à communiquer avec les noeuds de travail.

Si vous ne spécifiez pas d'OCID pour le groupe de sécurité de réseau dorsal, le gestionnaire oci-cloud-controller-manager ne gère ni les règles de sécurité pour le trafic entrant vers les noeuds de travail du jeu dorsal, ni les règles de sécurité pour le trafic sortant de l'équilibreur de charge ou de l'équilibreur de charge de réseau.

Vous pouvez également régler l'annotation oci.oraclecloud.com/security-rule-management-mode à d'autres valeurs pour spécifier que vous voulez gérer vous-même les règles de sécurité ou que le gestionnaire oci-cloud-controller-manager doit gérer les règles de sécurité dans les listes de sécurité. La syntaxe complète de l'annotation est la suivante :

oci.oraclecloud.com/security-rule-management-mode: <value>

<value> est l'une des valeurs suivantes :

  • "NSG" : (recommandé) Le gestionnaire oci-cloud-controller-manager gère toutes les règles de sécurité requises pour le trafic entrant vers l'équilibreur de charge ou le service d'équilibreur de charge de réseau, dans un groupe de sécurité de réseau qu'il crée à cette fin.
  • "None" : (Valeur par défaut pour les équilibreurs de charge de réseau) Aucune gestion de liste de sécurité n'est activée et le gestionnaire oci-cloud-controller-manager ne gère pas les règles de sécurité. Il est de votre responsabilité de configurer une règle de sécurité autorisant le trafic entrant vers les ports appropriés pour les intervalles de ports de noeuds, le port d'état kube-proxy et les intervalles de ports de vérification de l'état. En outre, vous devez configurer des règles de sécurité pour autoriser le trafic entrant vers les équilibreurs de charge et les équilibreurs de charge de réseau (voir Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge de réseau). Cela équivaut à régler service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode à "None".
  • "SL-All" : (Valeur par défaut pour les équilibreurs de charge) Le gestionnaire oci-cloud-controller-manager gère toutes les règles de sécurité requises pour le trafic entrant et sortant vers et depuis l'équilibreur de charge ou le service d'équilibreur de charge de réseau, dans une liste de sécurité. Cela équivaut à régler service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode à "All".
  • "SL-Frontend" : Le gestionnaire oci-cloud-controller-manager gère uniquement les règles de sécurité pour les services d'entrée vers l'équilibreur de charge et l'équilibreur de charge de réseau, dans une liste de sécurité. Il est de votre responsabilité de configurer une règle de sécurité autorisant le trafic entrant vers les ports appropriés pour les intervalles de ports de noeuds, le port d'état kube-proxy et les intervalles de ports de vérification de l'état. Cela équivaut à régler service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode à "Frontend".

Dans les grappes avec des noeuds gérés, si vous ne spécifiez pas explicitement un mode de gestion ou si vous spécifiez une valeur non valide, le gestionnaire oci-cloud-controller-manager gère toutes les règles de sécurité requises pour l'entrée et la sortie vers et depuis l'équilibreur de charge ou le service d'équilibreur de charge de réseau, dans une liste de sécurité (équivalent à "SL-All"). Notez que dans ce cas, le gestionnaire oci-cloud-controller-manager crée une règle de sécurité qui autorise le trafic entrant depuis 0.0.0.0/0 (ou depuis les intervalles de ports sources spécifiés dans le fichier manifeste) vers les ports du module d'écoute. Dans les grappes avec des noeuds virtuels, la gestion des listes de sécurité n'est jamais activée et vous devez toujours configurer manuellement des règles de sécurité (équivalent à "None").

Notez ce qui suit :

  • Si vous incluez à la fois l'annotation oci.oraclecloud.com/security-rule-management-mode et l'une des annotations service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode ou oci-network-load-balancer.oraclecloud.com/security-list-management-mode dans le manifeste, le gestionnaire oci-cloud-controller-manager utilise toujours oci.oraclecloud.com/security-rule-management-mode et ignore l'autre annotation.
  • Il existe des limites au nombre de règles de trafic entrant et sortant autorisées dans les listes de sécurité et les groupes de sécurité de réseau (voir Limites des listes de sécurité et Limites des groupes de sécurité de réseau respectivement). Si le nombre de règles de trafic entrant ou sortant dépasse la limite, la création ou la mise à jour de l'équilibreur de charge ou du groupe de sécurité de réseau échoue.
  • Un équilibreur de charge ou un équilibreur de charge de réseau peut être ajouté à un maximum de cinq groupes de sécurité de réseau. Si le nombre de groupes de sécurité de réseau dépasse la limite, une erreur est retournée.
  • Si le service Kubernetes de type LoadBalancer est supprimé, les ressources OCI créées par le gestionnaire OCI-cloud-controller-manager (le groupe de sécurité de réseau frontal et les règles de sécurité créées dans le groupe de sécurité de réseau frontal ou le groupe de sécurité de réseau dorsal) sont supprimées. Le groupe de sécurité de réseau dorsal et toutes les règles de sécurité que le gestionnaire oci-cloud-controller-manager n'a pas créées ne sont pas supprimés.
  • Lors du provisionnement d'un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, vous pouvez utiliser l'annotation is-preserve-source: "true" pour spécifier la conservation de l'adresse IP du client dans les en-têtes des paquets IP (valide uniquement lorsque l'annotation externalTrafficPolicy est réglée à "Local"). Dans ce cas, le gestionnaire oci-cloud-controller-manager crée des règles de sécurité dans le groupe de sécurité de réseau dorsal pour permettre l'accès aux noeuds de travail du jeu dorsal à partir des blocs CIDR spécifiés par loadBalancerSourceRanges dans le manifeste du service LoadBalancer. Notez que si les blocs CIDR ne sont pas spécifiés par loadBalancerSourceRanges, le gestionnaire oci-cloud-controller-manager crée une règle de sécurité pour autoriser l'accès à partir d'Internet (0.0.0.0/0) sur le numéro de port spécifié par nodePort.
  • Le groupe de sécurité de réseau dorsal que vous spécifiez en tant que valeur de l'annotation oci.oraclecloud.com/oci-backend-network-security-group doit se trouver dans le même VCN que la grappe.
  • Les instances de calcul hébergeant les noeuds de travail dans le jeu dorsal doivent avoir déjà été ajoutées au groupe de sécurité de réseau dorsal que vous spécifiez en tant que valeur de l'annotation oci.oraclecloud.com/oci-backend-network-security-group.

Exemples d'annotations de gestion des règles de sécurité

Exemple 1 : Créer un nouveau groupe de sécurité de réseau frontal avec des règles de sécurité gérées et avoir des règles de sécurité gérées dans un groupe de sécurité de réseau dorsal existant

Dans ce cas :

  • Vous voulez que le gestionnaire oci-cloud-controller-manager crée un groupe de sécurité de réseau frontal pour un équilibreur de charge et gère les règles de sécurité dans ce groupe.
  • Vous voulez que le gestionnaire oci-cloud-controller-manager utilise un groupe de sécurité de réseau dorsal existant et gère les règles de sécurité dans ce groupe.

Vous spécifiez "NSG" comme valeur de l'annotation oci.oraclecloud.com/security-rule-management-mode et spécifiez l'OCID du groupe de sécurité de réseau existant comme valeur de l'annotation oci.oraclecloud.com/oci-backend-network-security-group :

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid> 
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Dans ce cas :

  • Le gestionnaire oci-cloud-controller-manager crée le groupe de sécurité de réseau frontal pour l'équilibreur de charge et gère ses règles de sécurité.
  • Le gestionnaire oci-cloud-controller-manager gère les règles de sécurité du groupe de sécurité de réseau dorsal dont l'OCID est spécifié par l'annotation oci-backend-network-security-group.

Notez ce qui suit :

  • Le groupe de sécurité de réseau dorsal que vous spécifiez en tant que valeur de l'annotation oci.oraclecloud.com/oci-backend-network-security-group doit se trouver dans le même VCN que la grappe.
  • Les instances de calcul hébergeant les noeuds de travail dans le jeu dorsal doivent avoir déjà été ajoutées au groupe de sécurité de réseau dorsal que vous spécifiez en tant que valeur de l'annotation oci.oraclecloud.com/oci-backend-network-security-group.

Exemple 2 : Créer un nouveau groupe de sécurité de réseau frontal avec des règles de sécurité gérées et gérer manuellement les règles de sécurité dans un groupe de sécurité de réseau dorsal existant

Dans cet exemple :

  • Vous voulez que le gestionnaire oci-cloud-controller-manager crée un groupe de sécurité de réseau frontal pour un équilibreur de charge et gère les règles de sécurité dans ce groupe.
  • Vous voulez définir manuellement des règles de sécurité pour contrôler le trafic de l'élément frontal de l'équilibreur de charge vers l'élément dorsal dans un groupe de sécurité de réseau que vous créez et gérez. Par exemple, vous pouvez créer des règles de sécurité pour empêcher le trafic d'être acheminé de l'équilibreur de charge vers les noeuds de travail.

Vous spécifiez "NSG" comme valeur de l'annotation oci.oraclecloud.com/security-rule-management-mode :

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Dans ce cas :

  • Le gestionnaire oci-cloud-controller-manager crée le groupe de sécurité de réseau frontal pour l'équilibreur de charge et gère ses règles de sécurité.
  • Vous êtes responsable de la création et de la gestion des règles de sécurité dans un groupe de sécurité de réseau dorsal pour contrôler le trafic entre le groupe de sécurité de réseau frontal et le groupe de sécurité de réseau dorsal.

Exemple 3 : Créer un nouveau groupe de sécurité de réseau frontal avec des règles de sécurité gérées et avoir des règles de sécurité gérées dans un groupe de sécurité de réseau dorsal existant (mais des annotations utilisées incorrectement)

Dans cet exemple :

  • Vous voulez que le gestionnaire oci-cloud-controller-manager crée un groupe de sécurité de réseau frontal pour un équilibreur de charge et gère les règles de sécurité dans ce groupe.
  • Vous voulez que le gestionnaire oci-cloud-controller-manager utilise un groupe de sécurité de réseau dorsal existant et gère les règles de sécurité dans ce groupe. Toutefois, vous indiquez les annotations de manière incorrecte.

Vous spécifiez correctement "NSG" comme valeur de l'annotation oci.oraclecloud.com/security-rule-management-mode. Toutefois, vous incluez l'annotation service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode par erreur et omettez l'annotation oci.oraclecloud.com/oci-backend-network-security-group :

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "All"
  spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Dans ce cas :

  • Le gestionnaire oci-cloud-controller-manager crée le groupe de sécurité de réseau frontal pour l'équilibreur de charge et gère ses règles de sécurité.
  • Le gestionnaire oci-cloud-controller-manager ignore l'annotation service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode (car l'annotation oci.oraclecloud.com/security-rule-management-mode est présente).
  • Vous êtes responsable de la création et de la gestion des règles de sécurité dans un groupe de sécurité de réseau dorsal pour contrôler le trafic entre le groupe de sécurité de réseau frontal et le groupe de sécurité de réseau dorsal (car l'annotation oci.oraclecloud.com/oci-backend-network-security-group n'est pas présente).

Exemple 4 : Créer un nouveau groupe de sécurité de réseau frontal avec des règles de sécurité gérées, avoir des règles de sécurité gérées dans un groupe de sécurité de réseau dorsal existant et ajouter l'équilibreur de charge à un groupe de sécurité de réseau existant

Dans cet exemple :

  • Vous voulez que le gestionnaire oci-cloud-controller-manager crée un groupe de sécurité de réseau frontal pour un équilibreur de charge et gère les règles de sécurité dans ce groupe.
  • Vous voulez que le gestionnaire oci-cloud-controller-manager utilise un groupe de sécurité de réseau dorsal existant et gère les règles de sécurité dans ce groupe.
  • Vous voulez que le gestionnaire oci-cloud-controller-manager ajoute l'équilibreur de charge à un groupe de sécurité de réseau existant comportant des règles de sécurité que vous gérez.

Vous spécifiez :

  • "NSG" en tant que valeur de l'annotation oci.oraclecloud.com/security-rule-management-mode.
  • OCID du groupe de sécurité de réseau existant que vous voulez que le gestionnaire oci-cloud-controller-manager utilise, comme valeur de l'annotation oci.oraclecloud.com/oci-backend-network-security-group.
  • OCID du groupe de sécurité de réseau existant auquel vous voulez que le gestionnaire oci-cloud-controller-manager ajoute l'équilibreur de charge.

Le manifeste est le suivant :

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"    
    oci.oraclecloud.com/security-rule-management-mode: "NSG"
    oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid>
    oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"
  spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Dans ce cas :

  • Le gestionnaire oci-cloud-controller-manager crée le groupe de sécurité de réseau frontal pour l'équilibreur de charge et gère ses règles de sécurité.
  • Le gestionnaire oci-cloud-controller-manager gère les règles de sécurité du groupe de sécurité de réseau dorsal dont l'OCID est spécifié par l'annotation oci.oraclecloud.com/oci-backend-network-security-group.
  • Le gestionnaire oci-cloud-controller-manager ajoute l'équilibreur de charge au groupe de sécurité de réseau spécifié par l'annotation oci.oraclecloud.com/oci-network-security-groups.

Définition des paramètres de vérification de l'état

Les équilibreurs de charge et les équilibreurs de charge de réseau d'Oracle Cloud Infrastructure appliquent une politique de vérification de l'état pour surveiller en continu les serveurs dorsaux. Une vérification d'état est un test permettant de confirmer la disponibilité du serveur dorsal, et peut être une demande ou une tentative de connexion. Si la vérification de l'état d'un serveur échoue, l'équilibreur de charge ou l'équilibreur de charge de réseau retire temporairement ce dernier de la rotation. Si la vérification de l'état aboutit par la suite, l'équilibreur de charge ou l'équilibreur de charge de réseau retourne dans la rotation.

Les politiques de vérification de l'état comprennent un certain nombre de paramètres, qui ont chacun une valeur par défaut. Lorsque Kubernetes Engine provisionne un équilibreur de charge OCI ou un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, vous pouvez remplacer les valeurs par défaut des paramètres de vérification de l'état en incluant des annotations dans la section de métadonnées du fichier manifeste. Vous pouvez ensuite ajouter, modifier et supprimer ces annotations. Si vous supprimez une annotation qui indiquait une valeur pour un paramètre de vérification de l'état, l'équilibreur de charge ou l'équilibreur de charge de réseau utilise la valeur par défaut du paramètre à la place.

Configurer les paramètres de vérification de l'état pour les équilibreurs de charge

Pour configurer les paramètres de vérification de l'état lorsque Kubernetes Engine provisionne un équilibreur de charge pour un service Kubernetes de type LoadBalancer, ajoutez les annotations suivantes dans la section de métadonnées du fichier manifeste :

  • Pour indiquer le nombre de demandes de vérification d'état infructueuses autorisées avant qu'un serveur dorsal soit considéré comme non intègre, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

    service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "<value>"

    <value> est le nombre de demandes de vérification d'état infructueuses.

  • Pour spécifier l'intervalle entre les demandes de vérification d'état, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

    service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "<value>"

    <value> est une valeur numérique en millisecondes. La valeur minimale est 000.

  • Pour spécifier le délai maximal d'attente d'une réponse à une demande de vérification d'état, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

    service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "<value>"

    <value> est une valeur numérique en millisecondes. Un contrôle d'état n'est réussi que si l'équilibreur de charge reçoit une réponse avant l'expiration de ce délai.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "5"
    service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "15000"
    service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "4000"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
Configurer les paramètres de vérification de l'état des équilibreurs de charge de réseau

Pour configurer les paramètres de vérification de l'état lorsque Kubernetes Engine provisionne un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, ajoutez les annotations suivantes dans la section de métadonnées du fichier manifeste :

  • Pour indiquer le nombre de demandes de vérification d'état infructueuses autorisées avant qu'un serveur dorsal soit considéré comme non intègre, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

    oci-network-load-balancer.oraclecloud.com/health-check-retries: "<value>"

    <value> est le nombre de demandes de vérification d'état infructueuses.

  • Pour spécifier l'intervalle entre les demandes de vérification d'état, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

    oci-network-load-balancer.oraclecloud.com/health-check-interval: "<value>"

    <value> est une valeur numérique en millisecondes. La valeur minimale est 000.

  • Pour spécifier le délai maximal d'attente d'une réponse à une demande de vérification d'état, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

    oci-network-load-balancer.oraclecloud.com/health-check-timeout: "<value>"

    <value> est une valeur numérique en millisecondes. Un contrôle d'état n'est réussi que si l'équilibreur de charge de réseau reçoit une réponse avant l'expiration de ce délai.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/health-check-retries: "5"
    oci-network-load-balancer.oraclecloud.com/health-check-interval: "15000"
    oci-network-load-balancer.oraclecloud.com/health-check-timeout: "4000"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Notez que si vous ne spécifiez pas explicitement les valeurs des paramètres de vérification de l'état en incluant des annotations dans la section de métadonnées du fichier manifeste, les valeurs par défaut suivantes sont utilisées :

Annotation de l'équilibreur de charge Annotation de l'équilibreur de charge de réseau

Valeur par défaut utilisée

service.beta.kubernetes.io/oci-load-balancer-health-check-retries oci-network-load-balancer.oraclecloud.com/health-check-retries "3"
service.beta.kubernetes.io/oci-load-balancer-health-check-interval oci-network-load-balancer.oraclecloud.com/health-check-interval "10,000"
service.beta.kubernetes.io/oci-load-balancer-health-check-timeout oci-network-load-balancer.oraclecloud.com/health-check-timeout "3,000"

Pour plus d'informations sur les politiques de vérification d'état de l'équilibreur de charge et de l'équilibreur de charge de réseau d'Oracle Cloud Infrastructure, voir :

Sélection des noeuds de travail à inclure dans les jeux dorsaux

Le trafic entrant vers un équilibreur de charge ou un équilibreur de charge de réseau Oracle Cloud Infrastructure est réparti entre les serveurs dorsaux d'un jeu dorsal. Par défaut, lorsque Kubernetes Engine provisionne un équilibreur de charge ou un équilibreur de charge de réseau Oracle Cloud Infrastructure pour un service Kubernetes de type LoadBalancer, tous les noeuds de travail de la grappe sont inclus dans le jeu dorsal.

Toutefois, vous avez la possibilité de sélectionner uniquement un sous-ensemble de noeuds de travail dans une grappe à inclure dans le jeu dorsal d'un équilibreur de charge ou d'un équilibreur de charge de réseau donné. L'inclusion de sous-ensembles des noeuds de travail d'une grappe dans les jeux dorsaux de différents équilibreurs de charge et équilibreurs de charge de réseau vous permet de présenter une seule grappe Kubernetes en tant que grappes logiques (services).

Sélectionner les noeuds de travail à inclure dans le jeu dorsal de l'équilibreur de charge

Pour sélectionner les noeuds de travail à inclure dans le jeu dorsal lorsque Kubernetes Engine provisionne un équilibreur de charge pour un service Kubernetes de type LoadBalancer, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci.oraclecloud.com/node-label-selector: <label>

<label> est une ou plusieurs clés et valeurs d'étiquette, identifiées à l'aide de la notation de sélecteur d'étiquette Kubernetes standard. Par exemple, lbset=set1

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/node-label-selector: lbset=set1
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Sélectionner les noeuds de travail à inclure dans le jeu dorsal de l'équilibreur de charge de réseau

Pour sélectionner les noeuds de travail à inclure dans le jeu dorsal lorsque Kubernetes Engine provisionne un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/node-label-selector: <label>

<label> est une ou plusieurs clés et valeurs d'étiquette, identifiées à l'aide de la notation de sélecteur d'étiquette Kubernetes standard. Par exemple, lbset=set1

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset=set1
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Utilisez la notation de sélecteur d'étiquette Kubernetes standard pour spécifier les clés et les valeurs d'étiquette dans les annotations de la section de métadonnées du fichier manifeste. Pour plus d'informations sur la notation standard du sélecteur d'étiquette Kubernetes, voir Sélecteurs d'étiquette dans la documentation sur Kubernetes.

Le tableau donne quelques exemples de notation standard du sélecteur d'étiquette Kubernetes.

Annotation de l'équilibreur de charge Annotation de l'équilibreur de charge de réseau

Inclure dans le jeu dorsal :

oci.oraclecloud.com/node-label-selector: lbset=set1 oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset=set1

Tous les noeuds de travail ayant la clé d'étiquette lbset et la valeur set1

oci.oraclecloud.com/node-label-selector: lbset in (set1, set3) oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset in (set1, set3)

Tous les noeuds de travail ayant la clé d'étiquette lbset et la valeur set1 ou set3

oci.oraclecloud.com/node-label-selector: lbset oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset Tous les noeuds de travail avec la clé d'étiquette lbset, quelle que soit sa valeur.
oci.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3) oci-network-load-balancer.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3)

Tous les noeuds de travail avec la clé d'étiquette env qui a la valeur prod et avec la clé d'étiquette lbset qui a la valeur set1 ou la valeur set3

oci.oraclecloud.com/node-label-selector: env!=test oci-network-load-balancer.oraclecloud.com/node-label-selector: env!=test

Tous les noeuds de travail avec la clé d'étiquette env qui n'ont pas la valeur test

Spécification des politiques de jeu dorsal

Lorsque Kubernetes Engine provisionne un équilibreur de charge ou un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, vous pouvez définir une politique pour le jeu dorsal afin de spécifier comment distribuer le trafic entrant vers les serveurs dorsaux.

Pour plus d'informations :

Spécification d'une politique de jeu dorsal pour un équilibreur de charge

Pour spécifier une politique pour le jeu dorsal lorsque Kubernetes Engine provisionne un équilibreur de charge pour un service Kubernetes de type LoadBalancer, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci.oraclecloud.com/loadbalancer-policy: <value>

<value> est l'une des valeurs suivantes :

  • "ROUND_ROBIN" : Achemine le trafic entrant vers chaque serveur d'une liste de jeux dorsaux.
  • "LEAST_CONNECTIONS" : Achemine le trafic non persistant entrant vers le serveur dorsal ayant le moins de connexions actives.
  • "IP_HASH" : Achemine le trafic de demande non persistant entrant du même client vers le même serveur dorsal tant que ce serveur est disponible, en utilisant l'adresse IP source de la demande entrante comme clé de hachage.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/loadbalancer-policy: "LEAST_CONNECTIONS"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Notez que si vous ne spécifiez pas explicitement une politique pour le jeu dorsal, "ROUND_ROBIN" est utilisé comme valeur par défaut.

Spécification d'une politique de jeu dorsal pour un équilibreur de charge de réseau

Pour spécifier une politique pour le jeu dorsal lorsque Kubernetes Engine provisionne un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/backend-policy: <value>

<value> est l'une des valeurs suivantes :

  • "TWO_TUPLE" : Achemine le trafic entrant en fonction d'un hachage à 2 tuples (adresse IP source et adresse IP de destination).
  • "THREE_TUPLE" : Achemine le trafic entrant en fonction d'un hachage à 3 tuples (adresse IP source, adresse IP de destination, protocole).
  • "FIVE_TUPLE" : Achemine le trafic entrant en fonction d'un hachage à 5 tuples (adresse IP et port sources, adresse IP et port de destination, protocole).

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/backend-policy: "THREE_TUPLE"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Notez que si vous ne spécifiez pas explicitement une politique pour le jeu dorsal, "FIVE_TUPLE" est utilisé comme valeur par défaut.

Définition des points de contrôle de préparation des pods

Note

Vous pouvez spécifier des portes de disponibilité des pods pour les grappes avec des noeuds virtuels, mais pas pour les grappes avec des noeuds gérés.

Lorsque Kubernetes Engine provisionne un équilibreur de charge ou un équilibreur de charge de réseau Oracle Cloud Infrastructure pour un service Kubernetes de type LoadBalancer, vous pouvez utiliser un point de contrôle de disponibilité des pods pour vous assurer que le trafic n'est acheminé qu'aux pods qui ont tous les deux été ajoutés au jeu dorsal et qui sont prêts à recevoir du trafic. Notez que vous pouvez spécifier des portes de disponibilité des pods pour les pods exécutés sur des noeuds virtuels, mais pas pour les pods exécutés sur des noeuds gérés. Ne définissez pas de portes de disponibilité pour les pods exécutés sur les noeuds gérés.

Les portes de préparation des pods sont des conditions supplémentaires indiquant qu'un pod est prêt à recevoir du trafic. Les points de contrôle de la disponibilité des pods vous permettent d'implémenter des vérifications complexes de la disponibilité des personnalisations et peuvent vous aider à atteindre un temps d'arrêt nul lors des déploiements continus. Pour plus d'informations, voir Détails de la disponibilité des pods dans la documentation sur Kubernetes.

Lors du provisionnement d'un équilibreur de charge ou d'un équilibreur de charge de réseau, le jeu dorsal comprend les adresses IP des répliques de pod d'un déploiement qui ont une condition Ready. La mise à jour du déploiement (par exemple, pour utiliser une nouvelle image) déclenche le remplacement des répliques de pod existantes par de nouvelles répliques de pod. Toutefois, le remplacement de toutes les répliques de pod peut prendre un certain temps et entraîner une indisponibilité du serveur dorsal car :

  • Les répliques de pod existantes peuvent être arrêtées avant la mise à jour du jeu dorsal avec les adresses IP des nouvelles répliques de pod.
  • Le jeu dorsal peut être mis à jour avec les adresses IP des nouvelles répliques de pod avant que les nouvelles répliques de pod ne soient prêtes à recevoir le trafic.

La spécification de l'utilisation d'un point de contrôle de disponibilité des pods garantit que les serveurs dorsaux sont toujours disponibles pour l'équilibreur de charge ou l'équilibreur de charge de réseau. Les pods existants ne sont pas arrêtés tant que de nouveaux pods n'ont pas été ajoutés au jeu dorsal et que les nouveaux pods ne sont pas prêts à recevoir le trafic.

Pour spécifier que le moteur Kubernetes injecte un point de contrôle de disponibilité des pods dans la spécification de pod de chaque pod créé dans un espace de noms particulier, ajoutez l'étiquette loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled à l'espace de noms en entrant :

kubectl label ns <namespace> loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled

L'exemple suivant montre comment créer un équilibreur de charge avec un point de contrôle de disponibilité des pods.

Commencez par étiqueter l'espace de noms pdr pour spécifier la passerelle de disponibilité du pod pour l'espace de noms, en entrant :

kubectl label ns pdr loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled

La sortie de la commande confirme que l'espace de noms a été étiqueté :

namespace/pdr labeled

Déployez ensuite Nginx dans l'espace de noms pdr en entrant :

kubectl apply -f https://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yaml -n pdr

Répertoriez les pods dans l'espace de noms pdr en entrant :

kubectl get pods -n pdr

Vous pouvez maintenant démontrer l'utilisation de la porte de disponibilité des pods en mettant à jour la version d'image dans le manifeste Nginx et en réappliquant le manifeste, de sorte que les pods existants soient remplacés par de nouveaux pods.

Téléchargez le manifeste Nginx à partir de https://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yaml et remplacez la version de l'image par nginx:1.25.1, comme indiqué :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.1
...

Réappliquer le manifeste en entrant :

kubectl apply -f ./nginx.yaml -n pdr

Observez les nouveaux pods en cours de déploiement en entrant :

kubectl get pods -o wide -n pdr

Par exemple :

NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES
nginx-678976847c-8bqs7   1/1     Running   0          44m   10.0.10.153   10.0.10.253   <none>           1/1
nginx-678976847c-ttqms   1/1     Running   0          47m   10.0.10.201   10.0.10.253   <none>           1/1

Observez le statut de l'un des nouveaux pods en entrant :

kubectl describe pod <pod-name> -n pdr

Par exemple :

kubectl describe pod nginx-678976847c-ttqms  -n pdr

La sortie de la commande confirme le statut de la porte de disponibilité podreadiness.loadbalancer.oraclecloud.com. Par exemple :

...
Readiness Gates:
  Type                                                             Status
  podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f   True 
Conditions:
  Type                                                             Status
  podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f   True 
  PodScheduled                                                     True 
  Initialized                                                      True 
  Ready                                                            True 
  ContainersReady                                                  True 

Spécification de IPMode pour ajuster l'acheminement du trafic

Lorsque Kubernetes Engine provisionne un équilibreur de charge ou un équilibreur de charge de réseau Oracle Cloud Infrastructure pour un service Kubernetes de type LoadBalancer, vous pouvez spécifier comment acheminer le trafic provenant d'une grappe vers l'adresse IP de l'équilibreur de charge ou de l'équilibreur de charge de réseau.

Dans les grappes exécutant Kubernetes version 1.30 ou ultérieure, le point de contrôle des fonctions Kubernetes LoadBalancerIPMode est activé et le champ ipMode d'un service de type LoadBalancer a la valeur par défaut "VIP". Lorsque ipMode a la valeur "VIP", le trafic envoyé à l'adresse IP d'un service de type LoadBalancer à partir d'un pod dans la grappe est acheminé directement vers les pods d'application pour optimiser la performance, en contournant le service LoadBalancer. Pour plus d'informations, voir Spécification de IPMode du statut de l'équilibreur de charge dans la documentation sur Kubernetes.

Toutefois, dans certains cas, vous pouvez décider que l'acheminement du trafic directement vers des pods d'application n'est pas approprié. Par exemple, si le trafic provenant d'une grappe est acheminé directement aux pods d'application, vous ne pouvez pas mettre en oeuvre la terminaison SSL au niveau de l'équilibreur de charge.

Pour spécifier comment acheminer le trafic envoyé à l'adresse IP de l'équilibreur de charge ou de l'équilibreur de charge de réseau à partir de la grappe, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci.oraclecloud.com/ingress-ip-mode: <value>

<value> est l'une des valeurs suivantes :

  • "VIP" : Tout le trafic provenant de la grappe et envoyé à l'adresse IP d'un service de type LoadBalancer est acheminé directement aux pods d'application pour optimiser la performance, en contournant le service LoadBalancer.
  • "proxy" : Tout le trafic provenant de la grappe et envoyé à l'adresse IP d'un service de type LoadBalancer est acheminé vers l'équilibreur de charge ou l'équilibreur de charge de réseau Oracle Cloud Infrastructure qui a été provisionné pour le service LoadBalancer. L'équilibreur de charge ou l'équilibreur de charge de réseau transmet ensuite le trafic aux pods d'application.

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    oci.oraclecloud.com/ingress-ip-mode: "proxy"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Notez que si vous ne spécifiez pas l'annotation oci.oraclecloud.com/ingress-ip-mode ou que vous supprimez l'annotation par la suite, la propriété ipMode d'un service de type LoadBalancer a la valeur par défaut "VIP".

Notez également que lors de l'utilisation d'un équilibreur de charge de réseau privé avec l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source réglée à true, l'équilibreur de charge de réseau présente une limitation connue qui n'autorise pas le trafic lorsque le noeud source et le noeud dorsal de destination sont le même noeud. Cette limitation empêche la communication entre les pods sur le même noeud au moyen de l'équilibreur de charge de réseau lorsque les conditions suivantes sont toutes remplies :

  • L'annotation oci.oraclecloud.com/ingress-ip-mode est réglée à proxy.
  • L'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source est réglée à true.
  • L'équilibreur de charge de réseau est privé.

Spécification des familles d'adresses IP pour les équilibreurs de charge et les équilibreurs de charge de réseau

Lorsque Kubernetes Engine provisionne un équilibreur de charge ou un équilibreur de charge de réseau Oracle Cloud Infrastructure pour un service Kubernetes de type LoadBalancer, le sous-réseau de l'équilibreur de charge détermine le contrôle dont vous disposez sur la famille d'adresses IP de l'adresse IP sur laquelle l'équilibreur de charge ou l'équilibreur de charge de réseau reçoit le trafic.

  • Si le sous-réseau est un sous-réseau à pile unique IPv4, le sous-réseau est configuré pour l'adressage IPv4 uniquement. Une adresse IPv4 est affectée uniquement à l'équilibreur de charge ou à l'équilibreur de charge de réseau pour la réception du trafic externe. Vous ne pouvez pas modifier la famille d'adresses IP de l'adresse IP sur laquelle l'équilibreur de charge ou l'équilibreur de charge de réseau reçoit le trafic externe.
  • Si le sous-réseau est un sous-réseau à double pile IPv4/IPv6, le sous-réseau est configuré pour l'adressage IPv4 et IPv6. L'équilibreur de charge ou l'équilibreur de charge de réseau peut être affecté à l'une ou l'autre des adresses IPv4 et IPv6 sur lesquelles le trafic externe doit être reçu. Dans ce cas, vous pouvez utiliser les champs spec.ipFamilyPolicy et spec.ipFamilies de Kubernetes dans le manifeste des services pour spécifier si l'équilibreur de charge ou l'équilibreur de charge de réseau reçoit le trafic externe sur l'adresse IPv4 uniquement, ou sur l'adresse IPv6 uniquement, ou sur l'adresse IPv4 et l'adresse IPv6.

Notez que la famille d'adresses IP utilisée pour le trafic entre le module d'écoute et le jeu dorsal est déterminée différemment pour les équilibreurs de charge et les équilibreurs de charge de réseau :

  • Équilibreurs de charge : Le trafic entre un module d'écoute d'équilibreur de charge et le jeu dorsal utilise toujours les adresses IPv4.
  • Équilibreurs de charge de réseau : Le trafic entre un module d'écoute d'équilibreur de charge de réseau et le jeu dorsal utilise la même famille d'adresses IP que l'adresse IP sur laquelle le module d'écoute de l'équilibreur de charge de réseau reçoit le trafic externe.

Le tableau présente l'interaction entre la famille d'adresses IP du sous-réseau de l'équilibreur de charge, les paramètres spec.ipFamilyPolicy et spec.ipFamilies, la famille d'adresses IP à partir de laquelle les adresses IP sont affectées à l'équilibreur de charge ou à l'équilibreur de charge de réseau, et le protocole IP entre le module d'écoute et le jeu dorsal. Notez que seules les combinaisons valides sont affichées.

Famille d'adresses IP de sous-réseau ipFamilyPolicy réglé à : ipFamilies réglé à : Famille d'adresses IP du point d'extrémité de l'équilibreur de charge de réseau Famille d'adresses IP de l'équilibreur de charge Module d'écoute d'équilibreur de charge de réseau pour le trafic du jeu dorsal Trafic du module d'écoute de l'équilibreur de charge vers le jeu dorsal
IPv4 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 SingleStack IPv6 IPv6 non pris en charge IPv6 non pris en charge
IPv4 PreferDualStack IPv4 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv6 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv4,IPv6 IPv4 IPv4 IPv4 IPv4
IPv4 PreferDualStack IPv6,IPv4 IPv4 IPv4 IPv4 IPv4
IPv4/IPv6 PreferDualStack IPv4 IPv4(principal) et IPv6 IPv4(principal) et IPv6 IPv4(principal) et IPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6 IPv6(principal) et IPv4 IPv6(principal) et IPv4 IPv6(principal) et IPv4 IPv4
IPv4/IPv6 PreferDualStack IPv4,IPv6 IPv4(principal) et IPv6 IPv4(principal) et IPv6 IPv4(principal) et IPv6 IPv4
IPv4/IPv6 PreferDualStack IPv6,IPv4 IPv6(principal) et IPv4 IPv6(principal) et IPv4 IPv6(principal) et IPv4 IPv4
IPv4/IPv6 RequireDualStack IPv4,IPv6 IPv4(principal) et IPv6 IPv4(principal) et IPv6 IPv4(principal) et IPv6 IPv4
IPv4/IPv6 RequireDualStack IPv6,IPv4 IPv6(principal) et IPv4 IPv6(principal) et IPv4 IPv6(principal) et IPv4 IPv4

Notez que si vous utilisez l'annotation service.beta.kubernetes.io/oci-load-balancer-subnet1 pour spécifier un sous-réseau alternatif au sous-réseau spécifié pour les équilibreurs de charge lors de la création de la grappe, assurez-vous que la famille d'adresses du sous-réseau alternatif est compatible avec les champs spec.ipFamilyPolicy et spec.ipFamilies du manifeste de service.

Pour plus d'informations sur la prise en charge de IPv4 et de IPv6 dans Kubernetes, voir IPv4/IPv6 dual-stack dans la documentation sur Kubernetes.

Exemple 1 :

Dans ce cas :

  • Vous voulez utiliser le sous-réseau spécifié pour les équilibreurs de charge lors de la création de la grappe.
  • Vous ne voulez déployer le service de type LoadBalancer que s'il peut être affecté à la fois à une adresse IPv4 et à une adresse IPv6, vous définissez ipFamilyPolicy: RequireDualStack.
  • Vous voulez que l'adresse IP principale de l'équilibreur de charge soit une adresse IPv6 (et que son adresse secondaire soit une adresse IPv4), vous définissez spec.ipFamilies: IPv6,IPv4.
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb" 
spec:
  type: LoadBalancer
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv6
  - IPv4
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: nginx

Dans cet exemple, le sous-réseau de l'équilibreur de charge de la grappe est un sous-réseau IPv4/IPv6 à double pile. Le déploiement a donc réussi. Une adresse IPv6 est affectée à l'équilibreur de charge en tant qu'adresse principale et une adresse IPv4 en tant qu'adresse secondaire.

Exemple 2 :

Dans ce cas :

  • Vous voulez héberger le service de type LoadBalancer sur un sous-réseau alternatif à celui spécifié pour les équilibreurs de charge lors de la création de la grappe. Vous utilisez donc l'annotation service.beta.kubernetes.io/oci-load-balancer-subnet1 pour spécifier l'OCID du sous-réseau alternatif.
  • Vous voulez affecter les adresses IPv4 et IPv6 au service de type LoadBalancer si le service est hébergé sur un sous-réseau IPv4/IPv6 à double pile. Sinon, si le service est hébergé sur un sous-réseau IPv4 de pile unique, vous voulez qu'une adresse IP soit affectée au service à partir de cette famille d'adresses IP. Vous définissez donc ipFamilyPolicy: PreferDualStack.
  • Vous voulez que l'adresse IP principale de l'équilibreur de charge soit une adresse IPv4 (et que son adresse secondaire soit une adresse IPv6, si elle est prise en charge par le sous-réseau), vous devez donc définir spec.ipFamilies: IPv4,IPv6.
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"  
spec:
  type: LoadBalancer
  ipFamilyPolicy: PreferDualStack
  ipFamilies:
  - IPv4
  - IPv6
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: nginx

Dans cet exemple, le sous-réseau alternatif est un sous-réseau IPv4/IPv6 à double pile, de sorte que le déploiement est réussi. Une adresse IPv4 est affectée à l'équilibreur de charge en tant qu'adresse principale et une adresse IPv6 en tant qu'adresse secondaire.

Affectation d'adresses IPv4 et IPv6 spécifiques aux équilibreurs de charge de réseau

Lorsque le moteur Kubernetes provisionne un équilibreur de charge de réseau Oracle Cloud Infrastructure pour un service Kubernetes de type LoadBalancer, le service d'équilibreur de charge de réseau affecte une ou plusieurs adresses IP à l'équilibreur de charge de réseau.

Le service d'équilibreur de charge de réseau affecte une adresse IPv4 privée et, dans le cas d'un équilibreur de charge de réseau externe, affecte également une adresse IPv4 publique supplémentaire. Si le sous-réseau de l'équilibreur de charge de réseau est compatible, le service d'équilibreur de charge de réseau peut également affecter une adresse IPv6 (voir Spécification des familles d'adresses IP pour les équilibreurs de charge et les équilibreurs de charge de réseau).

Dans les grappes exécutant Kubernetes version 1.29 ou ultérieure, vous pouvez spécifier l'adresse IP à affecter à l'équilibreur de charge de réseau au lieu que le service d'équilibreur de charge de réseau sélectionne l'adresse IP à affecter. L'adresse IP que vous pouvez affecter dépend de la famille d'adresses IP du sous-réseau de l'équilibreur de charge de réseau, comme suit :

  • IPv4 : Si le sous-réseau de l'équilibreur de charge de réseau est un sous-réseau à pile unique IPv4 ou un sous-réseau à pile double IPv4/IPv6, vous pouvez affecter une adresse IPv4 privée à l'équilibreur de charge de réseau.
  • IPv4 et IPv6 : Si le sous-réseau de l'équilibreur de charge de réseau est un sous-réseau à pile double IPv4/IPv6, vous pouvez affecter une adresse IPv4 privée ou une adresse IPv6 à l'équilibreur de charge de réseau, ou les deux.

Pour spécifier une adresse IPv4 privée à affecter à un équilibreur de charge de réseau, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "<ipv4-address>"

<ipv4-address> est une adresse IPv4 valide, à partir du bloc CIDR IPv4 CIDR spécifié pour le sous-réseau de l'équilibreur de charge de réseau. Par exemple :

oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "10.0.0.1"

Pour spécifier une adresse IPv6 à affecter à un équilibreur de charge de réseau, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "<ipv6-address>"

<ipv6-address> est une adresse ULA ou GUA IPv6 valide, à partir du bloc CIDR IPv6 spécifié pour le sous-réseau de l'équilibreur de charge de réseau. Par exemple :

  • oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "fd8a:4b3c:7d91:abcd::1"
  • oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "2607:9b80:9a0a:9a7e:abcd:ef01:2345:6789"

Par exemple :

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "10.0.0.1"
    oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "fd8a:4b3c:7d91:abcd::1"
spec:
  type: LoadBalancer
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv6
  - IPv4
  ports:
  - port: 80
  selector:
    app: nginx

Il est de votre responsabilité de spécifier une adresse IP valide. Pour qu'une adresse IP soit valide, les conditions suivantes doivent être remplies :

  • L'adresse IP doit être dans le format correct pour l'annotation que vous utilisez (soit IPv4 soit IPv6).
  • L'adresse IP doit provenir du bloc CIDR approprié spécifié pour le sous-réseau de l'équilibreur de charge de réseau.
  • L'adresse IP ne doit pas déjà être utilisée par une autre ressource.

Notez ce qui suit :

  • Si l'adresse IP n'est pas dans le bon format ou ne provient pas du bloc CIDR approprié, la demande de création de l'équilibreur de charge de réseau n'est pas acceptée.
  • Si l'adresse IP est dans le bon format et à partir du bloc CIDR approprié, mais que l'adresse IP est déjà utilisée par une autre ressource, la demande de création de l'équilibreur de charge de réseau est acceptée. Toutefois, la demande de travail associée échouera et le compartiment contiendra un équilibreur de charge de réseau dont l'état est Échec.
  • Si l'adresse IP est valide, l'équilibreur de charge de réseau est créé avec l'adresse IP spécifiée qui lui est affectée.

Masquage de l'adresse IP privée d'un équilibreur de charge de réseau

Lorsque Kubernetes Engine provisionne un équilibreur de charge de réseau public Oracle Cloud Infrastructure pour un service Kubernetes de type LoadBalancer, le service Équilibreur de charge de réseau affecte à la fois une adresse IP publique et une adresse IP privée à l'équilibreur de charge de réseau. L'adresse IP privée est utilisée pour les vérifications d'état et la traduction d'adresses de port (PAT), mais ne peut pas recevoir de trafic externe du VCN (y compris à partir de l'Internet public).

Pour voir les adresses IP publiques et privées que le service d'équilibreur de charge de réseau a affectées à l'équilibreur de charge de réseau, entrez la commande kubectl get service (ou similaire). Par exemple :

kubectl get service my-nginx-svc -o json | jq .status

{
  "loadBalancer": {
    "ingress": [
      {
        "ip": "203.0.113.2"
      },
      {
        "ip": "10.30.3.24"
      }
    ]
  }
}

Dans certains cas, vous pouvez uniquement exposer l'adresse IP publique de l'équilibreur de charge de réseau et masquer l'adresse IP privée. Par exemple :

  • Vous pouvez spécifier un nom DNS convivial pour l'équilibreur de charge de réseau lors de l'utilisation du module complémentaire ExternalDNS, en incluant l'annotation external-dns.alpha.kubernetes.io/hostname dans le manifeste du service Kubernetes de type LoadBalancer. ExternalDNS crée un enregistrement DNS pour l'équilibreur de charge de réseau dans le fournisseur DNS externe que vous avez configuré pour la grappe. L'enregistrement DNS mappe le nom DNS à l'adresse IP publique et à l'adresse IP privée. Par conséquent, si le trafic externe utilise le nom DNS, il est possible que le trafic soit acheminé vers l'adresse IP privée de l'équilibreur de charge de réseau, même si l'adresse IP privée ne peut pas recevoir de trafic externe.
  • Vous pouvez configurer l'automatisation qui utilise la commande kubectl get service (ou similaire) pour obtenir l'adresse IP de l'équilibreur de charge de réseau. Si votre cas d'utilisation inclut l'acheminement du trafic externe, vous ne voulez que l'adresse IP publique de l'équilibreur de charge de réseau. Toutefois, par défaut, la commande kubectl get service retourne à la fois l'adresse IP publique de l'équilibreur de charge de réseau et son adresse IP privée.

Pour spécifier que la commande kubectl get service (ou similaire) retourne uniquement l'adresse IP publique de l'équilibreur de charge de réseau, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"

Notez que "false" est la valeur par défaut de l'annotation oci-network-load-balancer.oraclecloud.com/external-ip-only. Si vous n'incluez pas explicitement l'annotation dans la définition du service, la commande kubectl get service (ou similaire) retourne à la fois l'adresse IP publique et l'adresse IP privée de l'équilibreur de charge de réseau

Par exemple :


apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
  annotations:
    oci.oraclecloud.com/load-balancer-type: "nlb"
    oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx

Si vous incluez l'annotation oci-network-load-balancer.oraclecloud.com/external-ip-only: "true" dans le manifeste, lorsque vous entrez la commande kubectl get service (ou similaire), seule l'adresse IP publique est retournée. Par exemple :

kubectl get service my-nginx-svc -o json | jq .status

{
  "loadBalancer": {
    "ingress": [
      {
        "ip": "203.0.113.2"
      }
    ]
  }
}

Empêcher des noeuds de gérer le trafic

Vous pouvez exclure des noeuds de travail de la liste des serveurs dorsaux du jeu dorsal d'un équilibreur de charge ou d'un équilibreur de charge de réseau d'Oracle Cloud Infrastructure. Pour plus d'informations, voir node.kubernetes.io/exclude-from-external-load-balancers.

Marquage des équilibreurs de charge et des équilibreurs de charge de réseau

Vous pouvez ajouter des marqueurs à un équilibreur de charge ou à un équilibreur de charge de réseau provisionnés par le moteur Kubernetes pour un service Kubernetes de type LoadBalancer. Le service de marquage vous permet de regrouper des ressources disparates dans différents compartiments et d'annoter des ressources avec vos propres métadonnées. Voir Application de marqueurs aux équilibreurs de charge.

Activation du protocole de mandataire

Lorsque Kubernetes Engine provisionne un équilibreur de charge ou un équilibreur de charge de réseau Oracle Cloud Infrastructure pour un service Kubernetes de type LoadBalancer, vous pouvez spécifier si la fonction de protocole mandataire doit être activée avec les modules d'écoute basés sur TCP. L'activation du protocole de mandataire permet de transporter en toute sécurité des informations de connexion telles que l'adresse IP d'un client à travers plusieurs couches de mandataires vers le serveur dorsal. Les versions de protocole de mandataire suivantes sont disponibles :

  • La version 1, qui utilise un en-tête textuel pour transmettre des informations sur des serveurs mandataires, est préférable pour les implémentations de petite taille.
  • La version 2, qui utilise un en-tête textuel et binaire pour plus d'efficacité dans la production et l'analyse, est préférable pour les grandes implémentations.

Les équilibreurs de charge provisionnés par le protocole de mandataire de prise en charge de Kubernetes Engine version 1 et version 2. Les équilibreurs de charge de réseau provisionnés par le protocole de mandataire de prise en charge de Kubernetes Engine version 2.

Pour plus d'informations :

Activation du protocole de mandataire pour les équilibreurs de charge

Pour activer le protocole mandataire pour les équilibreurs de charge provisionnés par Kubernetes Engine, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

service.beta.kubernetes.io/oci-load-balancer-connection-proxy-protocol-version: "<value>"

"<value>" est l'une des valeurs suivantes :

  • "1" pour spécifier que vous voulez activer le protocole de mandataire version 1 sur tous les modules d'écoute de l'équilibreur de charge.
  • "2" pour spécifier que vous voulez activer le protocole de mandataire version 2 sur tous les modules d'écoute de l'équilibreur de charge.

Après avoir activé la fonction de protocole mandataire pour les équilibreurs de charge, notez les points suivants :

  • Vous ne pouvez pas désactiver la fonction de protocole mandataire sur les modules d'écoute de l'équilibreur de charge.
  • Vous pouvez basculer entre la version de protocole de mandataire 1 et la version de protocole de mandataire 2 en mettant à jour l'annotation.
  • Si vous supprimez ensuite l'annotation du manifeste ou annulez la définition de l'annotation (en réglant "<value>" à ""), le dernier paramètre appliqué avec succès pour "<value>" est conservé sur tous les modules d'écoute.
Activation et désactivation du protocole mandataire pour les équilibreurs de charge de réseau

Pour activer le protocole mandataire pour les équilibreurs de charge de réseau provisionnés par Kubernetes Engine, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :

oci-network-load-balancer.oraclecloud.com/is-ppv2-enabled: "<value>"

"<value>" est l'une des valeurs suivantes :

  • "true" pour spécifier que vous voulez activer le protocole mandataire version 2 sur tous les modules d'écoute de l'équilibreur de charge de réseau.
  • "false" pour spécifier que vous voulez désactiver le protocole mandataire version 2 sur tous les modules d'écoute de l'équilibreur de charge de réseau.

Après avoir activé la fonction de protocole mandataire pour les équilibreurs de charge de réseau, notez les points suivants :

  • Vous pouvez désactiver la fonction de protocole mandataire sur les modules d'écoute de l'équilibreur de charge de réseau en réglant "<value>" à "false".
  • Si vous supprimez par la suite l'annotation du manifeste, ou annulez la définition de l'annotation (en réglant "<value>" à ""), ou spécifiez une valeur non valide (telle que "enable") pour l'annotation, le dernier paramètre appliqué avec succès pour "<value>" est conservé sur tous les modules d'écoute.