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é.
-
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.
-
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.
-
kube-proxy
achemine la demande vers le service NodePort Kubernetes correspondant à l'application. -
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
- Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.
- Clusters de VPC: Autorisez les demandes de trafic qui sont acheminées vers NodePorts sur vos noeuds worker.
Pour utiliser un service NodePort :
-
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 sectionspec.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 commandekubectl get svc
Les ports de noeud utilisés figurent sous la zone Ports. -
Sauvegardez le fichier de configuration mis à jour.
-
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.
-
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
-
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 sectionspec.selector
du service NodePort. Vérifiez qu'il est identique à la paire clé/valeur que vous avez utilisée dans la sectionspec.template.metadata.labels
de votre déploiement YAML. -
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.
-