Test de l'accès à des applications avec des ports de noeud (NodePort)

Cloud privé virtuel Infrastructure classique Satellite

Rendez votre application conteneurisée accessible sur Internet en utilisant l'adresse IP publique de n'importe quel noeud worker dans un cluster Red Hat OpenShift et en exposant un port de noeud (NodePort). Utilisez cette option pour tester Red Hat® OpenShift® on IBM Cloud® et pour un accès public à court terme.

A propos du service NodePort

Exposez un port public sur votre noeud worker et utilisez l'adresse IP publique du noeud worker pour accéder au service du cluster depuis Internet.

Lorsque vous exposez votre application en créant un service Kubernetes du type NodePort, une valeur de port de noeud (NodePort) comprise entre 30000 et 32767 et une adresse IP interne de cluster sont affectées au service. Le service NodePort fait office de point d'entrée externe pour les demandes entrantes vers votre application. Le port de noeud affecté est exposé au public dans les paramètres kubeproxy de chaque noeud worker dans le cluster. Chaque noeud worker commence à écouter sur le port de noeud affecté pour détecter des demandes entrantes pour le service. Pour accéder au service à partir d'Internet, vous pouvez utiliser l'adresse IP publique d'un nœud worker qui a été affecté lors de la création du cluster et du NodePort au format <IP_address>:<nodeport>. Si vous souhaitez accéder au service sur le réseau privé, utilisez l'adresse IP privée de n'importe quel noeud worker à la place de l'adresse IP publique.

Le diagramme suivant montre comment la communication est acheminée vers une application depuis Internet lorsqu'un service NodePort est configuré.

Exposer une application dans IBM Cloud Kubernetes Service en utilisant NodePort
Exposer une application en utilisant NodePort NodePort

  1. Une demande est envoyée à votre application en utilisant l'adresse IP publique de votre noeud worker et le port de noeud (NodePort) sur le noeud worker.

  2. La demande est automatiquement transmise à l'adresse IP et au port du cluster interne du service NodePort. L'adresse IP du cluster interne est accessible uniquement à l'intérieur du cluster.

  3. kube-proxy achemine la demande vers le service NodePort Kubernetes correspondant à l'application.

  4. La demande est transmise à l'adresse IP privée du pod sur lequel l'application est déployée. Si plusieurs instances d'application sont déployées dans le cluster, le service NodePort achemine les demandes entre les pods d'application.

L'adresse IP publique du noeud worker n'est pas permanente. Lorsqu'un noeud worker est supprimé ou recréé, une nouvelle adresse IP publique lui est affectée. Vous pouvez utiliser le service NodePort pour tester l'accès public à votre application ou lorsque l'accès public n'est nécessaire que pour un temps très bref. Si vous avez besoin d'une adresse IP publique stable et d'une plus grande disponibilité de votre service, exposez votre application en utilisant un service équilibreur de charge de réseau (NLB) ou Ingress.

Activation de l'accès à une application à l'aide d'un service NodePort

Publiez votre application en tant que service « Kubernetes » NodePort.

Comme les nœuds worker des clusters VPC n'ont pas d'adresse IP publique, vous pouvez accéder à une application via un NodePort uniquement si vous êtes connecté à votre réseau VPC privé, par exemple, via une connexion VPN. Pour accéder à une application à partir d'Internet, vous devez utiliser à la place un équilibreur de charge VPC ou un service Ingress.

Si vous ne disposez pas encore d'une application prête à l'emploi, vous pouvez utiliser une application d'exemple de l' Kubernetes intitulée « Guestbook ».

Avant de commencer

Pour utiliser un service NodePort :

  1. Dans le fichier de configuration de votre application, définissez une section « service ».

    Dans l'exemple Guestbook, il existe une section de service front-end dans le fichier de configuration. Pour rendre l'application Guestbook disponible en externe, ajoutez le type NodePort et un port de noeud compris entre 30000 et 32767 dans la section de service front-end.

    Exemple

    apiVersion: v1
    kind: Service
    metadata:
      name: <my-nodeport-service>
      labels:
        <my-label-key>: <my-label-value>
    spec:
      selector:
        <my-selector-key>: <my-selector-value>
      type: NodePort
      ports:
       - port: <8081>
         # nodePort: <31514>
    
    Description des composants du service NodePort
    Composant Description
    name Remplacez <my-nodeport-service> par un nom pour votre service NodePort. Découvrez comment sécuriser vos informations personnelles lorsque vous utilisez des ressources Kubernetes.
    labels Remplacez <my-label-key> et <my-label-value> par le libellé que vous souhaitez utiliser pour votre service.
    selector Remplacez <my-selector-key> et <my-selector-value> par la paire clé/valeur utilisée dans la section spec.template.metadata.labels de votre déploiement YAML. Pour associer le service au déploiement, le sélecteur doit correspondre aux libellés du déploiement.
    port Remplacez <8081> par le port sur lequel votre service écoute.
    nodePort Facultatif : remplacez <31514> par un NodePort dans la plage 30000 - 32767. Ne spécifiez pas un port de noeud déjà utilisé par un autre service. Si aucune valeur NodePort n'est affectée, une valeur Nodeport aléatoire est affectée pour vous.
    Pour spécifier un NodePort et déterminer les NodePorts déjà utilisés, exécutez la commande oc get svc. Les ports de noeud utilisés figurent sous la zone Ports.
  2. Sauvegardez le fichier de configuration mis à jour.

  3. Une fois l'application déployée, vous pouvez utiliser l'adresse IP publique de n'importe quel noeud worker et la valeur NodePort pour composer l'URL publique d'accès à l'application dans un navigateur. Si vos noeuds worker sont connectés uniquement à un VLAN privé, un service NodePort privé a été créé et peut être accessible via l'adresse IP privée d'un noeud worker.

    1. Obtenez l'adresse IP publique d'un noeud worker dans le cluster. Si vous souhaitez accéder au noeud worker sur un réseau privé ou si vous disposez d'un cluster de VPC, procurez-vous l'adresse IP privée à la place.
        ibmcloud oc worker ls --cluster CLUSTER_NAME
        ```
        Sortie
    
        ```sh {: screen}
        ID                                                Public IP   Private IP    Size     State    Status
        prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w1  192.0.2.23  10.100.10.10  u3c.2x4  normal   Ready
        prod-dal10-pa215dcf5bbc0844a990fa6b0fcdbff286-w2  192.0.2.27  10.100.10.15  u3c.2x4  normal   Ready
        ```
    2. Si une valeur NodePort aléatoire a été affectée, identifiez-la.
    
    ```sh {: pre}
        oc describe service <service_name>
        ```
        Sortie
    
        ```sh {: screen}
        NAME:                   <service_name>
        Namespace:              default
        Labels:                 run=<deployment_name>
        Selector:               run=<deployment_name>
        Type:                   NodePort
        IP:                     10.10.10.8
        Port:                   <unset> 8080/TCP
        NodePort:               <unset> 30872/TCP
        Endpoints:              172.30.171.87:8080
        Session Affinity:       None
        No events.
        ```
        Dans cet exemple, la valeur de NodePort est `30872`.
    
        Si la section **Nœuds finaux** affiche `<none>`, vérifiez les `<selectorkey>` et les `<selectorvalue>` que vous utilisez dans la section `spec.selector` du service NodePort. Vérifiez qu'il est identique à la paire _clé/valeur_ que vous avez utilisée dans la section `spec.template.metadata.labels` de votre déploiement YAML.
        {: note}
    
    3. Formez l'adresse URL avec l'une des adresses IP du noeud worker et la valeur de NodePort. Exemple : `http://192.0.2.23:30872`.
            Pour les clusters VPC, vous devez être connecté au réseau privé (par exemple, via une connexion VPN) pour accéder à l'adresse IP privée et à la valeur NodePort du noeud worker.
    {: note}