web-dev-qa-db-fra.com

Comment exposer un service Kubernetes en externe à l'aide de NodePort

J'exécute le cluster CoreOS k8s sur Mac OSX, ce qui signifie qu'il s'exécute dans VirtualBox + Vagrant

J'ai dans mon fichier service.yaml:

spec:
  type: NodePort

Quand je tape:

kubectl get services

Je vois:

NAME             CLUSTER_IP       EXTERNAL_IP   PORT(S)    SELECTOR                                
kubernetes       10.100.0.1       <none>        443/TCP    <none>                             
my-frontend      10.100.250.90    nodes         8000/TCP   name=my-app

Qu'est-ce que l'IP externe des "nœuds"? Comment accéder à mon frontend en externe?

17
Pyramid Newbie

En plus des types de services "NodePort", il existe d'autres moyens de pouvoir interagir avec les services kubernetes depuis l'extérieur du cluster:

  • Utilisez le type de service "LoadBalancer". Cela ne fonctionne que pour certains fournisseurs de cloud et ne fonctionnera pas pour virtualbox, mais je pense qu'il sera bon de connaître cette fonctionnalité. Lien vers la documentation
  • Utilisez l'une des dernières fonctionnalités appelées "entrée". Voici la description du manuel "Une entrée est un ensemble de règles qui permettent aux connexions entrantes d'atteindre les services du cluster. Elle peut être configurée pour donner des services aux URL accessibles en externe, équilibrer le trafic, terminer SSL , proposer un hébergement virtuel basé sur un nom, etc. ". Lien vers la documentation
  • Si kubernetes n'est pas une exigence stricte et que vous pouvez passer à la dernière origine openshift (qui est "kubernetes on steroids"), vous pouvez utiliser la fonction Origin appelée "router".
18
Vyacheslav Enis

Je suppose que vous utilisez MiniKube pour Kubernetes. Dans ce cas, pour identifier votre adresse IP de nœud, utilisez la commande suivante:

.\minikube.exe ip

Si le service exposé est de type = Nodeport, pour vérifier le port exposé, utilisez la commande suivante:

.\kubectl.exe describe service <service-name>

Vérifiez le port Node dans le résultat. De plus, si vous voulez avoir tous ces détails via Nice UI, vous pouvez lancer le tableau de bord Kubernetes présent à l'adresse suivante:

<Node-ip>:30000
7
Aprimit

Le moyen le plus simple d'obtenir les ports hôtes est kubectl describe services my-frontend. Le port du nœud sera affiché.

Vous pouvez également vérifier l'API:

  • api/v1/namespaces/{namespace_name}/services/{service_name}

ou listez tout:

  • api/v1/namespaces/default/services

Enfin, vous pouvez choisir un nodePort fixe dans le service.yml

3
ant31

Voici le document sur les adresses des nœuds: http://kubernetes.io/docs/admin/node/#addresses

Vous pouvez spécifier le numéro de port de nodePort lorsque vous spécifiez le service. Si vous n'avez pas spécifié manuellement de port, le système vous en attribuera un. Vous pouvez kubectl get services -o yaml et recherchez le port sur spec.ports [*]. nodePort, comme suggéré dans la doc ici: https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/services .md # type-nodeport

Et vous pouvez accéder à votre front-end aux {adresses externes des nœuds}: {nodePort}

J'espère que cela t'aides.

1
caesarxuchao