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 :
- à propos des équilibreurs de charge publics et privés d'Oracle Cloud Infrastructure, voir Types d'équilibreur de charge.
- à propos des équilibreurs de charge de réseau publics et privés d'Oracle Cloud Infrastructure, voir Types d'équilibreur de charge de réseau
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"
où 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
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"
où 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.
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
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 serviceLoadBalancer
, 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 serviceLoadBalancer
, spécifiez une autre adresse IP publique réservée dans le fichier manifeste, puis déployez à nouveau le serviceLoadBalancer
. - Si vous ne définissez pas la propriété
loadBalancerIP
du serviceLoadBalancer
, 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'annotationservice.beta.kubernetes.io/oci-load-balancer-internal: "true"
ouoci-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'}
- pour les équilibreurs de charge publics, ajoutez la politique suivante à la location :
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.
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>"
où <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
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>"
où <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é.
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 :
-
Pour gérer les règles de sécurité dans un groupe de sécurité de réseau, utilisez l'annotation
oci.oraclecloud.com/security-rule-management-mode: "NSG"
(recommandé).Si vous voulez que le gestionnaire oci-cloud-controller-manager gère les règles de sécurité dans un groupe de sécurité de réseau (comme recommandé par Oracle), vous devez utiliser l'annotation
oci.oraclecloud.com/security-rule-management-mode: "NSG"
. Pour plus d'informations sur l'utilisation de cette annotation, voir 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é. -
Pour gérer les règles de sécurité dans une liste de sécurité, utilisez l'annotation
oci.oraclecloud.com/security-rule-management-mode
ou les annotationsservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
etoci-network-load-balancer.oraclecloud.com/security-list-management-mode
.Si vous voulez que le gestionnaire oci-cloud-controller-manager gère les règles de sécurité dans la liste de sécurité du sous-réseau d'un équilibreur de charge ou d'un équilibreur de charge de réseau, effectuez l'une des opérations suivantes :
- Utilisez l'annotation
oci.oraclecloud.com/security-rule-management-mode
, réglée à"SL-All"
ou à"SL-Frontend"
. Pour plus d'informations sur l'utilisation de cette annotation, voir 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é. - Utilisez les annotations
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
etoci-network-load-balancer.oraclecloud.com/security-list-management-mode
respectivement, réglées à"All"
ou"Frontend"
. Pour plus d'informations sur l'utilisation de ces deux annotations, voir Définition des options de gestion des listes de sécurité lors du provisionnement d'un équilibreur de charge OCI et Définition des options de gestion des listes de sécurité lors du provisionnement d'un équilibreur de charge de réseau OCI respectivement.
- Utilisez l'annotation
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>
où <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églerservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ouoci-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églerservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ouoci-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églerservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ouoci-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 annotationsservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
ouoci-network-load-balancer.oraclecloud.com/security-list-management-mode
dans le manifeste, le gestionnaire oci-cloud-controller-manager utilise toujoursoci.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'annotationexternalTrafficPolicy
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 parloadBalancerSourceRanges
dans le manifeste du service LoadBalancer. Notez que si les blocs CIDR ne sont pas spécifiés parloadBalancerSourceRanges
, 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é parnodePort
. - 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'annotationoci.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'annotationoci.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.
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>"
où
<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>"
où
<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>"
où
<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
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>"
où
<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>"
où
<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>"
où
<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).
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>
où <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
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>
où <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 |
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 |
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 |
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 |
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 :
- À propos des équilibreurs de charge et des politiques de jeu dorsal, voir Politiques d'équilibreur de charge.
- À propos des équilibreurs de charge de réseau et des politiques de jeu dorsal, voir Politiques d'équilibreur de charge de réseau
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>
où <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.
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>
où <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
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.
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>
où <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
etspec.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>"
où <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>"
où <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 commandekubectl 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 :
- À propos des équilibreurs de charge et de la fonction de protocole de mandataire, voir Protocole de mandataire pour les équilibreurs de charge.
- À propos des équilibreurs de charge de réseau et de la fonction de protocole mandataire, voir Protocole mandataire pour les équilibreurs de charge de réseau.
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>"
où "<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.
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>"
où "<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.