Exposition des applications à l'aide d'équilibreurs de charge pour VPC

Virtual Private Cloud

Configurez un équilibreur de charge pour VPC afin d'exposer votre application sur le réseau public ou privé.

Pour exposer une application dans un cluster de VPC, vous pouvez créer un équilibreur de charge d'application de niveau 7 pour VPC. Vous pouvez éventuellement créer un Network Load Balancer for VPCde couche 4.

Types d'équilibreur de charge

Le tableau ci-après décrit les caractéristiques de base de chaque option d'équilibrage de charge.

Options d'équilibrage de charge pour les clusters de VPC
Caractéristique Application Load Balancer for VPC Network Load Balancer for VPC
Version Red Hat OpenShift prise en charge Toutes les versions Toutes les versions
Couche transport Couche 7 Couche 4
Types d'équilibreur de charge Public et privé Public et privé
Protocoles pris en charge TCP TCP, UDP
Accès à une application Nom d'hôte Nom d'hôte et adresse IP statique
Conservation de l'adresse IP source Configurable* Oui
Performances améliorées avec DSR (Direct Server Return) Non Oui
Routage multizone Oui Oui
Plages de ports Non Public uniquement
Groupes de sécurité Oui Oui

Network Load Balancer for VPC

Dans les clusters VPC, configurez un répartiteur de charge VPC ( layer-4, VPC NLB) Network Load Balancer for VPC dans chaque zone de votre cluster afin qu'il serve de point d'entrée externe pour les requêtes entrantes destinées à une application.

Les équilibreurs de charge de réseau VPC offrent plusieurs avantages (par exemple, ils offrent un débit supérieur et de meilleures performances en exploitant DSR (Direct Server Return). Avec DSR, le noeud worker peut envoyer les paquets de réponses des applications directement à l'adresse IP du client et contourner l'équilibreur de charge de réseau VPC, pour diminuer le volume de trafic à traiter par l'équilibreur de charge de réseau VPC. De plus, l'équilibreur de charge de réseau VPC prend en charge la conservation des adresses IP source sur toutes les demandes client par défaut.

  • Les noms d'équilibreur de charge de réseau VPC standard ont un format kube-<cluster_ID>-<kubernetes_lb_service_UID>. Pour afficher votre ID de cluster, exécutez ibmcloud oc cluster get --cluster <cluster_name>. Pour voir l'ID utilisateur du service Kubernetes LoadBalancer, exécutez la commande oc get svc myloadbalancer -o yaml et recherchez la zone metadata.uid dans la sortie. Les tirets (-) sont supprimés de l’identifiant unique (UID) du service LoadBalancer Kubernetes dans le nom du VPC NLB.

  • Les noms d'équilibreur de charge de réseau VPC persistant ont le format kube-<cluster_ID>-<kubernetes_lb_service_UID>. Pour afficher votre ID de cluster, exécutez ibmcloud oc cluster get --cluster <cluster_name>. Pour voir l'ID utilisateur du service Kubernetes LoadBalancer, exécutez la commande oc get svc myloadbalancer -o yaml et recherchez la zone metadata.uid dans la sortie. Les tirets (-) sont supprimés de l’identifiant unique (UID) du service LoadBalancer Kubernetes dans le nom du VPC NLB.

  • Lorsque vous créez un service Kubernetes LoadBalancer pour une application dans votre cluster et incluez l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb", un équilibreur de charge de réseau VPC est créé dans votre VPC en dehors de votre cluster. L'équilibreur de charge de réseau VPC achemine les demandes à votre application via les ports de noeud privés qui sont automatiquement ouverts sur vos noeuds worker.

  • Si vous créez un LoadBalancer service Kubernetes public, vous pouvez accéder à votre application depuis Internet via l’adresse IP publique externe attribuée par le VPC NLB au service LoadBalancer Kubernetes. Même si vos noeuds worker sont connectés uniquement à un sous-réseau VPC privé, l'équilibreur de charge de réseau VPC peut recevoir et acheminer les demandes publiques au service qui expose votre application. Notez qu'aucune passerelle publique n'est requise sur votre sous-réseau VPC pour autoriser les demandes publiques adressées à votre équilibreur de charge de réseau VPC. Toutefois, si votre application doit accéder à une URL publique, vous devez connecter des passerelles publiques aux sous-réseaux VPC auxquels vos noeuds worker sont connectés.

  • Si vous créez un service LoadBalancer Kubernetes privé, votre application n'est accessible qu'aux systèmes connectés à vos sous-réseaux privés au sein de la même région et du même VPC. Si vous êtes connecté à votre réseau VPC privé, vous pouvez accéder à votre application par l'intermédiaire de l'adresse IP privée externe affectée par l'équilibreur de charge de réseau VPC au service Kubernetes LoadBalancer.

Le diagramme suivant illustre la manière dont un utilisateur accède à une application via Internet par l'intermédiaire de l'équilibreur de charge de réseau VPC.

Équilibrage de

charge pour un cluster via le VPC NLB.
Équilibrage de charge VPC pour un cluster via le VPC NLB

  1. Une demande adressée à votre application utilise l'adresse IP externe affectée au service Kubernetes LoadBalancer par l'équilibreur de charge de réseau VPC.
  2. La demande est automatiquement transmise par l'équilibreur de charge de réseau VPC à l'un des ports de noeud du noeud worker, puis à l'adresse IP privée du pod d'application.
  3. Si des instances d'application sont déployées sur plusieurs nœuds de travail au sein du cluster, le VPC NLB achemine les requêtes entre les pods d'application situés sur différents nœuds de travail, dans toutes les zones du cluster.

Application Load Balancer for VPC

Configurez un équilibreur de charge d'application pour VPC multizone de couche 7 qui servira de point d'entrée externe pour les demandes entrantes vers une application dans votre cluster.

Ne confondez pas les équilibreurs de charge d'application pour VPC avec les équilibreurs de charge d'application Ingress d'Red Hat OpenShift on IBM Cloud. Les équilibreurs de charge d'application pour VPC sont exécutés en dehors de votre cluster dans votre VPC et sont configurés par les services Kubernetes LoadBalancer que vous créez. Les équilibreurs de charge d'application Ingress sont des contrôleurs Ingress exécutés sur des noeuds worker dans votre cluster.

  • Les noms des ALB VPC respectent le format kube-<cluster_ID>-<kubernetes_lb_service_UID>. Pour afficher votre ID de cluster, exécutez ibmcloud oc cluster get --cluster <cluster_name>. Pour voir l'ID utilisateur du service Kubernetes LoadBalancer, exécutez la commande oc get svc myloadbalancer -o yaml et recherchez la zone metadata.uid dans la sortie. Les tirets (-) sont supprimés de l'identifiant unique (UID) du service LoadBalancer Kubernetes dans le nom de l'ALB VPC.

  • Par défaut, lorsque vous créez un service Kubernetes LoadBalancer pour une application de votre cluster, un équilibreur de charge d'application pour VPC est créé dans votre VPC en dehors de votre cluster. L'équilibreur de charge d'application VPC achemine les demandes à votre application via les ports de noeud privés qui sont automatiquement ouverts sur vos noeuds worker.

  • Si vous créez un service LoadBalancer Kubernetes public, vous pouvez accéder à votre application depuis l'internet via le nom d'hôte attribué par l'ALB de VPC au service Kubernetes LoadBalancer au format 1234abcd-<region>.lb.appdomain.cloud. Même si vos noeuds worker sont connectés uniquement à un sous-réseau VPC privé, l'équilibreur de charge d'application VPC peut recevoir et acheminer les demandes publiques au service qui expose votre application. Notez qu'aucune passerelle publique n'est requise sur votre sous-réseau VPC pour autoriser les demandes publiques adressées à votre équilibreur de charge d'application VPC. Toutefois, si votre application doit accéder à une URL publique, vous devez connecter des passerelles publiques aux sous-réseaux VPC auxquels vos noeuds worker sont connectés.

  • Si vous créez un service LoadBalancer Kubernetes privé, votre application n'est accessible qu'aux systèmes connectés à vos sous-réseaux privés au sein de la même région et du même VPC. Si vous êtes connecté à votre réseau VPC privé, vous pouvez accéder à votre application via le nom d'hôte affecté par le VPC ALB au service Kubernetes LoadBalancer au format 1234abcd-<region>.lb.appdomain.cloud.

Le diagramme suivant illustre la manière dont un utilisateur accède à une application via Internet par l'intermédiaire de l'équilibreur de charge d'application VPC.

Équilibrage de

charge pour un cluster via le VPC ALB.
Équilibrage de charge pour un cluster via le VPC ALB

  1. Une demande à votre application utilise le nom d'hôte affecté au service Kubernetes LoadBalancer par l'ALB de VPC, tel que 1234abcd-<region>.lb.appdomain.cloud.
  2. La demande est automatiquement transmise par l'équilibreur de charge d'application VPC à l'un des ports de noeud du noeud worker, puis à l'adresse IP privée du pod d'application.
  3. Si des instances d'application sont déployées sur plusieurs noeuds worker dans le cluster, l'équilibreur de charge achemine les demandes entre les pods d'application sur différents noeuds worker. De plus, si vous disposez d'un cluster multizone, l'équilibreur de charge d'application VPC achemine les demandes vers les noeuds worker sur tous les sous-réseaux et zones de votre cluster.

Configuration d'un équilibreur de charge de réseau pour VPC

Rendez votre application accessible au public ou au réseau privé en configurant un service LoadBalancer Kubernetes public ou privé dans chaque zone de votre cluster VPC. Vous pouvez ensuite enregistrer l'équilibreur de charge de réseau VPC avec un enregistrement DNS et un certificat TLS. Les NLB VPC prennent en charge les types de protocole TCP et UDP.

Configuration d'un équilibreur de charge de réseau VPC public

Exposez votre application au trafic réseau public en configurant un service Kubernetes LoadBalancer dans chaque zone de votre cluster. Lorsque vous créez le service Kubernetes LoadBalancer, un équilibreur de charge de réseau pour VPC public qui achemine les demandes vers votre application est automatiquement créé dans votre VPC en dehors de votre cluster.

  1. Déployez votre application sur le cluster. Prenez soin d'ajouter un libellé à votre déploiement dans la section "metadata" de votre fichier de configuration de déploiement. Ce libellé personnalisé identifie tous les pods dans lesquels s'exécute votre application afin de pouvoir les inclure dans l'équilibrage de charge.

  2. Créez un fichier YAML de configuration pour votre service Kubernetes LoadBalancer. Nommez le service au format <app_name>-vpc-nlb-<VPC_zone>.

    apiVersion: v1
    kind: Service
    metadata:
      name: <app_name>-vpc-nlb-<VPC_zone>
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "public"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector: "<key>=<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet1_ID,subnet2_ID>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-zone: "<zone>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp: "<tcp_port>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol: "<protocol>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port: "<port>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path: "<url_path>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group: "<security-group>"
    spec:
      type: LoadBalancer
      selector:
        <selector_key>: <selector_value>
      ports:
       - name: http
         protocol: TCP
         port: 8080
         targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
       - name: https
         protocol: TCP
         port: 443
         targetPort: 443 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      externalTrafficPolicy: Local # Specify Local or Cluster.
    
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
    Facultatif. Incluez un nom unique pour rendre votre équilibreur de charge VPC persistant. Les équilibreurs de charge VPC persistants ne sont pas supprimés lorsque le cluster auquel ils appartiennent est supprimé. Pour plus d'informations, voir Persistent VPC load balancers. Cette annotation ne peut être définie que lors de la création de l'équilibreur de charge. Il ne peut pas être utilisé dans une opération de mise à jour.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb"
    Obligatoire : Annotation pour créer un équilibreur de charge de réseau VPC. Cette annotation ne peut être définie que lors de la création de l'équilibreur de charge. Il ne peut pas être utilisé dans une opération de mise à jour.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type
    Facultatif : Annotation utilisée pour spécifier un service qui accepte des demandes publiques. Si vous n'incluez pas cette annotation, un NLB de VPC public est créé. Cette annotation ne peut être définie que lors de la création de l'équilibreur de charge. Il ne peut pas être utilisé dans une opération de mise à jour.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector
    Facultatif : Annotation utilisée pour spécifier un sélecteur de libellé de noeud worker. Pour identifier les noeuds worker qui reçoivent du trafic, vous pouvez sélectionner l'une des clés de sélecteur de libellé prises en charge. Vous ne pouvez inclure qu'un seul sélecteur de libellé dans l'annotation et ce sélecteur doit être spécifié au format "key=value". Si cette annotation n'est pas spécifiée, tous les noeuds worker qui se trouvent dans la même zone que l'équilibreur de charge de réseau VPC sont configurés pour recevoir le trafic de l'équilibreur de charge de réseau VPC. Si elle est spécifiée, cette annotation a priorité sur l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-zone et tous les libellés dedicated: edge des noeuds worker sont ignorés. Pour limiter le trafic à une zone spécifique, vous pouvez utiliser cette annotation pour spécifier des noeuds worker dans cette zone.
    Les clés suivantes sont autorisées. - ibm-cloud.kubernetes.io/internal-ip - ibm-cloud.kubernetes.io/machine-type - ibm-cloud.kubernetes.io/os - ibm-cloud.kubernetes.io/region - ibm-cloud.kubernetes.io/subnet-id - ibm-cloud.kubernetes.io/worker-pool-id - ibm-cloud.kubernetes.io/worker-pool-name - ibm-cloud.kubernetes.io/zone - kubernetes.io/arch - kubernetes.io/hostname - kubernetes.io/os - node.kubernetes.io/instance-type - topology.kubernetes.io/region - topology.kubernetes.io/zone
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets
    Facultatif: annotation permettant de spécifier un ou plusieurs sous-réseaux dans une zone où le VPC NLB est déployé. Les valeurs peuvent être spécifiées en tant qu'ID de sous-réseau VPC, noms de sous-réseau VPC ou CIDR de sous-réseau VPC. Si elle est spécifiée, cette annotation a priorité sur l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-zone. Vous pouvez spécifier un sous-réseau différent dans le même VPC que les sous-réseaux auxquels votre cluster est connecté. Dans ce cas, même si l'équilibreur de charge de réseau VPC est déployé sur un autre sous-réseau du même VPC, il peut tout de même router le trafic vers vos noeuds worker sur les sous-réseaux du cluster de la même zone. Pour afficher les sous-réseaux de tous les groupes de ressources, exécutez ibmcloud oc subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone>.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-zone
    Facultatif: annotation permettant de spécifier la zone VPC à laquelle votre cluster est associé. L'équilibreur de charge de réseau VPC est déployé sur le sous-réseau de cette zone auquel vos noeuds worker sont connectés. L'équilibreur de charge de réseau VPC étant à zone unique, seuls les noeuds worker de votre cluster qui se trouvent dans cette zone sont configurés pour recevoir du trafic.
    Pour afficher les zones, exécutez ibmcloud oc zone ls --provider vpc-gen2. Si vous modifiez ultérieurement cette annotation dans une autre zone, le NLB de VPC n'est pas déplacé vers la nouvelle zone.
    Notez que si vous ne spécifiez pas cette annotation ou l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets, le VPC NLB est déployé dans la zone la plus optimale. Par exemple, l'équilibreur de charge de réseau VPC n'est déployé que sur les zones dans lesquelles il existe des noeuds worker à l'état Ready.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp
    Obligatoire si vous spécifiez le protocole UDP et définissez externalTrafficPolicy sur Cluster. Sinon, cette annotation est facultative.
    Spécifiez un port d’ TCP à utiliser pour les contrôles d’intégrité d’ TCP dans un équilibreur de charge UDP. Requis pour les équilibreurs de charge d' UDP s dont le paramètre est défini externalTrafficPolicy sur Cluster. Pour plus d'informations sur la configuration des valeurs de port, consultez la section Configuration des contrôles d'intégrité d' TCP pour les équilibreurs de charge d' UDP.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
    Facultatif: cette annotation définit le protocole de diagnostic d'intégrité sur la ressource d'équilibreur de charge VPC associée au service d'équilibreur de charge Kubernetes. Normalement, le protocole de diagnostic d'intégrité de l'équilibreur de charge VPC est déterminé par la valeur du paramètre externalTrafficPolicy dans la spécification de service d'équilibreur de charge Kubernetes. Cette annotation remplace cette logique. Cette annotation ne modifie pas le comportement de Kuberneteset de kube-proxy en particulier en ce qui concerne les différents paramètres de externalTrafficPolicy.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
    Facultatif. Le port TCP est utilisé pour les contrôles d'intégrité. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est également spécifié.
    • Si le port TCP spécifié se trouve en dehors de la plage de ports des nœuds Kubernetes (30 000-32 767), le groupe de sécurité VPC appliqué aux nœuds de travail du cluster doit être modifié afin d’autoriser le trafic entrant sur ce port.
    • Si cette annotation est appliquée à un service d'équilibrage de charge Kubernetes associé à un VPC ALB, les règles sortantes du groupe de sécurité attribué au VPC ALB doivent être modifiées afin d’autoriser le trafic sortant vers le port TCP spécifié.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
    Facultatif. Chemin d'accès à l' URL s relatives aux contrôles d'intégrité pour HTTP et HTTPS. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est défini sur http ou https.
    • Le chemin d'accès URL doit respecter le format d'une cible de requête au format d'origine.
    • Si cette annotation n'est pas spécifiée et que l'annotation ibm-load-balancer-cloud-provider-vpc-health-check-protocol est définie sur http ou https, la valeur par défaut / est appliquée.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
    Facultatif. Nombre de secondes à attendre entre les tentatives de diagnostic d'intégrité. Par défaut, cette valeur est définie sur 5, avec un minimum de 2 et un maximum de 60. Cette valeur doit être supérieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-timeout, qui est définie sur 2 par défaut.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
    Facultatif. Nombre de secondes d'attente d'une réponse à un diagnostic d'intégrité. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 59. Cette valeur doit être inférieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-delay, qui est définie sur 5 par défaut.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
    Facultatif. Nombre maximal de nouvelles tentatives de diagnostic d'intégrité pour l'équilibreur de charge VPC. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 10.
    selector
    Facultatif. La clé (<selector_key>) et la valeur (<selector_value>) que vous avez utilisées dans la section spec.template.metadata.labels du fichier YAML de déploiement de votre application. Ce libellé personnalisé identifie tous les pods dans lesquels s'exécute votre application afin de pouvoir les inclure dans l'équilibrage de charge.
    port
    Facultatif. Port sur lequel le service est à l'écoute.
    targetPort
    Facultatif. Port vers lequel le service achemine le trafic. L'application s'exécutant dans le pod doit être à l'écoute du trafic entrant de type TCP sur ce port cible. Le port cible est souvent défini de manière statique dans l'image qui s'exécute dans le pod d'application. Le port cible configuré dans le pod est différent du port de noeud du service et peut également être différent du port externe configuré sur l'équilibreur de charge VPC.
    externalTrafficPolicy
    Obligatoire. Spécifier Local ou Cluster.
    Définissez cette option sur Local pour conserver l'adresse IP source des requêtes des clients adressées à vos applications. Ce paramètre empêche le trafic entrant d'être acheminé vers un autre noeud. Cette option configure également les contrôles d'intégrité HTTP.
    Si Cluster est défini, le DSR n'est mis en œuvre qu'à partir du nœud de travail vers lequel le VPC NLB transfère initialement la requête entrante. Une fois la demande entrante arrivée, elle est envoyée à un noeud worker qui contient le pod d'application, qui peut se trouver dans une autre zone. La réponse du pod d'application est envoyée au noeud worker d'origine et ce dernier utilise DSR pour envoyer la réponse directement au client, en contournant l'équilibreur de charge de réseau VPC. Cette option configure également les contrôles d'intégrité TCP. Pour les équilibreurs de charge d' UDP, le service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp est obligatoire si vous choisissez l'option Cluster. Pour plus d'informations, consultez la section Configuration des contrôles d'intégrité d' TCP pour les équilibreurs de charge UDP.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota
    Optionnel. Le nombre de nœuds de travail par zone vers lesquels l'équilibreur de charge se dirige. La valeur par défaut est de 8. Pour un cluster avec des nœuds de travail dans trois zones, cela signifie que l'équilibreur de charge achemine les données vers 24 nœuds de travail au total. Le nombre total de nœuds de travail dans toutes les zones vers lesquelles l'équilibreur de charge se dirige ne peut pas dépasser 50. Si la grappe compte moins de 50 nœuds de travail dans toutes les zones, spécifiez 0 pour router vers tous les nœuds de travail d'une zone.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group
    Optionnel. Un groupe de sécurité géré par le client à ajouter à l'équilibreur de charge VPC. Si vous ne souhaitez pas utiliser le groupe de sécurité géré par IBM, indiquez un groupe de sécurité que vous possédez et gérez. Cette option supprime le groupe de sécurité géré par IBM et le remplace par le groupe de sécurité que vous spécifiez. La suppression de l'annotation d'un équilibreur de charge existant remplace le groupe de sécurité que vous avez ajouté par le groupe de sécurité géré par IBM. Vous pouvez ajouter ou supprimer cette annotation à tout moment. Vous êtes responsable de la gestion de votre groupe de sécurité et de sa mise à jour.
  3. Créez le service Kubernetes LoadBalancer dans votre cluster.

    oc apply -f <filename>.yaml -n <namespace>
    
  4. Vérifiez que le service Kubernetes LoadBalancer a bien été créé dans votre cluster. Lorsque le service est créé, la zone LoadBalancer Ingress est renseignée avec une adresse IP externe affectée par l'équilibreur de charge de réseau VPC.

La mise à disposition dans votre VPC de l'équilibreur de charge de réseau VPC dure quelques minutes. L'adresse IP externe de votre service Kubernetes LoadBalancer peut être à l'état pending jusqu'à ce que l'équilibreur de charge de réseau VPC ait été entièrement mis à disposition.

```sh {: pre}
oc describe svc myloadbalancer -n <namespace>
```
Exemple de sortie de l'interface de ligne de commande pour un service `LoadBalancer` public :
```sh {: screen}
NAME:                     myvpcnlb
Namespace:                default
Labels:                   <none>
Annotations:              service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb
Selector:                 app=echo-server
Type:                     LoadBalancer
IP:                       172.21.204.12
LoadBalancer Ingress:     169.XXX.XXX.XXX
Port:                     tcp-80  80/TCP
TargetPort:               8080/TCP
NodePort:                 tcp-80  32022/TCP
Endpoints:                172.17.17.133:8080,172.17.22.68:8080,172.17.34.18:8080 + 3 more...
Session Affinity:         None
External Traffic Policy:  Local
HealthCheck NodePort:     30882
Events:
    Type     Reason                           Age                  From                Message
----     ------                           ----                 ----                -------
Warning  SyncLoadBalancerFailed           13m (x5 over 15m)    service-controller  Error syncing load balancer: failed to ensure load balancer: kube-bqcssbbd0bsui62odcdg-2d93b07decf641d2ad3f9c2985122ec1 for service default/myvpcnlb is busy: offline/create_pending
Normal   EnsuringLoadBalancer             9m27s (x7 over 15m)  service-controller  Ensuring load balancer
Normal   EnsuredLoadBalancer              9m20s                service-controller  Ensured load balancer
Normal   CloudVPCLoadBalancerNormalEvent  8m17s                ibm-cloud-provider  Event on cloud load balancer myvpcnlb for service default/myvpcnlb with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
```
  1. Vérifiez que l'équilibreur de charge de réseau VPC a bien été créé dans votre VPC. Dans la sortie, vérifiez que pour l'équilibreur de charge de réseau VPC, la zone Operating Status est définie sur online et la zone Provision Status, sur active.

    Ne renommez pas les équilibreurs de charge de réseau VPC créés automatiquement pour les services LoadBalancer. Si vous renommez un équilibreur de charge de réseau VPC, Red Hat OpenShift on IBM Cloud crée automatiquement un autre équilibreur de charge de réseau VPC pour le service LoadBalancer.

    ibmcloud is load-balancers
    

    Dans l'exemple de sortie de l'interface de ligne de commande suivant, l'équilibreur de charge de réseau VPC nommé kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96e est créé pour le service Kubernetes LoadBalancer :

    ID                                     Name                                                         Created          Host Name                                  Is Public   Listeners                               Operating Status   Pools                                   Private IPs              Provision Status   Public IPs                    Subnets                                Resource Group
    06496f64-a689-4693-ba23-320959b7b677   kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96e   8 minutes ago    1234abcd-us-south.lb.appdomain.cloud       yes         95482dcf-6b9b-4c6a-be54-04d3c46cf017    online             717f2122-5431-403c-b21d-630a12fc3a5a    10.241.0.7               active             169.63.99.184                 c6540331-1c1c-40f4-9c35-aa42a98fe0d9   00809211b934565df546a95f86160f62
    
  2. Accédez à l'adresse IP du service Kubernetes LoadBalancer que vous avez trouvé à l'étape 4 et votre port d'application au format <external_IP>:<app_port>.

  3. Facultatif : répétez ces étapes pour déployer un équilibreur de charge de réseau VPC public dans chaque zone dans laquelle vous souhaitez exposer votre application. Vous pouvez ensuite enregistrer les adresses IP externes de l'équilibreur de charge de réseau VPC dans chaque zone avec un sous-domaine DNS.

Ne supprimez pas les sous-réseaux que vous avez associés à votre cluster lors de la création du cluster ou lorsque vous ajoutez des noeuds worker dans une zone. Si vous supprimez un sous-réseau VPC que votre cluster a utilisé, des problèmes peuvent se produire au niveau des NLB VPC qui utilisent des adresses IP à partir du sous-réseau et il se peut que vous ne puissiez pas créer de nouveaux équilibreurs de charge.

Configuration d'un équilibreur de charge de réseau à l'aide d'une plage de ports

Les plages de ports peuvent être utilisées dans les équilibreurs de charge de réseau publics lorsqu'il est nécessaire d'héberger un service à partir d'un nom d'hôte unique comportant plusieurs applications de back end, chacune étant à l'écoute sur un numéro de port distinct. Pour utiliser des plages de ports dans votre cluster Kubernetes, une configuration manuelle doit être effectuée. Tout d'abord, l'option ibm-load-balancer-cloud-provider-vpc-port-range doit être définie. Il peut inclure une ou plusieurs plages, délimitées chacune par une virgule. La valeur spec.ports.port doit également être définie sur la valeur minimale de la plage de ports.

Dans l'exemple suivant, une plage de ports 30000-30010 est utilisée.

Les services Nodeport doivent être créés manuellement pour chaque déploiement dans lequel le service NLB transmet la demande. Le numéro de port de chacun de ces services Nodeport doit être compris dans la plage de ports configurée dans le service NLB.

Dans l'exemple de diagramme suivant, un service Nodeport avec le port 30000 est créé pour le déploiement 1 tandis qu'un service Nodeport avec le port 30001 est créé pour le déploiement 2.

L'utilisateur effectue une demande sur le port 30001 de l'équilibreur de charge de réseau contenant la plage de ports. Cette demande est envoyée au service NLB VPC qui dirige la demande vers le service Nodeport dans le cluster qui est également à l'écoute sur le port 30001, qui, dans ce cas, est destiné au déploiement 2. Le service Nodeport dirige ensuite la demande vers le port cible des pods sélectionnés du déploiement 2.

VPC NLB utilisant une plage de ports.
VPC NLB avec plage
de ports

Créez un équilibreur de charge de réseau qui utilise une plage de ports à l'aide de l'exemple suivant. Le sélecteur et les pods de back end doivent être associés au service d'équilibreur de charge de plage de ports afin que les diagnostics d'intégrité renvoient des résultats et que les données soient distribuées aux ports de la plage de ports. Pour utiliser la plage de ports, vous devez créer des services NodePort supplémentaires dont les valeurs de port sont comprises dans la plage définie par le service d'équilibreur de charge.

  1. Sauvegardez l'exemple de configuration LoadBalancer suivant dans un fichier appelé loadbalancer.yaml.

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-port-range: 30000-30010
      name: nlb-port-range
    spec:
      externalTrafficPolicy: Cluster
      ports:
      - port: 30000 # Must match min from the port range
        protocol: TCP
        nodePort: 30011 # Can be port in range or not
        targetPort: 8080
      selector:
        app: echo-server  # Must be valid for health checks to work
      type: LoadBalancer
    
  2. Créez le service.

    oc apply -f loadbalancer.yaml
    
  3. Créez un service NodePort avec des valeurs de port qui se trouvent dans la plage de ports spécifiée dans le LoadBalancer que vous avez créé précédemment.

    apiVersion: v1
    kind: Service
    metadata:
      name: echo-server-node-port
    spec:
      ports:
      - port: 80
        protocol: TCP # The protocol of the port range
        nodePort: 30003 # Node port in the port range
        targetPort: 8080
      selector:
        app: echo-server
      type: NodePort
    
  4. Créer le service NodePort.

    oc apply -f nodeport.yaml
    
  5. Permet d'accéder à un port compris dans la plage fournie par l'équilibreur de charge de réseau.

    curl https://<public ip assigned to NLB>:30003
    
    • 30003 = est un port de noeud dans la plage qui répond à la demande
    • Les autres ports de la plage ne répondent pas sauf si des services de port de noeud supplémentaires sont créés.

Configuration d'un équilibreur de charge de réseau VPC privé

Exposez votre application au trafic réseau privé en configurant un service Kubernetes LoadBalancer dans chaque zone de votre cluster. Lorsque vous créez le service Kubernetes LoadBalancer, un équilibreur de charge de réseau privé pour VPC qui achemine les demandes vers votre application est automatiquement créé dans votre VPC en dehors de votre cluster.

Avant de commencer

Pour permettre à votre application de recevoir des demandes de réseau privé,

  1. Créez un sous-réseau VPC dédié à votre équilibreur de charge de réseau VPC. Ce sous-réseau doit exister dans le même VPC et dans le même emplacement que votre cluster, mais il ne peut pas être connecté à votre cluster ou à vos nœuds worker.

    1. Dans le tableau de bord des sous-réseaux VPC, cliquez sur Nouveau sous-réseau.
    2. Entrez un nom pour votre sous-réseau.
    3. Sélectionnez l'emplacement de votre cluster et la zone où vous souhaitez créer l'équilibreur de charge de réseau VPC.
    4. Sélectionnez le nom du VPC où se trouve le cluster.
    5. Indiquez le nombre d'adresses IP à créer. Etant donné que ce sous-réseau est dédié à l'équilibreur de charge de réseau VPC, vous pouvez choisir une taille plus petite, par exemple 16. Vous ne pouvez pas modifier le nombre d'IP qu'un sous-réseau VPC a plus tard. Si vous entrez une plage d'adresses IP, n'utilisez pas les plages réservées suivantes : 172.16.0.0/16, 172.18.0.0/16, 172.19.0.0/16et 172.20.0.0/16.
    6. Cliquez sur Créer un sous-réseau. Une fois le sous-réseau mis à disposition, notez son ID.
  2. Si le client qui doit se connecter à votre application via l'équilibreur de charge de réseau VPC se trouve en dehors du VPC et de la zone où vous avez créé le sous-réseau VPC dédié, vous devez créer une table de routage Ingress personnalisée. Les équilibreurs de charge de réseau VPC privés peuvent ajouter des règles à la table de routage personnalisée afin de garantir la disponibilité des services pour certains incidents. Pour plus d'informations, voir la table dans les sections Limitations connues et A propos des tables de routage et des routes.

    1. Dans le tableau de bord des tables de routage VPC, cliquez sur Créer.
    2. Entrez un nom pour votre table de routage.
    3. Sélectionnez l'emplacement et la zone où vous avez créé le sous-réseau dédié.
    4. Sélectionnez le nom du VPC où se trouve votre sous-réseau.
    5. Pour Type de trafic, sélectionnez Ingress.
    6. Selon l'endroit à partir duquel le client accède à votre application, choisissez une source de trafic. Pour plus d'informations sur la configuration des connexions à votre réseau privé VPC, voir la documentation relative au choix du VPN IBM Cloud VPC, de Transit Gateway ou de Direct Link pour la connectivité VPC.
      • Réseau sur site : Direct link
      • Autre infrastructure VPC ou classique : Transit Gateway
      • Autre zone dans le même VPC : VPC zone
  3. Déployez votre application sur le cluster. Prenez soin d'ajouter un libellé à votre déploiement dans la section "metadata" de votre fichier de configuration de déploiement. Ce libellé personnalisé identifie tous les pods dans lesquels s'exécute votre application afin de pouvoir les inclure dans l'équilibrage de charge.

  4. Créez un fichier YAML de configuration pour votre service Kubernetes LoadBalancer. Nommez le service au format <app_name>-vpc-nlb-<VPC_zone>.

    apiVersion: v1
    kind: Service
    metadata:
      name: <app_name>-vpc-nlb-<VPC_zone>
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet_ID>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector: "<key>=<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp: "<tcp_port"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol: "<protocol>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port: "<port>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path: "<url_path>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group: "<security-group>"
    spec:
      type: LoadBalancer
      selector:
        <selector_key>: <selector_value>
      ports:
       - name: http
         protocol: TCP
         port: 8080
         targetPort: 8080
         targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
       - name: https
         protocol: TCP
         port: 443
         targetPort: 443 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      externalTrafficPolicy: Local # Specify Local or Cluster.
    
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
    Facultatif. Incluez un nom unique pour rendre votre équilibreur de charge VPC persistant. Les équilibreurs de charge VPC persistants ne sont pas supprimés lorsque le cluster auquel ils appartiennent est supprimé. Pour plus d'informations, voir Persistent VPC load balancers.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "nlb"
    Obligatoire : Annotation pour créer un équilibreur de charge de réseau VPC.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private"
    Obligatoire : Annotation utilisée pour spécifier un service qui accepte des demandes privées.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets
    Obligatoire : Annotation permettant de spécifier le sous-réseau dédié sur lequel l'équilibreur de charge de réseau VPC est déployé. La valeur peut être spécifiée en tant qu'ID de sous-réseau VPC, nom de sous-réseau VPC ou CIDR de sous-réseau VPC. Vous ne devez spécifier qu'un seul sous-réseau. Le sous-réseau doit figurer dans le même VPC que votre cluster et dans une zone où se trouvent des noeuds worker pour votre cluster, mais aucun noeud worker ne peut être associé à ce sous-réseau. Les noeuds worker qui se trouvent dans la même zone que ce sous-réseau sont configurés pour recevoir le trafic de l'équilibreur de charge de réseau VPC. Pour afficher les sous-réseaux dans tous les groupes de ressources, exécutez ibmcloud oc subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone>.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector
    Facultatif : Annotation utilisée pour spécifier un sélecteur de libellé de noeud worker. Dans la même zone que le sous-réseau dédié pour l'équilibreur de charge de réseau VPC, vous pouvez configurer des noeuds worker spécifiques pour recevoir le trafic en sélectionnant l'une des clés de sélecteur de libellé prises en charge. Vous ne pouvez inclure qu'un seul sélecteur de libellé dans l'annotation et ce sélecteur doit être spécifié au format "key=value". Si cette annotation n'est pas spécifiée, tous les noeuds worker qui se trouvent dans la même zone que le sous-réseau VPC que vous avez spécifié dans l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets sont configurés pour recevoir le trafic de l'équilibreur de charge de réseau VPC. Si elle est spécifiée, les libellés dedicated: edge sur les noeuds worker sont ignorés.
    Les clés suivantes sont autorisées. - ibm-cloud.kubernetes.io/internal-ip - ibm-cloud.kubernetes.io/machine-type - ibm-cloud.kubernetes.io/os - ibm-cloud.kubernetes.io/region - ibm-cloud.kubernetes.io/subnet-id - ibm-cloud.kubernetes.io/worker-pool-id - ibm-cloud.kubernetes.io/worker-pool-name - ibm-cloud.kubernetes.io/zone - kubernetes.io/arch - kubernetes.io/hostname - kubernetes.io/os - node.kubernetes.io/instance-type - topology.kubernetes.io/region - topology.kubernetes.io/zone
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp
    Facultatif : Spécifiez un port de noeud TCP à utiliser pour les contrôles d'intégrité TCP dans un équilibreur de charge UDP. Requis pour les équilibreurs de charge UDP ayant externalTrafficPolicydéfini surCluster. Voir Configuration des contrôles d'intégrité TCP pour les équilibreurs de charge UDP pour plus d'informations avant de définir une valeur de port.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
    Facultatif: cette annotation définit le protocole de diagnostic d'intégrité sur la ressource d'équilibreur de charge VPC associée au service d'équilibreur de charge Kubernetes. Normalement, le protocole de diagnostic d'intégrité de l'équilibreur de charge VPC est déterminé par la valeur du paramètre externalTrafficPolicy dans la spécification de service d'équilibreur de charge Kubernetes. Cette annotation remplace cette logique. Cette annotation ne modifie pas le comportement de Kuberneteset de kube-proxy en particulier en ce qui concerne les différents paramètres de externalTrafficPolicy.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
    Facultatif. Le port TCP est utilisé pour les contrôles d'intégrité. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est également spécifié.
    • Si le port TCP spécifié se trouve en dehors de la plage de ports des nœuds Kubernetes (30 000-32 767), le groupe de sécurité VPC appliqué aux nœuds de travail du cluster doit être modifié afin d’autoriser le trafic entrant sur ce port.
    • Si cette annotation est appliquée à un service d'équilibrage de charge Kubernetes associé à un VPC ALB, les règles sortantes du groupe de sécurité attribué au VPC ALB doivent être modifiées afin d’autoriser le trafic sortant vers le port TCP spécifié.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
    Facultatif. Chemin d'accès à l' URL s sur les contrôles d'intégrité pour les contrôles d'intégrité HTTP et HTTPs. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est défini sur http ou https.
    • Le chemin d'accès URL doit respecter le format d'une cible de requête au format d'origine.
    • Si cette annotation n'est pas spécifiée et que l'annotation ibm-load-balancer-cloud-provider-vpc-health-check-protocol est définie sur http ou https, la valeur par défaut / est appliquée.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
    Facultatif. Nombre de secondes à attendre entre les tentatives de diagnostic d'intégrité. Par défaut, cette valeur est définie sur 5, avec un minimum de 2 et un maximum de 60. Cette valeur doit être supérieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-timeout, qui est définie sur 2 par défaut.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
    Facultatif. Nombre de secondes d'attente d'une réponse à un diagnostic d'intégrité. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 59. Cette valeur doit être inférieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-delay, qui est définie sur 5 par défaut.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
    Nombre maximal de nouvelles tentatives de diagnostic d'intégrité pour l'équilibreur de charge VPC. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 10.
    selector
    Clé de libellé (<selector_key>) et valeur (<selector_value>) que vous avez utilisées dans la section spec.template.metadata.labels du déploiement de votre application YAML. Ce libellé personnalisé identifie tous les pods dans lesquels s'exécute votre application afin de pouvoir les inclure dans l'équilibrage de charge.
    port
    Port sur lequel le service est à l'écoute.
    targetPort
    Facultatif : Port vers lequel le service achemine le trafic. L'application s'exécutant dans le pod doit être à l'écoute du trafic entrant de type TCP sur ce port cible. Le port cible est souvent défini de manière statique dans l'image qui s'exécute dans le pod d'application. Le port cible configuré dans le pod est différent du port de noeud du service et peut également être différent du port externe configuré sur l'équilibreur de charge VPC.
    externalTrafficPolicy
    Obligatoire. Spécifier Local ou Cluster.
    Définissez cette option sur Local pour conserver l'adresse IP source des requêtes des clients adressées à vos applications. Ce paramètre empêche le trafic entrant d'être acheminé vers un autre noeud. Cette option configure également les contrôles d'intégrité HTTP.
    Si Cluster est défini, le DSR n'est mis en œuvre qu'à partir du nœud de travail vers lequel le VPC NLB transfère initialement la requête entrante. Une fois la demande entrante arrivée, elle est envoyée à un noeud worker qui contient le pod d'application, qui peut se trouver dans une autre zone. La réponse du pod d'application est envoyée au noeud worker d'origine et ce dernier utilise DSR pour envoyer la réponse directement au client, en contournant l'équilibreur de charge de réseau VPC. Cette option configure également les contrôles d'intégrité TCP. Pour les équilibreurs de charge d' UDP, le service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp est obligatoire si vous choisissez l'option Cluster. Pour plus d'informations, consultez la section Configuration des contrôles d'intégrité d' TCP pour les équilibreurs de charge UDP.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota
    Optionnel. Le nombre de nœuds de travail par zone vers lesquels l'équilibreur de charge se dirige. La valeur par défaut est de 8. Pour un cluster avec des nœuds de travail dans trois zones, cela signifie que l'équilibreur de charge achemine les données vers 24 nœuds de travail au total. Le nombre total de nœuds de travail dans toutes les zones vers lesquelles l'équilibreur de charge se dirige ne peut pas dépasser 50. Si la grappe compte moins de 50 nœuds de travail dans toutes les zones, spécifiez 0 pour router vers tous les nœuds de travail d'une zone.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group
    Optionnel. Un groupe de sécurité géré par le client à ajouter à l'équilibreur de charge VPC. Si vous ne souhaitez pas utiliser le groupe de sécurité géré par IBM, indiquez un groupe de sécurité que vous possédez et gérez. Cette option supprime le groupe de sécurité géré par IBM et le remplace par le groupe de sécurité que vous spécifiez. La suppression de l'annotation d'un équilibreur de charge existant remplace le groupe de sécurité que vous avez ajouté par le groupe de sécurité géré par IBM. Vous pouvez ajouter ou supprimer cette annotation à tout moment. Vous êtes responsable de la gestion de votre groupe de sécurité et de sa mise à jour.
  5. Créez le service Kubernetes LoadBalancer dans votre cluster.

    oc apply -f <filename>.yaml -n <namespace>
    
  6. Vérifiez que le service Kubernetes LoadBalancer a bien été créé dans votre cluster. Lorsque le service est créé, la zone LoadBalancer Ingress est renseignée avec une adresse IP externe affectée par l'équilibreur de charge de réseau VPC.

La mise à disposition dans votre VPC de l'équilibreur de charge de réseau VPC dure quelques minutes. L'adresse IP externe de votre service Kubernetes LoadBalancer peut être à l'état pending jusqu'à ce que l'équilibreur de charge de réseau VPC ait été entièrement mis à disposition.

```sh {: pre}
oc describe svc myloadbalancer -n <namespace>
```
Exemple de sortie de l'interface de ligne de commande pour un service `LoadBalancer` privé :
```sh {: screen}
NAME:                     myvpcnlb
Namespace:                default
Labels:                   <none>
Annotations:              service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb
                          service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private"
                          service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet1_ID,subnet2_ID>"
Selector:                 app=echo-server
Type:                     LoadBalancer
IP:                       172.21.204.12
LoadBalancer Ingress:     10.XXX.XXX.XXX
Port:                     tcp-80  80/TCP
TargetPort:               8080/TCP
NodePort:                 tcp-80  32022/TCP
Endpoints:                172.17.17.133:8080,172.17.22.68:8080,172.17.34.18:8080 + 3 more...
Session Affinity:         None
External Traffic Policy:  Local
HealthCheck NodePort:     30882
Events:
    Type     Reason                           Age                  From                Message
----     ------                           ----                 ----                -------
Warning  SyncLoadBalancerFailed           13m (x5 over 15m)    service-controller  Error syncing load balancer: failed to ensure load balancer: kube-bqcssbbd0bsui62odcdg-2d93b07decf641d2ad3f9c2985122ec1 for service default/myvpcnlb is busy: offline/create_pending
Normal   EnsuringLoadBalancer             9m27s (x7 over 15m)  service-controller  Ensuring load balancer
Normal   EnsuredLoadBalancer              9m20s                service-controller  Ensured load balancer
Normal   CloudVPCLoadBalancerNormalEvent  8m17s                ibm-cloud-provider  Event on cloud load balancer myvpcnlb for service default/myvpcnlb with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
```
  1. Vérifiez que l'équilibreur de charge de réseau VPC a bien été créé dans votre VPC. Dans la sortie, vérifiez que pour l'équilibreur de charge de réseau VPC, la zone Operating Status est définie sur online et la zone Provision Status, sur active.

    ibmcloud is load-balancers
    

    Dans l'exemple de sortie de l'interface de ligne de commande suivant, l'équilibreur de charge de réseau VPC nommé kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96e est créé pour le service Kubernetes LoadBalancer :

    ID                                     Name                                                         Created          Host Name                                  Is Public   Listeners                               Operating Status   Pools                                   Private IPs              Provision Status   Public IPs                    Subnets                                Resource Group
    06496f64-a689-4693-ba23-320959b7b677   kube-bh077ne10vqpekt0domg-046e0f754d624dca8b287a033d55f96e   8 minutes ago    1234abcd-us-south.lb.appdomain.cloud       no         95482dcf-6b9b-4c6a-be54-04d3c46cf017    online             717f2122-5431-403c-b21d-630a12fc3a5a    10.XXX.XXX.XXX           active             -               c6540331-1c1c-40f4-9c35-aa42a98fe0d9   00809211b934565df546a95f86160f62
    
  2. A partir de votre connexion au réseau privé VPC, accédez à l'adresse IP du service Kubernetes LoadBalancer que vous avez trouvé à l'étape 6 et votre port d'application au format <external_IP>:<app_port>.

  3. Facultatif : répétez ces étapes pour déployer un équilibreur de charge de réseau VPC privé dans chaque zone dans laquelle vous souhaitez exposer votre application. Vous pouvez ensuite enregistrer les adresses IP externes de l'équilibreur de charge de réseau VPC dans chaque zone avec un sous-domaine DNS.

Enregistrement d'un enregistrement DNS et d'un certificat TLS

Les équilibreurs de charge de réseau VPC fournissent les adresses IP externes statiques par l'intermédiaire desquelles vous pouvez accéder à votre application. Pour enregistrer un certificat SSL pour votre domaine d'application afin de prendre en charge HTTPS, vous pouvez créer un sous-domaine fourni par IBM ou apporter votre propre domaine personnalisé.

Par exemple, supposons que vous disposiez d'un cluster multizone et que vous exécutiez des répliques de votre application sur des noeuds worker dans chaque zone de votre cluster. Vous créez un équilibreur de charge de réseau VPC par zone pour exposer les répliques d'application. Vous pouvez ensuite enregistrer les adresses IP externes fournies par chaque équilibreur de charge de réseau VPC avec une entrée DNS.

Une fois que vous avez créé un sous-domaine DNS pour les NLB VPC, vous ne pouvez pas utiliser les commandes nlb-dns health-monitor pour créer un contrôle d'intégrité personnalisé. Au lieu de cela, le diagnostic d'intégrité VPC par défaut est utilisé. Pour plus d'informations, voir la documentation VPC.

  • Créez un équilibreur de charge de réseau VPC par zone pour votre application. Veillez à définir un port HTTPS dans votre service Kubernetes LoadBalancer qui configure l'équilibreur de charge de réseau VPC.
  • Pour utiliser le certificat SSL afin d'accéder à votre application via HTTPS, vous devez faire en sorte que votre application soit en mesure de mettre fin aux connexions TLS.

Pour enregistrer les adresses IP de NLB VPC avec un sous-domaine DNS,

  1. Extrayez l'adresse IP externe de votre équilibreur de charge.

    oc get svc -o wide
    

    Exemple de sortie

    NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)            AGE      SELECTOR
    ...
    myapp-vpc-nlb-jp-tok-3    LoadBalancer   172.21.xxx.xxx   169.xx.xxx.xx     8080:30532/TCP     1d       run=webserver
    
  2. Créez un sous-domaine DNS personnalisé ou fourni par IBM pour l'adresse IP.

    • Domaine personnalisé :

      1. Enregistrez votre domaine personnalisé en utilisant votre fournisseur de DNS (Domain Name Service) ou IBM Cloud DNS.
      2. Définissez un alias pour votre domaine personnalisé en spécifiant les adresses IP d'équilibreur de charge comme enregistrements A.
    • Sous-domaine fourni par IBM : U=utilisez les commandes nlb-dns pour générer un sous-domaine avec un certificat SSL pour les adresses IP. IBM Cloud prend en charge automatiquement la génération et la gestion du certificat SSL générique pour le sous-domaine.

      1. Créez un sous-domaine DNS et un certificat SSL.
        ibmcloud oc nlb-dns create vpc-gen2 --type public --cluster <cluster_name_or_id> --ip <vpc_nlb1_ip> --ip <vpc_nlb2_ip> --ip <vpc_nlb3_ip>
        
      2. Vérifiez que le sous-domaine est créé. Pour plus d'informations, voir Description du format de sous-domaine.
        ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
        
        Exemple de sortie
        Subdomain                                                                               IP(s)                                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     169.46.xx.x,169.48.xxx.xx,169.48.xxx.xx      None             created                   <certificate>
        
  3. Ouvrez un navigateur Web et entrez l'URL permettant d'accéder à votre application via le sous-domaine.

Pour utiliser le certificat SSL afin d'accéder à votre application via HTTPS, prenez soin de définir un port HTTPS dans votre service Kubernetes LoadBalancer. Vous pouvez vérifier que les demandes routent correctement via le port HTTPS en exécutant curl -v --insecure https://<domain>. Une erreur de connexion indique qu'aucun port HTTPS n'est ouvert sur le service. De plus, vérifiez que les connexions TLS peuvent être interrompues par votre application. Vous pouvez vérifier que votre application termine correctement TLS en exécutant curl -v https://<domain>. Une erreur de certificat indique que votre application n'arrête pas correctement les connexions TLS.

Configuration d'un équilibreur de charge d'application pour VPC

Exposez votre application sur le réseau public ou sur le réseau privé en configurant un service Kubernetes LoadBalancer dans votre cluster. Lorsque vous exposez votre application, un équilibreur de charge d'application pour VPC qui achemine les demandes vers votre application est automatiquement créé dans votre VPC en dehors de votre cluster. Les ALB VPC prennent uniquement en charge le protocole TCP.

Ne confondez pas les équilibreurs de charge d'application pour VPC avec les équilibreurs de charge d'application Ingress d'Red Hat OpenShift on IBM Cloud. Les équilibreurs de charge d'application pour VPC sont exécutés en dehors de votre cluster dans votre VPC et sont configurés par les services Kubernetes LoadBalancer que vous créez. Les équilibreurs de charge d'application Ingress sont des contrôleurs Ingress exécutés sur des noeuds worker dans votre cluster.

Configuration d'un équilibreur de charge d'application VPC public ou privé

Avant de commencer

Pour permettre à votre application de recevoir des demandes publiques ou privées,

  1. Déployez votre application sur le cluster. Prenez soin d'ajouter un libellé à votre déploiement dans la section "metadata" de votre fichier de configuration de déploiement. Ce libellé personnalisé identifie tous les pods dans lesquels s'exécute votre application afin de pouvoir les inclure dans l'équilibrage de charge.

  2. Créez un fichier YAML de configuration pour votre service Kubernetes LoadBalancer et affectez le nom myloadbalancer.yaml au fichier.

    apiVersion: v1
    kind: Service
    metadata:
      name: myloadbalancer
      annotations:
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "proxy-protocol"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "<public_or_private>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector: "<key>=<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "<subnet1_ID,subnet2_ID>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-zone: "<zone>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol: "<protocol>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port: "<port>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path: "<url_path>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota: "<value>"
        service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group: "<security-group>"
    spec:
     type: LoadBalancer
     selector:
        <selector_key>: <selector_value>
     ports:
       - name: http
         protocol: TCP
         port: 8080
         targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
       - name: https
         protocol: TCP
         port: 443
         targetPort: 443 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise.
      externalTrafficPolicy: Local # Specify Local or Cluster.
    
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"

    Facultatif. Incluez un nom unique pour rendre votre équilibreur de charge VPC persistant. Les équilibreurs de charge VPC persistants ne sont pas supprimés lorsque le cluster auquel ils appartiennent est supprimé. Pour plus d'informations, voir Persistent VPC load balancers.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "proxy-protocol"

    Facultatif: activez le protocole PROXY. L'équilibreur de charge transmet les informations de connexion client, notamment l'adresse IP du client, l'adresse IP du serveur proxy et les deux numéros de port, contenues dans les en-têtes de demande, à votre application de back end. Notez que votre application de back end doit être configurée pour accepter le protocole PROXY. Par exemple, vous pouvez configurer une application NGINX pour qu'elle accepte le protocole PROXY en suivant ces étapes.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type

    Annotation permettant de spécifier un service qui accepte des demandes publiques ou privées. Si vous n'incluez pas cette annotation, un LoadBalancer public est créé.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector
    Annotation permettant de spécifier un sélecteur d'étiquette de nœud de travail. Pour identifier les noeuds worker qui reçoivent du trafic, vous pouvez sélectionner l'une des clés de sélecteur de libellé prises en charge. Vous ne pouvez inclure qu'un seul sélecteur de libellé dans l'annotation et ce sélecteur doit être spécifié au format "key=value". Si cette annotation n'est pas spécifiée, tous les noeuds worker de votre cluster sont configurés pour recevoir le trafic de l'équilibreur de charge d'application VPC. Si elle est spécifiée, cette annotation a priorité sur l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-zone et tous les libellés dedicated: edge des noeuds worker sont ignorés.
    Les clés suivantes sont admises : - ibm-cloud.kubernetes.io/internal-ip - ibm-cloud.kubernetes.io/machine-type - ibm-cloud.kubernetes.io/os - ibm-cloud.kubernetes.io/region - ibm-cloud.kubernetes.io/subnet-id - ibm-cloud.kubernetes.io/worker-pool-id - ibm-cloud.kubernetes.io/worker-pool-name - ibm-cloud.kubernetes.io/zone - kubernetes.io/arch - kubernetes.io/hostname - kubernetes.io/os - node.kubernetes.io/instance-type - topology.kubernetes.io/region - topology.kubernetes.io/zone
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets

    Annotation permettant de spécifier un ou plusieurs sous-réseaux sur lesquels le service VPC ALB est déployé. Si elle est spécifiée, cette annotation a priorité sur l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-zone. Vous pouvez spécifier un sous-réseau différent dans le même VPC que les sous-réseaux auxquels votre cluster est connecté. Dans ce cas, même si l'équilibreur de charge d'application VPC est déployé sur un autre sous-réseau du même VPC, il peut tout de même router le trafic vers vos noeuds worker sur les sous-réseaux du cluster. Pour afficher les sous-réseaux dans tous les groupes de ressources, exécutez ibmcloud oc subnets --provider vpc-gen2 --vpc-id <vpc> --zone <zone>.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-zone

    Annotation permettant de spécifier une zone VPC à laquelle votre cluster est connecté. Lorsque vous spécifiez une zone dans cette annotation, deux processus se produisent.

    1. L'équilibreur de charge d'application VPC est déployé sur le sous-réseau de cette zone auquel vos noeuds worker sont connectés.
    2. euls les noeuds worker de votre cluster qui se trouvent dans cette zone sont configurés pour recevoir du trafic des équilibreurs de charge d'application VPC.

    Pour afficher les zones, exécutez ibmcloud oc zone ls --provider vpc-gen2.

    Pour placer l'équilibreur de charge dans une zone spécifique, vous devez spécifier cette annotation lorsque vous créez l'équilibreur de charge. Si vous modifiez ultérieurement cette annotation dans une autre zone, l'équilibreur de charge proprement dit n'est pas déplacé vers la nouvelle zone. Toutefois, l'équilibreur de charge est reconfiguré pour envoyer le trafic aux nœuds worker uniquement dans la nouvelle zone.
    Si le libellé dedicated: edge est défini sur les nœuds worker et que vous spécifiez cette annotation, seuls les nœuds périphériques de la zone spécifiée sont configurés pour recevoir du trafic. Les nœuds périphériques dans les autres zones et les nœuds non périphériques de la zone spécifiée ne reçoivent pas de trafic de l'équilibreur de charge.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol

    Facultatif: cette annotation définit le protocole de diagnostic d'intégrité sur la ressource d'équilibreur de charge VPC associée au service d'équilibreur de charge Kubernetes. Normalement, le protocole de diagnostic d'intégrité de l'équilibreur de charge VPC est déterminé par la valeur du paramètre externalTrafficPolicy dans la spécification de service d'équilibreur de charge Kubernetes. Cette annotation remplace cette logique. Cette annotation ne modifie pas le comportement de Kuberneteset de kube-proxy en particulier en ce qui concerne les différents paramètres de externalTrafficPolicy.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port

    Facultatif. Le port TCP est utilisé pour les contrôles d'intégrité. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est également spécifié.

    • Si le port TCP spécifié se trouve en dehors de la plage de ports des nœuds Kubernetes (30 000-32 767), le groupe de sécurité VPC appliqué aux nœuds de travail du cluster doit être modifié afin d’autoriser le trafic entrant sur ce port.
    • Si cette annotation est appliquée à un service d'équilibrage de charge Kubernetes associé à un VPC ALB, les règles sortantes du groupe de sécurité attribué au VPC ALB doivent être modifiées afin d’autoriser le trafic sortant vers le port TCP spécifié.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path

    Facultatif. Chemin d'accès à l' URL s sur les contrôles d'intégrité pour les contrôles d'intégrité HTTP et HTTPs. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est défini sur http ou https.

    • Le chemin d'accès URL doit respecter le format d'une cible de requête au format d'origine.
    • Si cette annotation n'est pas spécifiée et que l'annotation ibm-load-balancer-cloud-provider-vpc-health-check-protocol est définie sur http ou https, la valeur par défaut / est appliquée.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay

    Facultatif. Nombre de secondes à attendre entre les tentatives de diagnostic d'intégrité. Par défaut, cette valeur est définie sur 5, avec un minimum de 2 et un maximum de 60. Cette valeur doit être supérieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-timeout, qui est définie sur 2 par défaut.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout

    Facultatif. Nombre de secondes d'attente d'une réponse à un diagnostic d'intégrité. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 59. Cette valeur doit être inférieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-delay, qui est définie sur 5 par défaut.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries

    Nombre maximal de nouvelles tentatives de diagnostic d'intégrité pour l'équilibreur de charge VPC. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 10.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout

    Facultatif. Délai d'inactivité, en secondes, de la connexion du programme d'écoute. Le délai d'inactivité par défaut dépend des paramètres de votre compte. Généralement, cette valeur est 50. Toutefois, certains comptes sur liste autorisée ont des paramètres de délai d'attente plus importants. Si vous ne définissez pas l'annotation, vos équilibreurs de charge utilisent le paramètre de délai d'attente dans votre compte. Vous pouvez spécifier explicitement le délai d'attente en définissant cette annotation. La valeur minimale est 50. La longueur maximale est de 7200.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-instance-crn: "private-dns-crn"

    Optionnel. Peut être appliqué uniquement pour les ALB VPC privés dans la version4.15 ou plus tard. Le DNS instance à associer à cet équilibreur de charge. Pour plus d'informations, voir Enregistrer un enregistrement DNS privé.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-zone-id: "dns-zone-id"

    Optionnel. Peut être appliqué uniquement pour les ALB VPC privés dans la version4.15 ou plus tard. Le DNS zone à associer à cet équilibreur de charge. Pour plus d'informations, voir Enregistrer un enregistrement DNS privé.

    selector

    Clé de libellé (<selector_key>) et valeur (<selector_value>) que vous avez utilisées dans la section spec.template.metadata.labels du déploiement de votre application YAML. Ce libellé personnalisé identifie tous les pods dans lesquels s'exécute votre application afin de pouvoir les inclure dans l'équilibrage de charge.

    port

    Port sur lequel le service est à l'écoute.

    targetPort

    Facultatif : Port vers lequel le service achemine le trafic. L'application s'exécutant dans le pod doit être à l'écoute du trafic entrant de type TCP sur ce port cible. Le port cible est souvent défini de manière statique dans l'image qui s'exécute dans le pod d'application. Le port cible configuré dans le pod est différent du port de noeud du service et peut également être différent du port externe configuré sur l'équilibreur de charge VPC.

    externalTrafficPolicy
    Obligatoire. Spécifiez Local ou Cluster.
    Définissez cette option sur Local pour conserver l'adresse IP source des requêtes des clients adressées à vos applications. Ce paramètre empêche le trafic entrant d'être acheminé vers un autre noeud. Cette option configure également les contrôles d'intégrité HTTP. Pour les équilibreurs de charge d' UDP, le service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp est obligatoire si vous choisissez l'option Cluster. Pour plus d’informations, consultez la section Configuration des contrôles d’intégrité d’ TCP pour les équilibreurs de charge d’ UDP.
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota

    Optionnel. Le nombre de nœuds de travail par zone vers lesquels l'équilibreur de charge se dirige. La valeur par défaut est de 8. Pour un cluster avec des nœuds de travail dans trois zones, cela signifie que l'équilibreur de charge achemine les données vers 24 nœuds de travail au total. Le nombre total de nœuds de travail dans toutes les zones vers lesquelles l'équilibreur de charge se dirige ne peut pas dépasser 50. Si la grappe compte moins de 50 nœuds de travail dans toutes les zones, spécifiez 0 pour router vers tous les nœuds de travail d'une zone.

    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group

    Optionnel. Un groupe de sécurité géré par le client à ajouter à l'équilibreur de charge VPC. Si vous ne souhaitez pas utiliser le groupe de sécurité géré par IBM, indiquez un groupe de sécurité que vous possédez et gérez. Cette option supprime le groupe de sécurité géré par IBM et le remplace par le groupe de sécurité que vous spécifiez. La suppression de l'annotation d'un équilibreur de charge existant remplace le groupe de sécurité que vous avez ajouté par le groupe de sécurité géré par IBM. Vous pouvez ajouter ou supprimer cette annotation à tout moment. Vous êtes responsable de la gestion de votre groupe de sécurité et de sa mise à jour.

  3. Créez le service Kubernetes LoadBalancer dans votre cluster.

    oc apply -f myloadbalancer.yaml -n <namespace>
    
  4. Vérifiez que le service Kubernetes LoadBalancer a bien été créé dans votre cluster. Lorsque le service est créé, la zone LoadBalancer Ingress est renseignée avec un nom d'hôte affecté par l'équilibreur de charge d'application VPC.

La mise à disposition dans votre VPC de l'équilibreur de charge d'application VPC dure quelques minutes. Vous ne pouvez pas accéder à votre application en utilisant le nom d'hôte de votre service Kubernetes LoadBalancer jusqu'à ce que l'ALB VPC soit entièrement mis à disposition.

```sh {: pre}
oc describe svc myloadbalancer -n <namespace>
```
Exemple de sortie de l'interface de ligne de commande pour un service `LoadBalancer` public :
```sh {: screen}
NAME:                     myvpcalb
Namespace:                default
Labels:                   <none>
Annotations:              
Selector:                 app=echo-server
Type:                     LoadBalancer
IP:                       172.21.XX.XX
LoadBalancer Ingress:     1234abcd-us-south.lb.appdomain.cloud
Port:                     tcp-80  80/TCP
TargetPort:               8080/TCP
NodePort:                 tcp-80  30610/TCP
Endpoints:                172.17.17.133:8080,172.17.22.68:8080,172.17.34.18:8080 + 3 more...
Session Affinity:         None
External Traffic Policy:  Local
HealthCheck NodePort:     31438
Events:
    Type    Reason                           Age   From                Message
----    ------                           ----  ----                -------
Normal  EnsuringLoadBalancer             16m   service-controller  Ensuring load balancer
Normal  EnsuredLoadBalancer              15m   service-controller  Ensured load balancer
Normal  CloudVPCLoadBalancerNormalEvent  13m   ibm-cloud-provider  Event on cloud load balancer myvpcalb for service default/myvpcalb with UID 08cbacf0-2c93-4186-84b6-c4ab88a2faf9: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
```
  1. Vérifiez que l'équilibreur de charge d'application VPC a bien été créé dans votre VPC. Dans la sortie, vérifiez que pour l'équilibreur de charge d'application VPC, la zone Operating Status est définie sur online et la zone Provision Status, sur active.

    Ne renommez pas les équilibreurs de charge d'application VPC créés automatiquement pour les services LoadBalancer. Si vous renommez un équilibreur de charge d'application VPC, Red Hat OpenShift on IBM Cloud crée automatiquement un autre équilibreur de charge d'application VPC pour le service LoadBalancer.

    ibmcloud is load-balancers
    

    Dans l'exemple de sortie de l'interface de ligne de commande suivant, l'équilibreur de charge d'application VPC nommé kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 est créé pour le service Kubernetes LoadBalancer :

    ID                                          Name                                                         Family        Subnets               Is public   Provision status   Operating status   Resource group
    r006-d044af9b-92bf-4047-8f77-a7b86efcb923   kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306   Application   mysubnet-us-south-3   true        active             online             default
    
  2. Si vous avez créé un service public LoadBalancer, exécutez une commande curl sur le nom d'hôte du service Kubernetes LoadBalancer affecté par l'équilibreur de charge d'application VPC identifié à l'étape 4. Exemple :

    curl 06496f64-us-south.lb.appdomain.cloud:8080
    

    Exemple de sortie

    Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!
    

    Si vous avez créé un service LoadBalancer privé, vous devez être connecté à votre réseau VPC privé pour exécuter une commande curl sur le nom d'hôte.

Ne supprimez pas les sous-réseaux que vous avez associés à votre cluster lors de la création du cluster ou lorsque vous ajoutez des noeuds worker dans une zone. Si vous supprimez un sous-réseau VPC que votre cluster a utilisé, des problèmes peuvent se produire au niveau des équilibreurs de charge qui utilisent des adresses IP à partir du sous-réseau et il se peut que vous ne puissiez pas créer de nouveaux équilibreurs de charge.

Les ALB et NLB VPC qui ne sont pas associés à des clusters Kubernetes ou OpenShift peuvent être mis à jour directement à l'aide des commandes ibmcloud is ou via la section Infrastructure VPC de la console. Par exemple, modifiez le port d'un programme d'écoute de front-end ou la valeur du délai d'attente du diagnostic d'intégrité. Toutefois, pour les équilibreurs de charge VPC associés à des clusters Kubernetes ou OpenShift, toute modification doit être effectuée via des annotations dans la configuration d’Ingress. Le fournisseur IBM Cloud se resynchronise périodiquement avec tous les ALB et NLB VPC associés afin de garantir que l'équilibreur de charge en cours d'exécution est conforme à la configuration attendue d'Ingress. Par conséquent, si vous apportez des modifications à un tel équilibreur de charge directement via VPC au lieu d'utiliser des annotations Ingress, ces modifications seront annulées.

Enregistrement d'un enregistrement DNS et d'un certificat TLS

L'équilibreur de charge d'application pour VPC (ALB de VPC) fournit un nom d'hôte HTTP par défaut au format 1234abcd-<region>.lb.appdomain.cloud à travers lequel vous pouvez accéder à votre application. Toutefois, si vous souhaitez qu'un certificat TLS pour votre domaine d'application prenne en charge HTTPS, vous pouvez créer un sous-domaine fourni par IBM ou apporter votre propre domaine personnalisé pour les équilibreurs de charge d'application publics et privés.

Après avoir créé un sous-domaine DNS pour un nom d'hôte ALB de VPC, vous ne pouvez pas utiliser les commandes nlb-dns health-monitor pour créer un contrôle d'intégrité personnalisé. Au lieu de cela, le diagnostic d'intégrité par défaut de l'équilibreur de charge VPC fourni pour le nom d'hôte d'équilibreur de charge d'application par défaut est utilisé. Pour plus d'informations, voir la documentation VPC.

Avant de commencer

  • Configurez un équilibreur de charge d'application VPC. Veillez à définir un port HTTPS dans votre service Kubernetes LoadBalancer qui configure l'équilibreur de charge d'application VPC.
  • Pour utiliser le certificat TLS afin d'accéder à votre application via HTTPS, vous devez être en mesure de mettre fin à des connexions TLS.

Pour enregistrer un nom d'hôte ALB de VPC avec un sous-domaine DNS,

  1. Extrayez le nom d'hôte de votre VPC ALB en exécutant la commande get svc. Dans la sortie, recherchez le nom d'hôte dans la colonne EXTERNAL-IP. Par exemple, 1234abcd-us-south.lb.appdomain.cloud.

    oc get svc -o wide
    

    Exemple de sortie

    NAME            TYPE           CLUSTER-IP       EXTERNAL-IP                            PORT(S)     AGE       SELECTOR
    ...
    webserver-lb    LoadBalancer   172.21.xxx.xxx   1234abcd-us-south.lb.appdomain.cloud   8080:30532/TCP     1d       run=webserver
    
  2. Créez un sous-domaine DNS personnalisé ou fourni par IBM pour le nom d'hôte de l'équilibreur de charge.

    • Domaine personnalisé: fournissez votre propre domaine personnalisé et attribuez-lui un alias en spécifiant l'adresse IP externe de l'équilibreur de charge, au format 1234abcd-us-south.lb.appdomain.cloud d'un enregistrement de nom canonique (CNAME).

      1. Enregistrez votre domaine personnalisé en utilisant votre fournisseur de DNS (Domain Name Service) ou IBM Cloud DNS.
      2. Définissez un alias pour votre domaine personnalisé en spécifiant l'adresse IP externe de l'équilibreur de charge en tant qu'enregistrement de nom canonique (CNAME). Dans l'exemple suivant, l'équilibreur de charge avec l'adresse IP externe de 1234abcd-us-south.lb.appdomain.cloud est accessible à l'adresse www.your-custom-domain.com.
      Hôte/Service
      Préfixe dans lequel vous souhaitez accéder à votre application, par exemple, www.
      Type de ressource
      Sélectionnez CNAME.
      TTL
      Sélectionnez une durée de vie.
      Valeur/Cible
      Adresse IP externe LoadBalancer que vous avez extraite précédemment. Par exemple,1234abcd-us-south.lb.appdomain.cloud.. Notez que lorsque vous utilisez le serveur de noms de domaine IBM Cloud, veillez à entrer un point de fin.
    • Sous-domaine fourni par IBM : utilisez les commandes nlb-dns pour générer un sous-domaine avec un certificat TLS pour le nom d'hôte VPC ALB. IBM Cloud prend en charge automatiquement la génération et la gestion du certificat TLS générique pour le sous-domaine.

      1. Créez un sous-domaine DNS et un certificat TLS.
        ibmcloud oc nlb-dns create vpc-gen2 --cluster <cluster_name_or_id> --lb-host <vpc_lb_hostname> --type (public|private)
        
      2. Vérifiez que le sous-domaine est créé. Pour plus d'informations, voir Description du format de sous-domaine.
        ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
        
        Exemple de sortie
        Subdomain                                                                               Load Balancer Hostname                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["1234abcd-us-south.lb.appdomain.cloud"]      None             created                   <certificate>
        
  3. Si vous avez créé un sous-domaine pour un ALB VPC public, ouvrez un navigateur Web et saisissez l'adresse URL pour accéder à votre application via ce sous-domaine, comme dans l'exemple www.your-custom-domain.com. Si vous avez créé un sous-domaine pour un équilibreur de charge d'application VPC privé, vous devez être connecté à votre réseau VPC privé pour tester l'accès à votre sous-domaine.

Pour utiliser le certificat TLS afin d'accéder à votre application via HTTPS, prenez soin de définir un port HTTPS dans votre service Kubernetes LoadBalancer. Vous pouvez vérifier que les demandes routent correctement via le port HTTPS en exécutant curl -v --insecure https://<domain>. Une erreur de connexion indique qu'aucun port HTTPS n'est ouvert sur le service. De plus, vérifiez que les connexions TLS peuvent être interrompues par votre application. Vous pouvez vérifier que votre application termine correctement TLS en exécutant curl -v https://<domain>. Une erreur de certificat indique que votre application n'arrête pas correctement les connexions TLS.

Enregistrement d'un enregistrement DNS privé pour un ALB VPC privé

En version4.15 ou version ultérieure, vous pouvez utiliser les annotations facultatives suivantes pour associer votre propre DNS instance qui sert un DNS personnalisé zone avec un ALB VPC privé. Pour cela, les deux annotations facultatives doivent être définies. S'ils ne sont pas spécifiés, alors DNS A enregistrements pour cet équilibreur de charge hostname la propriété sera ajoutée à la zone DNS publique lb.appdomain.cloud.

service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-instance-crn: "private-dns-crn" :
Le DNS instance à associer à cet équilibreur de charge. L'instance spécifiée peut se trouver dans une région ou un compte différent, soumis aux stratégies IAM. Valeurs possibles : 9 ≤ longueur ≤ 512

service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-zone-id: "dns-zone-id" :
Le DNS zone à associer à cet équilibreur de charge. La zone spécifiée peut se trouver dans une région ou un compte différent, sous réserve des politiques IAM. Valeurs possibles : 1 ≤ longueur ≤ 128, la valeur doit correspondre à l'expression régulière [a-z0-9-]^*[a-z0-9]$

Vous devez effectuer les opérations suivantes avant de pouvoir utiliser cette fonctionnalité :

  • Créer la zone DNS qui peut être liée à un équilibreur de charge
  • Activer l'autorisation de service à service entre les LB VPC etDNS Services
  • Ajouter le VPC du cluster aux réseaux autorisés de la zone

Pour plus d’informations, consultez les documents Intégration d’un équilibreur de charge d’application à l’ IBM Cloud DNS Services et Ajouter un VPC en tant que réseau autorisé à la zone DNS.

Exemple :

apiVersion: v1
kind: Service
metadata:
  name: myloadbalancer
  annotations:
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name: "my-load-balancer"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: "private"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-instance-crn: "crn:v1:bluemix:public:dns-svcs:global:a/bb1b52262f7441a586f49068482f1e60:f761b566-030a-4696-8649-cc9d09889e88::"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-private-dns-zone-id: "d66662cc-aa23-4fe1-9987-858487a61f45"
spec:
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 169.60.115.164
...

Equilibreurs de charge VPC persistants

Par défaut, les équilibreurs de charge VPC sont supprimés lorsque le cluster auquel ils sont associés est supprimé. Toutefois, lorsque vous créez une définition de service LoadBalancer, vous pouvez rendre votre équilibreur de charge persistant afin qu'il reste disponible même après la suppression de votre cluster. Un équilibreur de charge VPC persistant peut être appliqué à un autre cluster après la suppression de son cluster précédent.

Les noms d'équilibreur de charge VPC sont formatés en tant que kube-<cluster_ID>-<kubernetes_lb_service_UID> par défaut. Lorsqu'un cluster est supprimé, ce format de nom spécifie les équilibreurs de charge associés qui sont ensuite également supprimés. Pour vous assurer que votre équilibreur de charge n'est pas supprimé lorsque vous supprimez un cluster, incluez l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name dans votre définition de service LoadBalancer pour donner à votre équilibreur de charge un nom unique. Le nom de l'équilibreur de charge doit être unique dans votre VPC et ne peut inclure que des caractères alphanumériques minuscules et des traits d'union (-). L'annotation peut être appliquée à tous les types d'équilibreur de charge VPC.

Vous êtes responsable de la suppression des équilibreurs de charge VPC persistants lorsqu'ils ne sont plus nécessaires. Pour supprimer un équilibreur de charge VPC persistant, supprimez la définition de service LoadBalancer Kubernetes à laquelle l'équilibreur de charge VPC est associé.

Déplacement d'un équilibreur de charge VPC d'un cluster à un autre

Les équilibreurs de charge VPC persistants peuvent être déconnectés d'un cluster VPC, puis connectés à un autre. Le nouveau cluster doit se trouver dans le même VPC que le cluster d'origine.

Déconnexion d'un équilibreur de charge VPC d'un cluster

Les équilibreurs de charge VPC sont associés à la définition du service LoadBalancer Kubernetes avec laquelle ils ont été créés. Pour déconnecter un équilibreur de charge VPC persistant d'un cluster, vous devez rompre le lien avec le service LoadBalancer en renommant l'équilibreur de charge VPC ou en supprimant l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name de la définition de service LoadBalancer d'origine. Vous pouvez également déconnecter un équilibreur de charge VPC persistant d'un cluster en supprimant le cluster.

Si vous supprimez l'annotation, le service LoadBalancer d'origine est rétabli et crée un équilibreur de charge VPC non persistant dans le cluster d'origine. Cet équilibreur de charge VPC non persistant respecte la convention de dénomination kube-<cluster_ID>-<kubernetes_lb_service_UID>.

Connexion d'un équilibreur de charge VPC à un cluster

Une fois qu’un équilibreur de charge VPC persistant a été détaché d’un cluster, vous pouvez l’attacher à un autre cluster en créant une nouvelle définition de service LoadBalancer Kubernetes qui fait référence à cet équilibreur de charge VPC.

Lorsque vous créez un service LoadBalancer sur le nouveau cluster, vous pouvez utiliser l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-lb-name pour spécifier le nom de l'équilibreur de charge VPC que vous souhaitez connecter.

Lorsque vous créez le service LoadBalancer, le type d'équilibreur de charge VPC (ALB, NLB) et le type IP (public, privé) doivent correspondre aux spécifications du service LoadBalancer. Par exemple, un service LoadBalancer existant sur le nouveau cluster qui spécifie un type d'équilibreur de charge de réseau ne peut pas être utilisé pour connecter un équilibreur de charge d'application VPC au cluster. Les annotations qui spécifient le type d'équilibreur de charge et le type d'adresse IP sont respectivement service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features et service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type.

Le port et les ports de noeud spécifiés dans le service LoadBalancer n'ont pas besoin de correspondre à ceux avec lesquels l'équilibreur de charge VPC a été créé. L'équilibreur de charge VPC reconfigure avec les définitions de port du service LoadBalancer auquel il est associé dans le nouveau cluster.

Contrôles d'intégrité pour les équilibreurs de charge

Les équilibreurs de charge VPC sont automatiquement configurés avec des diagnostics d'intégrité, que vous configurez avec l'annotation externalTrafficPolicy. Vous pouvez utiliser des annotations supplémentaires pour personnaliser les diagnostics d'intégrité sur vos équilibreurs de charge.

  • Si externalTrafficPolicyest défini surCluster, les contrôles d'intégrité TCP sont appliqués. Si vous configurez un équilibreur de charge UDP, vous devez effectuer des spécifications de port supplémentaires.
  • Si externalTrafficPolicyest défini surLocal, des vérifications d'intégrité HTTP sont appliquées. Le trafic entrant est distribué uniquement au pod d'application résidant sur ce noeud spécifique. S'il n'y a pas de pod d'application sur ce noeud spécifique, le trafic entrant est supprimé.

Le paramètre externalTrafficPolicy: Local peut entraîner l'échec des diagnostics d'intégrité sur vos noeuds worker d'équilibreur de charge. Généralement, ce résultat correspond au comportement attendu et n'indique pas nécessairement un problème, car le trafic est intentionnellement supprimé si l'équilibreur de charge tente de se connecter à un noeud qui ne possède pas de pod d'application. Pour plus d'informations, voir Pourquoi les diagnostics d'intégrité de l'équilibreur de charge VPC échouent-ils sur mes noeuds worker?.

Personnalisation des diagnostics d'intégrité pour les équilibreurs de charge VPC

Pour plus de contrôle sur les diagnostics d'intégrité de votre équilibreur de charge VPC, vous pouvez utiliser des annotations facultatives pour personnaliser vos diagnostics d'intégrité avec des configurations avancées pour les intervalles de test, les délais d'attente et les nouvelles tentatives. Vous pouvez modifier ou supprimer ces personnalisations à tout moment.

service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol
Facultatif: cette annotation définit le protocole de diagnostic d'intégrité sur la ressource d'équilibreur de charge VPC associée au service d'équilibreur de charge Kubernetes. Normalement, le protocole de diagnostic d'intégrité de l'équilibreur de charge VPC est déterminé par la valeur du paramètre externalTrafficPolicy dans la spécification de service d'équilibreur de charge Kubernetes. Cette annotation remplace cette logique. Cette annotation ne modifie pas le comportement de Kuberneteset de kube-proxy en particulier en ce qui concerne les différents paramètres de externalTrafficPolicy.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port
Facultatif. Le port TCP est utilisé pour les contrôles d'intégrité. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est également spécifié.
  • Si le port TCP spécifié se trouve en dehors de la plage de ports des nœuds Kubernetes (30 000-32 767), le groupe de sécurité VPC appliqué aux nœuds de travail du cluster doit être modifié afin d’autoriser le trafic entrant sur ce port.
  • Si cette annotation est appliquée à un service d'équilibrage de charge Kubernetes associé à un VPC ALB, les règles sortantes du groupe de sécurité attribué au VPC ALB doivent être modifiées afin d’autoriser le trafic sortant vers le port TCP spécifié.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path
Facultatif. Chemin d'accès à l' URL s sur les contrôles d'intégrité pour les contrôles d'intégrité HTTP et HTTPs. Cette annotation s'applique uniquement si ibm-load-balancer-cloud-provider-vpc-health-check-protocol est défini sur http ou https.
  • Le chemin d'accès URL doit respecter le format d'une cible de requête au format d'origine.
  • Si cette annotation n'est pas spécifiée et que l'annotation ibm-load-balancer-cloud-provider-vpc-health-check-protocol est définie sur http ou https, la valeur par défaut / est appliquée.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay
Facultatif. Nombre de secondes à attendre entre les tentatives de diagnostic d'intégrité. Par défaut, cette valeur est définie sur 5, avec un minimum de 2 et un maximum de 60. Cette valeur doit être supérieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-timeout, qui est définie sur 2 par défaut.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout
Facultatif. Nombre de secondes d'attente d'une réponse à un diagnostic d'intégrité. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 59. Cette valeur doit être inférieure à la valeur ibm-load-balancer-cloud-provider-vpc-health-check-delay, qui est définie sur 5 par défaut.
service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries
Nombre maximal de nouvelles tentatives de diagnostic d'intégrité pour l'équilibreur de charge VPC. Par défaut, cette valeur est définie sur 2, avec un minimum de 1 et un maximum de 10.

Activation des contrôles d'intégrité TCP pour les équilibreurs de charge UDP

Étant donné qu'aucun contrôle d'intégrité UDP n'est effectué, les équilibreurs de charge UDP qui utilisent les contrôles d'intégrité TCP doivent avoir un port TCP supplémentaire spécifié avec l'annotationservice.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp.

Vous pouvez spécifier le port du nœud TCP pour un autre équilibreur de charge ou NodePort en cours d'exécution dans votre cluster. Toutefois, si le port de noeud réside en dehors de la plage30000-32767, vous devez modifier le groupe de sécurité du cluster VPC kube-<cluster-ID> pour autoriser le trafic entrant dans le port spécifié.

Notez que si la valeur de port spécifiée concerne un service qui tombe en panne de manière inattendue ou dont la valeur de port est reconfigurée, les contrôles d'intégrité d' TCP cessent de fonctionner jusqu'à ce que le service soit de nouveau opérationnel ou que vous reconfiguriez l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-udp avec une nouvelle valeur de port TCP. Pour éviter cela, vous pouvez spécifier le portkubelet``10250, qui est une valeur de port statique qui permet de ne pas rencontrer d'interruptions de service. Toutefois, vous devez modifier le groupe de sécurité du cluster VPCkube-<cluster-ID> pour accepter le trafic entrant à partir du portkubelet.

Vous souhaitez éviter la complexité liée à la configuration de ports d' TCP s supplémentaires pour les contrôles d'intégrité dans un équilibreur de charge UDP? Définissez externalTrafficPolicysur Localpour utiliser les vérifications d'intégrité HTTP, qui ne nécessitent aucune spécification de port supplémentaire.

Modification des sous-réseaux ou des zones d'équilibreur de charge

Une fois que vous avez créé un NLB VPC, vous ne pouvez pas reconfigurer le sous-réseau d'écoute avec lequel il a été créé. Si vous souhaitez modifier le sous-réseau d'écoute d'un VPC NLB existant, vous devez supprimer, mettre à jour, puis réappliquer le service LoadBalancer Kubernetes correspondant.

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Répertoriez vos services Kubernetes et recherchez le nom du service LoadBalancer à modifier.

    oc get services
    

    Exemple de sortie

    NAME                     TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                        AGE
    my-load-balancer         LoadBalancer   172.21.77.198   52.118.150.107   8080:32767/TCP,443:30943/TCP   5d
    
  3. Recherchez l'équilibreur de charge de VPC qui correspond au service Kubernetes LoadBalancer.

    Les noms d'équilibreurs de charge de VPC sont au format kube-<cluster_ID>-<kubernetes_lb_service_UID>. Pour afficher votre ID de cluster, exécutez ibmcloud ks cluster get --cluster <cluster_name>. Pour afficher l'UID de service de Kubernetes LoadBalancer, exécutez oc get svc <load-balancer-name> -o yaml et recherchez la zone metadata.uid dans la sortie. Les tirets (-) sont supprimés de l'identifiant unique (UID) du service LoadBalancer Kubernetes dans le nom de l'équilibreur de charge VPC.

    ibmcloud is load-balancers
    

    Exemple de sortie

    ID                                          Name                                                         Family        Subnets                                       Is public   Provision status   Operating status   Resource group      
    r000-5aaaa11f6-c111-111f-b2e0-1c11aaaaf0dc0   kube-c441c43d02mb8mg00r70-3e25d0b5bf11111111fe4ca3f11111cb   Network       subnet-1                                  true        active             online             default                                                    Application      
    
  4. Obtenez la définition de service Kubernetes LoadBalancer et enregistrez la sortie dans un fichier yaml appelé my-lb.yaml.

    oc describe service my-load-balancer -o yaml
    
  5. Supprimez le service Kubernetes LoadBalancer. Cela supprime également l'équilibreur de charge de VPC correspondant.

    oc delete service my-load-balancer
    
  6. Mettez à jour le fichier de définition de service Kubernetes LoadBalancer avec les modifications de sous-réseau ou de zone que vous souhaitez implémenter. Ne modifiez pas le nom du service LoadBalancer. Pour plus de détails sur la spécification de sous-réseaux ou de zones pour les équilibreurs de charge réseau, voir Configuration d'un équilibreur de charge réseau de VPC.

  7. Appliquez le nouveau fichier de définition LoadBalancer.

    oc apply -f my-lb.yaml
    
  8. Vérifiez que le service Kubernetes LoadBalancer est recréé avec succès dans votre cluster. Lors de la création du service, le champ Ingress ( LoadBalancer ) est renseigné avec une adresse IP externe pour le NLB.

    oc describe service my-load-balancer
    

    Exemple de sortie

    NAME:                     my-load-balancer
    Namespace:                default
    Labels:                   <none>
    Annotations:              service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: nlb
    Selector:                 app=echo-server
    Type:                     LoadBalancer
    IP:                       172.X.XXX.XX
    LoadBalancer Ingress:     169.XXX.XXX.XXX
    Port:                     tcp-80  80/TCP
    TargetPort:               8080/TCP
    NodePort:                 tcp-80  32022/TCP
    Endpoints:                172.XX.XX.XXX:8080,172.XX.XX.XX:8080,172.XX.XX.XX:8080 + 3 more...
    Session Affinity:         None
    External Traffic Policy:  Local
    HealthCheck NodePort:     30882
    Events:
        Type     Reason                           Age                  From                Message
    ----     ------                           ----                 ----                -------
    Normal   EnsuringLoadBalancer             9m27s (x7 over 15m)  service-controller  Ensuring load balancer
    Normal   EnsuredLoadBalancer              9m20s                service-controller  Ensured load balancer
    Normal   CloudVPCLoadBalancerNormalEvent  8m17s                ibm-cloud-provider  Event on cloud load balancer myvpcnlb for service default/my-load-balancer with UID 2d93b07d-ecf6-41d2-ad3f-9c2985122ec1: The VPC load balancer that routes requests to this Kubernetes LoadBalancer service is currently online/active.
    
  9. Vérifiez que l'équilibreur de charge de VPC est recréé et que le sous-réseau ou la zone sont mis à jour. Notez que le provisionnement de l'équilibreur de charge VPC prend quelques minutes et qu'un statut create_pending en cours peut s'afficher jusqu'à ce que le provisionnement soit terminé.

    ibmcloud is load-balancers
    

    Exemple de sortie

    ID                                          Name                                                         Family        Subnets                                       Is public   Provision status   Operating status   Resource group     
    r006-5ecc68f6-c751-409f-b2e0-1c69babf0dc0   kube-c441c43d02mb8mg00r70-3e25d0b5bf03445796fe4ca3f73885cb   Network       subnet-2                                  true        active             online             default  
    

Limitations

Passez en revue les paramètres et limitations par défaut suivants.

  • Consultez les limitations connues des équilibreurs de charge d'application VPC et les limitations connues des équilibreurs de charge de réseau VPC.
  • Les ALB de VPC privé n'acceptent pas tout le trafic ; ils acceptent uniquement le trafic RFC 1918.
  • Les NLB de VPC privés doivent être créés sur un sous-réseau VPC dédié qui doit exister dans le même VPC et dans le même emplacement que votre cluster, mais le sous-réseau ne peut pas être connecté à votre cluster ou à vos nœuds worker.
  • Red Hat OpenShift: bien que le protocole SCTP Kubernetes soit généralement disponible dans l'édition de communauté Kubernetes, la création d'équilibreurs de charge qui utilisent ce protocole n'est pas prise en charge dans les clusters IBM Cloud Kubernetes Service.
  • Un équilibreur de charge VPC est créé pour chaque service Kubernetes LoadBalancer que vous créez et il achemine les demandes uniquement vers ce service Kubernetes LoadBalancer. Dans tous vos clusters de VPC de votre VPC, vous pouvez créer jusqu'à 50 équilibreurs de charge de VPC. Pour plus d'informations, voir la documentation sur les quotas VPC.
  • L'équilibreur de charge VPC peut acheminer les demandes vers un nombre limité de noeuds worker. Le nombre maximal de noeuds vers lesquels vous pouvez acheminer des demandes dépend de la manière dont vous définissez l'annotation externalTrafficPolicy.
    • Si vous définissez externalTrafficPolicy: Cluster dans votre configuration d'équilibreur de charge:
      • L'équilibreur de charge VPC achemine vers les 8 premiers noeuds worker qui sont reconnus dans chaque zone. Pour un cluster avec des nœuds de travail dans trois zones, cela signifie que l'équilibreur de charge achemine les données vers 24 nœuds de travail au total. Pour un cluster à zone unique, l'équilibreur de charge achemine vers 8 noeuds worker au total. Vous pouvez modifier le nombre de nœuds de travail par zone vers lesquels l'équilibreur de charge se dirige à l'aide de l'option service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-member-quota, mais le nombre total pour toutes les zones ne peut pas dépasser 50. Si la grappe compte moins de 50 nœuds de travail dans toutes les zones, spécifiez 0 pour router vers tous les nœuds de travail d'une zone. La kube-proxy configure les tables IP pour acheminer le trafic entrant du nœud de travail vers le module d'application, quel que soit le nœud sur lequel le module d'application réside.
    • Si vous définissez externalTrafficPolicy: Local dans votre configuration d'équilibreur de charge, l'équilibreur de charge VPC est créé uniquement s'il y a 50 noeuds worker ou moins sur le cluster. Cette limite est définie par les limitations de quota VPC de 50 membres de pool par pool d'équilibreur de charge VPC. Pour éviter cette limitation, utilisez l'annotation service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector pour limiter les noeuds worker qui se trouvent dans le pool d'équilibreurs de charge. Par exemple, vous pouvez utiliser cette annotation pour forcer le trafic entrant vers un pool de noeuds worker spécifique. Si vous utilisez cette annotation pour forcer le trafic vers un pool de noeuds worker spécifique, vous devez également vous assurer que le pod d'application s'exécute également dans le même pool de noeuds worker.
  • Lorsque vous définissez le fichier YAML de configuration pour un service Kubernetes LoadBalancer, les annotations et paramètres ci-dessous ne sont pas pris en charge :
    • service.kubernetes.io/ibm-load-balancer-cloud-provider-vlan: "<vlan_id>"
    • service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"
    • service.kubernetes.io/ibm-load-balancer-cloud-provider-ipvs-scheduler: "<algorithm>"
    • spec.loadBalancerIP
    • spec.loadBalancerSourceRanges
    • Equilibreurs de charge réseau VPC uniquement : service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "proxy-protocol"
    • Equilibreurs de charge d'application VPC uniquement : le paramètre externalTrafficPolicy: Local est pris en charge, mais il ne conserve pas l'adresse IP source de la demande.
  • Lorsque vous supprimez un cluster VPC, tous les équilibreurs de charge VPC non persistants, nommés au format kube-<cluster_ID>-<kubernetes_lb_service_UID> et créés automatiquement par Red Hat OpenShift on IBM Cloud pour les services Kubernetes LoadBalancer dans ce cluster, sont également supprimés automatiquement. Toutefois, les équilibreurs de charge persistants avec des noms uniques et des équilibreurs de charge VPC que vous avez créés manuellement dans votre VPC ne sont pas supprimés.
  • Vous pouvez enregistrer jusqu'à 128 sous-domaines pour les noms d'hôte d'équilibreur de charge VPC. Cette limite peut être levée sur demande en ouvrant un cas de support.
  • Les sous-domaines que vous enregistrez pour les équilibreurs de charge VPC sont limités à 130 caractères maximum.
  • Les équilibreurs de charge d'application VPC écoutent sur les mêmes sous-réseaux VPC sur lesquels les noeuds worker de cluster sont alloués, sauf si le service d'équilibreur de charge Kubernetes est créé avec les annotations service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets ou service.kubernetes.io/ibm-load-balancer-cloud-provider-zone, ce qui limite le trafic vers des noeuds spécifiques.
    • Les sous-réseaux et les zones de l'équilibreur de charge d'application VPC peuvent être mis à jour ou modifiés après la création de l'équilibreur de charge d'application. Si vous ajoutez d'autres zones au cluster ou mettez à jour le service d'équilibreur de charge Kubernetes avec les annotations service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets ou service.kubernetes.io/ibm-load-balancer-cloud-provider-zone, l'équilibreur de charge d'application VPC est mis à jour pour être à l'écoute sur les nouveaux sous-réseaux.
  • Les équilibreurs de charge de réseau VPC n'écoutent que sur un seul sous-réseau VPC dans une seule zone. Ils ne peuvent pas être configurés pour être à l'écoute sur plusieurs sous-réseaux VPC ou pour être à l'écoute sur plusieurs zones. Vous pouvez spécifier le sous-réseau unique pour un équilibreur de charge de réseau à écouter avec les annotations service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets ou service.kubernetes.io/ibm-load-balancer-cloud-provider-zone.
    • Les équilibreurs de charge de réseau VPC transmettent le trafic entrant à tous les noeuds worker du cluster sauf si vous limitez le trafic entrant à des noeuds worker spécifiques avec service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-node-selector ou service.kubernetes.io/ibm-load-balancer-cloud-provider-zone annotations. Pour limiter le trafic à une zone spécifique, vous pouvez utiliser ces annotations pour spécifier des noeuds worker dans cette zone.
  • La désactivation de l'allocation de noeud d'équilibrage de charge n'est pas prise en charge pour les équilibreurs de charge VPC.
  • Les NLB VPC peuvent être configurés avec à la fois UDP et TCP sur le même équilibrateur de charge VPC, mais le port d'écoute doit être différent.