pods pending nodeport ingress clusterip kubernetes

pending - Cómo exponer un servicio de Kubernetes externamente usando NodePort



kubernetes pod port (4)

Ejecuto el cluster CoreOS k8s en Mac OSX, lo que significa que se ejecuta dentro de VirtualBox + Vagrant

Tengo en mi archivo service.yaml:

spec: type: NodePort

Cuando escribo:

kubectl get services

Veo:

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é es la "IP externa" de los nodos? ¿Cómo accedo a mi frontend externamente?


Además de los tipos de servicios "NodePort", hay otras formas adicionales de poder interactuar con los servicios de kubernetes desde fuera del clúster:

  • Utilice el tipo de servicio "LoadBalancer". Funciona solo para algunos proveedores de la nube y no funcionará para virtualbox, pero creo que será bueno conocer esa característica. Enlace a la documentación.
  • Utilice una de las últimas características llamadas "ingreso". Aquí hay una descripción del manual "Un ingreso es una colección de reglas que permite que las conexiones entrantes lleguen a los servicios de clúster. Puede configurarse para proporcionar servicios de urls accesibles externamente, tráfico de equilibrio de carga, terminar SSL, ofrecer alojamiento virtual basado en nombre de oferta, etc. . Enlace a la documentación.
  • Si kubernetes no cumple con los requisitos estrictos y puede cambiar al último origen de openshift (que es "kubernetes en esteroides"), puede usar la función de origen llamada "enrutador".

Aquí está el documento en las direcciones de los nodos: http://kubernetes.io/docs/admin/node/#addresses

Puede especificar el número de puerto de nodePort cuando especifique el servicio. Si no especificó manualmente un puerto, el sistema le asignará uno. Puede kubectl get services -o yaml y encontrar el puerto en spec.ports [*]. NodePort, como se sugiere en el documento aquí: https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/services.md#type-nodeport

Y puede acceder a su front-end en las direcciones externas de {nodos}: {nodePort}

Espero que esto ayude.


La forma más fácil de obtener los puertos de host es kubectl describe services my-frontend . Se mostrará el puerto del nodo.

También puedes consultar la api:

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

o enumerar todos:

  • api/v1/namespaces/default/services

Por último, puede elegir un nodePort fijo en service.yml


Supongo que estás usando MiniKube para Kubernetes. En tal caso, para identificar la dirección IP de su nodo, use el siguiente comando:

./minikube.exe ip

Si el servicio expuesto es de tipo = Nodeport, para verificar el puerto expuesto, use el siguiente comando:

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

Compruebe el puerto de nodo en el resultado. Además, si desea tener todos estos detalles a través de una buena interfaz de usuario, puede iniciar el Panel de Kubernetes presente en la siguiente dirección:

<Node-ip>:30000