1
votes

Comment exposer le service en dehors du cluster k8s?

J'ai lancé une application Hello World en utilisant la commande ci-dessous.

kubectl run hello-world --replicas = 2 --labels = "run = load-balancer-example" --image = gcr. io / google-samples / node-hello: 1.0 --port = 8080

A créé un service comme ci-dessous

kubectl expose le déploiement hello-world - type = NodePort --name = example-service

Les pods sont en cours d'exécution

curl http://10.XX.XX.XX:8080
Hello Kubernetes!

Service:

NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
example-service   NodePort    10.XX.XX.XX     <none>        8080:32023/TCP   66s

Ici, je suis capable de le tester via curl à l'intérieur du cluster.

NAME                          READY   STATUS    RESTARTS   AGE
hello-world-68ff65cf7-dn22t   1/1     Running   0          2m20s
hello-world-68ff65cf7-llvjt   1/1     Running   0          2m20s

Comment puis-je accéder à ce service en dehors de mon cluster? (exemple, via le navigateur d'un ordinateur portable)


1 commentaires

4 Réponses :


1
votes

Vous devriez pouvoir y accéder en dehors du cluster en utilisant NodePort assingned (32023). Veuillez coller le suivant http://: dans votre navigateur et vous pourrez accéder à votre application:

http://<MASTER/WORKER_IP>:32023


2 commentaires

il ne doit pas utiliser 10.xx.xx.xx. il est accessible de l'intérieur


Oui, vous avez raison, c'est clusterIP et non MasterIP. Merci



2
votes

vous devriez essayer

http: // IP_OF_KUBERNETES: 32023

IP_OF_KUBERNETES peut être votre adresse IP principale, votre adresse IP de travailleur lorsque vous exposez un port dans kubernetes .Il expose ce port dans l'ensemble de votre serveur dans le cluster.Imaginez que vous avez deux nœuds de travail avec IP1 et IP2 et un pode fonctionne dans IP1 et dans worker2 il n'y a pas de pods mais vous pouvez accéder à votre pod par

http: // IP1: 32023

http: // IP2: 32023


0 commentaires

0
votes

Vous pouvez accéder à votre service en utilisant MasterIP ou WorkerIP. Si vous prévoyez de l'utiliser en production ou de manière plus fiable, vous devez créer un service avec type LoadBalancer . Et utilisez l'adresse IP des équilibreurs de charge pour y accéder.

Si vous utilisez un environnement cloud, assurez-vous que les règles de pare-feu autorisent le trafic entrant.

Cela se chargera de rediriger la requête vers le nœud sur lequel le pod s'exécute. Sinon, vous devrez appuyer manuellement sur masterIP ou workerIP en fonction de l'emplacement d'exécution du pod. Si le pod est déplacé vers un nœud différent, vous devrez changer l'adresse IP que vous frappez

Équilibreur de charge de service


0 commentaires

0
votes

Des réponses ont déjà été fournies, mais j'ai senti que ce sujet avait besoin d'être consolidé.

Cela semble assez simple. NodePort expose en fait votre application comme son nom l'indique sur le port de chaque nœud. Il vous suffit donc de trouver l'adresse IP du nœud sur lequel se trouve le pod. Vous pouvez le faire en exécutant: kubectl get pods -o wide afin que vous puissiez trouver l'adresse IP ou le nom du nœud sur lequel se trouve le pod, puis suivez simplement l'état des réponses précédentes: donc http: // : PORT

Il existe d'autres méthodes: Vous pouvez déployer Ingress Controller et configurer Ingress afin l'application sera accessible via Internet.

Vous pouvez également utiliser proxy kubectl pour exposer le service ClusterIP en dehors du cluster. Comme dans cet exemple avec Tableau de bord .

Une autre méthode consiste à utiliser le type LoadBalancer , qui nécessite infrastructure cloud sous-jacente.

Si vous utilisez minikube, vous pouvez essayer d'exécuter la liste des services minikube pour vérifier vos services exposés et leur adresse IP.


0 commentaires