Provisionnement des équilibreurs de charge de réseau OCI pour les services Kubernetes de type LoadBalancer
Découvrez comment provisionner un équilibreur de charge de réseau OCI pour un service Kubernetes de type LoadBalancer à l'aide de Kubernetes Engine (OKE).
Cette section décrit comment provisionner un équilibreur de charge de réseau OCI pour un service Kubernetes de type LoadBalancer.
Un équilibreur de charge de réseau d'Oracle Cloud Infrastructure est une solution non-mandataire qui effectue un équilibrage direct des charges de travail de couche 3 et 4 (TCP/UDP/ICMP) OSI. Il offre une adresse IP virtuelle régionale (VIP) extensible qui peut être augmentée ou réduite en fonction du trafic client, sans configuration de bande passante minimale ou maximale. Il offre également les avantages de la haute disponibilité du flux, de l'adresse IP source et de destination et de la conservation des ports.
Pour plus d'informations sur les équilibreurs de charge de réseau d'Oracle Cloud Infrastructure, voir Aperçu du service d'équilibreur de charge de réseau flexible.
Le provisionnement d'un équilibreur de charge de réseau OCI pour un service Kubernetes de type LoadBalancer vous permet de :
- équilibrer la charge du trafic avec un haut débit et une faible latence
- préserver les adresses IP et les ports d'origine et de destination
- gérer le trafic TCP et UDP
Notez que lorsque Kubernetes Engine provisionne un équilibreur de charge de réseau OCI pour un service Kubernetes de type LoadBalancer, les règles de sécurité permettant le trafic entrant et sortant vers et depuis le sous-réseau de l'équilibreur de charge de réseau ne sont pas créées automatiquement par défaut. Vous devez définir des règles de sécurité appropriées 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.
Utilisez les mesures de l'équilibreur de charge de réseau OCI pour surveiller l'état d'un équilibreur de charge de réseau OCI provisionné pour un service Kubernetes de type LoadBalancer (voir Mesures de l'équilibreur de charge de réseau).
Spécification de l'annotation pour un équilibreur de charge de réseau OCI
Pour provisionner 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.oraclecloud.com/load-balancer-type: "nlb"
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Notez que lb
est la valeur par défaut de l'annotation oci.oraclecloud.com/load-balancer-type
. Si vous n'incluez pas explicitement l'annotation dans la définition du service, la valeur par défaut de l'annotation est utilisée et un équilibreur de charge (plutôt qu'un équilibreur de charge de réseau) est provisionné.
Interruption des demandes au niveau du noeud de réception
Lors du provisionnement d'un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, vous pouvez spécifier que les demandes prennent fin à l'adresse IP du client spécifiée dans les en-têtes des paquets IP, plutôt que d'être mandatées par d'autres noeuds de travail de la grappe.
Par défaut, les demandes sont transmises à d'autres noeuds de travail de la grappe.
Le fait de spécifier que les demandes se terminent à l'adresse IP du client (plutôt que d'être mandatées) peut améliorer la performance dans de très grandes grappes contenant des milliers de noeuds de travail en éliminant le trafic entre les noeuds de travail. Spécifier que les demandes se terminent à l'adresse IP du client peut également simplifier la mise en oeuvre et supprimer les problèmes de sécurité potentiels en vous permettant de configurer des règles de sécurité (dans un groupe de sécurité de réseau (recommandé) ou une liste de sécurité) pour les noeuds de travail de la grappe qui autorisent uniquement le trafic entrant à partir du bloc CIDR de l'équilibreur de charge de réseau.
Pour mettre fin aux demandes à l'adresse IP du client, ajoutez le paramètre suivant dans la section de spécification du fichier manifeste :
externalTrafficPolicy: Local
Pour déléguer des demandes à d'autres noeuds de travail de la grappe, ajoutez le paramètre suivant dans la section de spécification du fichier manifeste :
externalTrafficPolicy: Cluster
Notez que Cluster
est la valeur par défaut du paramètre externalTrafficPolicy
. Si vous n'incluez pas explicitement le paramètre dans la définition du service, la valeur par défaut du paramètre est utilisée.
Notez également que si externalTrafficPolicy
est réglé à Cluster
, les adresses IP du client ne sont pas conservées quelle que soit la valeur de l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
. Les demandes échouent avec une erreur si externalTrafficPolicy
est réglé à Cluster
et que l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
est explicitement réglée à true
ou à false
. Voir Conservation de l'adresse IP du client.
Pour mettre fin aux demandes à l'adresse IP du client, vous devez également avoir configuré les règles de sécurité suivantes :
- Vous devez avoir configuré une règle de sécurité (dans un groupe de sécurité de réseau (recommandé) et/ou une liste de sécurité) pour les noeuds de travail de la grappe afin d'autoriser le trafic entrant à partir du bloc CIDR où les connexions client sont établies, vers tous les ports de noeud (
30000 to 32767
). Si l'application est exposée à Internet, réglez le bloc CIDR Source de la règle de sécurité à 0.0.0.0/0. Vous pouvez également régler le bloc CIDR Source de la règle de sécurité à un bloc CIDR spécifique (par exemple, si les connexions client proviennent d'un sous-réseau spécifique).État Source Protocole/ Port Description Avec état 0.0.0.0/0 ou bloc CIDR du sous-réseau TOUT/30000-32767 Autoriser les noeuds de travail à recevoir des connexions au moyen de l'équilibreur de charge de réseau OCI. -
Vous devez avoir configuré les règles de sécurité de trafic entrant et sortant pour l'équilibreur de charge de réseau, comme décrit dans Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge de réseau.
Par exemple, voici une définition de service Kubernetes pour mettre fin aux demandes à l'adresse IP du client (au lieu d'être mandaté) :
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
externalTrafficPolicy: Local
ports:
- port: 80
selector:
app: nginx
Conservation de l'adresse IP client
Lors du provisionnement d'un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, vous pouvez spécifier si l'adresse IP du client doit être conservée ou non dans les en-têtes des paquets IP.
Vous n'avez la possibilité de conserver les adresses IP de client que lorsque les demandes sont interrompues aux adresses IP de client spécifiées dans les en-têtes de paquet IP. Autrement dit, lorsque le paramètre externalTrafficPolicy
est réglé à Local
. Si externalTrafficPolicy
est réglé à Cluster
, les adresses IP du client ne sont pas conservées. Voir Fin des demandes au niveau du noeud de réception.
Pour empêcher la conservation des adresses IP de client, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :
oci-network-load-balancer.oraclecloud.com/is-preserve-source: "false"
Pour conserver l'adresse IP du client, ajoutez l'annotation suivante dans la section de métadonnées du fichier manifeste :
oci-network-load-balancer.oraclecloud.com/is-preserve-source: "true"
Notez que true
est la valeur par défaut de l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
. Si vous n'incluez pas explicitement l'annotation dans la définition du service, la valeur par défaut de l'annotation est utilisée.
Notez également que si externalTrafficPolicy
est réglé à Cluster
, les adresses IP du client ne sont pas conservées quelle que soit la valeur de l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
. Les demandes échouent avec une erreur si externalTrafficPolicy
est réglé à Cluster
et que l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
est explicitement réglée à true
ou à false
. Par conséquent, n'ajoutez pas l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
si externalTrafficPolicy
est réglé à Cluster
.
Vous pouvez conserver les adresses IP des clients lors de l'utilisation de groupes de noeuds gérés, mais pas lors de l'utilisation de groupes de noeuds virtuels.
Pour conserver l'adresse IP du client, vous devez également avoir configuré les règles de sécurité suivantes :
- Vous devez avoir configuré une règle de sécurité (dans un groupe de sécurité de réseau (recommandé) et/ou une liste de sécurité) pour les noeuds de travail de la grappe afin d'autoriser le trafic entrant à partir du bloc CIDR où les connexions client sont établies, vers tous les ports de noeud (
30000 to 32767
). Si l'application est exposée à Internet, réglez le bloc CIDR Source de la règle de sécurité à 0.0.0.0/0. Vous pouvez également régler le bloc CIDR Source de la règle de sécurité à un bloc CIDR spécifique (par exemple, si les connexions client proviennent d'un sous-réseau spécifique).État Source Protocole/ Port Description Avec état 0.0.0.0/0 ou bloc CIDR du sous-réseau TOUT/30000-32767 Autoriser les noeuds de travail à recevoir des connexions au moyen de l'équilibreur de charge de réseau OCI. -
Vous devez avoir configuré les règles de sécurité de trafic entrant et sortant pour l'équilibreur de charge de réseau, comme décrit dans Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge de réseau.
Par exemple, voici une définition de service Kubernetes qui empêche la conservation de l'adresse IP du client :
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"
oci-network-load-balancer.oraclecloud.com/is-preserve-source: "false"
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- port: 80
selector:
app: nginx
Exposition des applications TCP et UDP
Lorsque Kubernetes Engine provisionne un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, vous pouvez définir le type de trafic accepté par le module d'écoute en spécifiant le protocole sur lequel le module d'écoute accepte les demandes de connexion.
Notez que si vous ne spécifiez pas explicitement un protocole, "TCP" est utilisé par défaut.
Pour spécifier explicitement le protocole du module d'écoute lorsque le moteur Kubernetes provisionne un équilibreur de charge de réseau pour un service Kubernetes de type LoadBalancer, ajoutez le paramètre suivant dans la section de spécification du fichier manifeste :
protocol: <value>
où <value>
est le protocole qui définit le type de trafic accepté par le module d'écoute. Par exemple, "UDP". Les protocoles valides incluent "UDP" et "TCP".
Par exemple :
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
type: LoadBalancer
ports:
- port: 80
protocol: UDP
selector:
app: nginx
Spécification de la politique de jeu dorsal
Lorsque Kubernetes Engine provisionne 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, voir Spécification des politiques de jeu dorsal.
Spécification des options de gestion des listes de sécurité lors du provisionnement d'un équilibreur de charge de réseau OCI
Vous pouvez rencontrer des problèmes, d'évolutivité et autres, si vous utilisez la fonction de gestion des listes de sécurité de Kubernetes dans des déploiements complexes et avec des outils tels que Terraform. C'est pourquoi Oracle déconseille d'utiliser la fonction de gestion des listes de sécurité de Kubernetes dans les environnements de production.
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 cette raison, Oracle recommande d'utiliser des groupes de sécurité de réseau et l'annotation oci.oraclecloud.com/security-rule-management-mode
(voir 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).
Vous pouvez utiliser la fonction de gestion des listes de sécurité pour configurer la façon dont les règles de liste de sécurité sont gérées pour un équilibreur de charge de réseau Oracle Cloud Infrastructure que Kubernetes Engine provisionne pour un service Kubernetes de type LoadBalancer. Cette fonctionnalité est utile si vous démarrez avec Kubernetes, ou pour des déploiements de base.
Pour savoir comment la fonction de gestion des listes de sécurité de Kubernetes gère les listes de sécurité 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/security-list-management-mode: <value>
où <value>
est l'une des valeurs suivantes :
"None"
: (par défaut et recommandé) La gestion des listes de sécurité n'est pas activée. Vous devez 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. De plus, vous devez configurer des règles de sécurité pour autoriser le trafic entrant vers 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)."All"
: Toutes les règles de liste de sécurité requises pour les services d'équilibreur de charge de réseau sont gérées."Frontend"
: Seules les règles de liste de sécurité pour le trafic entrant vers l'équilibreur de charge de réseau sont gérées. Vous devez 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.
Oracle recommande de régler explicitement oci-network-load-balancer.oraclecloud.com/security-list-management-mode
à None
.
Dans les grappes avec des noeuds gérés, si vous ne spécifiez pas explicitement un mode de gestion, la gestion des listes de sécurité n'est pas activée (équivalent à "None"
). 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 que des limites s'appliquent au nombre de règles de trafic entrant et sortant autorisées dans une liste de sécurité (voir Limites de liste de sécurité). Si le nombre de règles de trafic entrant ou sortant dépasse la limite et que <value>
est réglé à "All"
ou "Frontend"
, la création ou la mise à jour de l'équilibreur de charge échoue.
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/security-list-management-mode: "Frontend"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx