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

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

Virtual Private Cloud 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 Kubernetes et en exposant un port de noeud (NodePort). Utilisez cette option pour tester IBM Cloud® Kubernetes Service 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é.

Expose an app in IBM Cloud Kubernetes Service by using NodePort
Expose an app by using 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

Exposez votre application en tant que service NodePort Kubernetes.

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 n'avez pas encore d'application prête, vous pouvez utiliser un exemple d'application Kubernetes appelé Guestbook.

Avant de commencer

Pour utiliser un service NodePort :

  1. Dans le fichier de configuration de votre application, définissez une section de 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.

    Example

    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 voir quels NodePorts sont déjà utilisés, exécutez la commande kubectl 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 ks worker ls --cluster <cluster_name>
      

      Sortie

      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.

      kubectl describe service <service_name>
      

      Sortie

      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.

    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.