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)
4 Réponses :
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
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
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
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
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: //
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.
Liriez-vous une documentation officielle avant de la publier sur Stack? - kubernetes.io/docs/tutorials/kubernetes-basics/expose/ … kubernetes.io/docs/tutorials/ application-sans-état /…