web-dev-qa-db-fra.com

Le service NodePort n'est pas accessible de manière externe via le numéro `port`

J'ai la configuration de service suivante:

kind: Service
apiVersion: v1
metadata:
  name: web-srv
spec:
  type: NodePort
  selector:
    app: userapp
    tier: web
  ports:
    - protocol: TCP
      port: 8090
      targetPort: 80
      nodePort: 31000

et un conteneur nginx est derrière ce service. Bien que je puisse accéder au service via nodePort, le service n'est pas accessible via le champ port. Je suis capable de voir les configurations avec kubectl et le tableau de bord Kubernetes mais curling à ce port (par exemple curl http://192.168.0.100:8090) génère une Connection Refused error.

Je ne sais pas quel est le problème ici. Dois-je m'assurer que des services de proxy s'exécutent dans le nœud ou le conteneur?

8

Obtenez l'adresse IP du service kubernetes puis appuyez sur 8090; Cela fonctionnera. nodeport implique que le service est lié au nœud au port 31000.

Ce sont les 3 choses qui vont marcher:

curl <node-ip>:<node-port>        # curl <node-ip>:31000
curl <service-ip>:<service-port>  # curl <svc-ip>:8090
curl <pod-ip>:<target-port>       # curl <pod-ip>:80

Alors maintenant, regardons 3 situations:

1. Vous êtes dans le cluster kubernetes (vous êtes un pod)

<service-ip> et <pod-ip> et <node-ip> fonctionneront.

2. Vous êtes sur le noeud

<service-ip> et <pod-ip> et <node-ip> fonctionneront.

3. Vous êtes en dehors du noeud

Seul <node-ip> fonctionnera en supposant que <node-ip> est accessible.

17
iamnat

Le comportement est comme prévu puisque je suppose que vous essayez d'accéder au service de l'extérieur du cluster. Cela signifie que seule la nodePort expose le service au monde extérieur au cluster. port fait référence au port du pod, tel qu’exposé par le conteneur situé à l’intérieur du pod. Ce comportement est généralement souhaité pour prendre en charge des grappes de services qui sont généralement représentés par un répartiteur de charge. Ainsi, l’équilibreur de charge exposera le port que vous souhaitez pour votre service (par exemple, load-balancer:80) et le transmettra au nodePort sur tous les nœuds de manière à répartir la charge.

Si vous accédez au service de l'intérieur du cluster, vous devriez pouvoir y accéder via service-name:service-port grâce au DNS intégré.

Des informations plus détaillées sont disponibles sur docs .

0