Provisionnement des équilibreurs de charge réseau OCI pour les services Kubernetes de type LoadBalancer
Découvrez comment provisionner un équilibreur de charge réseau OCI pour un service Kubernetes de type LoadBalancer à l'aide de Kubernetes Engine (OKE).
Cette section explique comment provisionner un équilibreur de charge réseau OCI pour un service Kubernetes de type LoadBalancer.
Un équilibreur de charge réseau Oracle Cloud Infrastructure est une solution d'équilibrage de charge non proxy qui effectue l'équilibrage de charge direct des charges globales de couche 3 et 4 (TCP/UDP/ICMP) OSI. Il offre une adresse IP virtuelle régionale (VIP) élastiquement évolutive qui peut évoluer en fonction du trafic client sans configuration de bande passante minimale ou maximale. Il offre également les avantages de la haute disponibilité des flux, des adresses IP source et de destination et de la conservation des ports.
Pour plus d'informations sur les équilibreurs de charge réseau Oracle Cloud Infrastructure, reportez-vous à Présentation de Flexible Network Load Balancer.
Le provisionnement d'un équilibreur de charge réseau OCI pour un service Kubernetes de type LoadBalancer vous permet d'effectuer les opérations suivantes :
- Trafic d'équilibrage de charge avec un débit élevé et une faible latence
- préserver les ports et les adresses IP source et de destination.
- gérer le trafic TCP et UDP
Lorsque Kubernetes Engine provisionne un équilibreur de charge 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 réseau ne sont pas créées automatiquement par défaut. Vous devez définir les 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 réseau. Reportez-vous à Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge réseau.
Utilisez les mesures d'équilibreur de charge réseau OCI pour surveiller l'état d'un équilibreur de charge réseau OCI provisionné pour un service Kubernetes de type LoadBalancer (reportez-vous à Mesures d'équilibreur de charge réseau).
Spécification de l'annotation pour un équilibreur de charge réseau OCI
Afin de provisionner un équilibreur de charge réseau pour un service Kubernetes de type LoadBalancer, ajoutez l'annotation suivante dans la section des 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
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 de service, la valeur par défaut de l'annotation est utilisée et un équilibreur de charge (plutôt qu'un équilibreur de charge réseau) est provisionné.
Mettre fin à des demandes sur le noeud destinataire
Lors du provisionnement d'un équilibreur de charge réseau pour un service Kubernetes de type LoadBalancer, vous pouvez indiquer que les demandes prennent fin à l'adresse IP client indiquée dans les en-têtes des paquets IP, plutôt que d'être transmises par proxy à d'autres noeuds de processus actif du cluster.
Par défaut, les demandes sont transmises par proxy à d'autres noeuds de processus actif du cluster.
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 les performances dans les clusters très volumineux contenant des milliers de noeuds de processus actif en éliminant le trafic entre les noeuds de processus actif. Le fait d'indiquer que les demandes se terminent à l'adresse IP du client peut également simplifier l'implémentation 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é réseau (recommandé) et/ou une liste de sécurité) pour les noeuds de processus actif du cluster qui autorisent uniquement le trafic entrant à partir du bloc CIDR de l'équilibreur de charge réseau.
Pour mettre fin aux demandes à l'adresse IP du client, ajoutez le paramètre suivant dans la section spec du fichier manifeste :
externalTrafficPolicy: Local
Pour déléguer des demandes à d'autres noeuds de processus actifs du cluster, ajoutez le paramètre suivant dans la section spec du fichier manifeste :
externalTrafficPolicy: Cluster
Cluster
est la valeur par défaut du paramètre externalTrafficPolicy
. Si vous n'incluez pas explicitement le paramètre dans la définition de service, la valeur par défaut du paramètre est utilisée.
Notez également que si externalTrafficPolicy
est défini sur Cluster
, les adresses IP 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 défini sur Cluster
et que l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
est explicitement définie sur true
ou false
. Reportez-vous à la section Preserving The Client IP Address.
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é réseau (recommandé) et/ou une liste de sécurité) pour les noeuds de processus actif du cluster 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, définissez le bloc CIDR source de la règle de sécurité sur 0.0.0.0/0. Vous pouvez également définir le bloc CIDR source de la règle de sécurité sur un bloc CIDR spécifique (par exemple, si les connexions client proviennent d'un sous-réseau spécifique).Etat Source Protocole/Port de destination Description Avec conservation de statut 0.0.0.0/0 ou CIDR de sous-réseau TOUT/300000-32767 Autoriser les noeuds de processus actif à recevoir des connexions via l'équilibreur de charge réseau OCI. -
Vous devez avoir configuré les règles de sécurité entrantes et sortantes pour l'équilibreur de charge réseau, comme décrit dans Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge réseau.
Par exemple, voici une définition de service Kubernetes pour mettre fin aux demandes à l'adresse IP du client (plutôt que 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 du client
Lors du provisionnement d'un équilibreur de charge réseau pour un service Kubernetes de type LoadBalancer, vous pouvez indiquer si l'adresse IP du client doit être conservée ou non dans les en-têtes des paquets IP.
Vous avez uniquement la possibilité de conserver les adresses IP client lorsque les demandes sont interrompues sur les adresses IP client spécifiées dans les en-têtes de paquets IP. Autrement dit, lorsque le paramètre externalTrafficPolicy
est défini sur Local
. Si externalTrafficPolicy
est défini sur Cluster
, les adresses IP client ne sont pas conservées. Reportez-vous à Terminaison de demandes sur le noeud de réception.
Pour empêcher la conservation des adresses IP client, ajoutez l'annotation suivante dans la section des 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 des métadonnées du fichier manifeste :
oci-network-load-balancer.oraclecloud.com/is-preserve-source: "true"
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 de service, la valeur par défaut de l'annotation est utilisée.
Notez également que si externalTrafficPolicy
est défini sur Cluster
, les adresses IP 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 défini sur Cluster
et que l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
est explicitement définie sur true
ou false
. Par conséquent, n'ajoutez pas l'annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
si externalTrafficPolicy
est défini sur Cluster
.
Vous pouvez conserver les adresses IP client lorsque vous utilisez des pools de noeuds gérés, mais pas lorsque vous utilisez des pools 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é réseau (recommandé) et/ou une liste de sécurité) pour les noeuds de processus actif du cluster 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, définissez le bloc CIDR source de la règle de sécurité sur 0.0.0.0/0. Vous pouvez également définir le bloc CIDR source de la règle de sécurité sur un bloc CIDR spécifique (par exemple, si les connexions client proviennent d'un sous-réseau spécifique).Etat Source Protocole/Port de destination Description Avec conservation de statut 0.0.0.0/0 ou CIDR de sous-réseau TOUT/300000-32767 Autoriser les noeuds de processus actif à recevoir des connexions via l'équilibreur de charge réseau OCI. -
Vous devez avoir configuré les règles de sécurité entrantes et sortantes pour l'équilibreur de charge réseau, comme décrit dans Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge réseau.
Par exemple, voici une définition de service Kubernetes qui empêche la conservation de l'adresse IP 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
Présentation des applications TCP et UDP
Lorsque le moteur Kubernetes provisionne un équilibreur de charge réseau pour un service Kubernetes de type LoadBalancer, vous pouvez définir le type de trafic accepté par le processus d'écoute en indiquant le protocole sur lequel le processus d'écoute accepte les demandes de connexion.
Si vous n'indiquez pas explicitement de protocole, "TCP" est utilisé comme valeur par défaut.
Afin d'indiquer explicitement le protocole de processus d'écoute lorsque Kubernetes Engine provisionne un équilibreur de charge 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 processus 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 stratégie d'ensemble de back-ends
Lorsque le moteur Kubernetes provisionne un équilibreur de charge réseau pour un service Kubernetes de type LoadBalancer, vous pouvez définir une stratégie pour l'ensemble de back-ends afin d'indiquer comment répartir le trafic entrant vers les serveurs back-end.
Pour plus d'informations, reportez-vous à Spécification de stratégies d'ensemble de back-ends.
Spécification des options de gestion des listes de sécurité lors du provisionnement d'un équilibreur de charge réseau OCI
Vous pouvez rencontrer des problèmes, notamment en matière d'évolutivité, si vous utilisez la fonctionnalité de gestion des listes de sécurité Kubernetes dans des déploiements complexes et avec des outils tels que Terraform. Pour ces raisons, Oracle ne recommande pas d'utiliser la fonctionnalité de gestion des listes de sécurité 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 en phase d'abandon dans une prochaine version. Pour cette raison, Oracle recommande d'utiliser des groupes de sécurité réseau et l'annotation oci.oraclecloud.com/security-rule-management-mode
(reportez-vous à Spécification des options de gestion des règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge réseau).
Vous pouvez utiliser la fonctionnalité de gestion des listes de sécurité pour configurer le mode de gestion des règles de liste de sécurité pour un équilibreur de charge réseau Oracle Cloud Infrastructure provisionné par Kubernetes Engine pour un service Kubernetes de type LoadBalancer. Cette fonctionnalité est utile si vous découvrez Kubernetes ou pour les déploiements de base.
Afin d'indiquer comment la fonctionnalité de gestion des listes de sécurité Kubernetes gère les listes de sécurité lorsque Kubernetes Engine provisionne un équilibreur de charge réseau pour un service Kubernetes de type LoadBalancer, ajoutez l'annotation suivante dans la section des métadonnées du fichier manifeste :
oci-network-load-balancer.oraclecloud.com/security-list-management-mode: <value>
où <value>
prend l'une des valeurs suivantes :
"None"
: (par défaut et recommandé) aucune gestion des listes de sécurité n'est activée. Vous devez configurer une règle de sécurité qui autorise le trafic entrant vers les ports appropriés pour les plages de ports de noeud, le port d'état du proxy Kube et les plages 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 réseau (reportez-vous à Règles de sécurité pour les équilibreurs de charge et les équilibreurs de charge réseau)."All"
: toutes les règles de liste de sécurité requises pour les services d'équilibreur de charge réseau sont gérées."Frontend"
: seules les règles de liste de sécurité pour le trafic entrant vers les services d'équilibreur de charge réseau sont gérées. Vous devez configurer une règle de sécurité qui autorise le trafic entrant vers les ports appropriés pour les plages de ports de noeud, le port d'état du proxy Kube et les plages de ports de vérification de l'état.
Oracle recommande de définir explicitement oci-network-load-balancer.oraclecloud.com/security-list-management-mode
sur None
.
Dans les clusters 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 clusters avec noeuds virtuels, la gestion des listes de sécurité n'est jamais activée et vous devez toujours configurer manuellement les règles de sécurité (équivalent à "None"
).
Le nombre de règles entrantes et sortantes autorisées dans une liste de sécurité est limité (reportez-vous à Limites de liste de sécurité). Si le nombre de règles entrantes ou sortantes dépasse la limite et que <value>
est défini sur "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