IP externa del servicio Kubernetes pendiente

Resuelto Pankaj Jackson asked hace 7 años • 32 respuestas

Estoy intentando implementar nginx en kubernetes, la versión de kubernetes es v1.5.2, implementé nginx con 3 réplicas, el archivo YAML se encuentra a continuación,

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - containerPort: 80

y ahora quiero exponer su puerto 80 en el puerto 30062 del nodo, para eso creé un servicio a continuación,

kind: Service
apiVersion: v1
metadata:
  name: nginx-ils-service
spec:
  ports:
    - name: http
      port: 80
      nodePort: 30062
  selector:
    app: nginx
  type: LoadBalancer

Este servicio funciona bien como debería, pero se muestra como pendiente no solo en el panel de Kubernetes sino también en la terminal. Salida terminalEstado del tablero

Pankaj Jackson avatar May 22 '17 17:05 Pankaj Jackson
Aceptado

Parece que está utilizando un clúster de Kubernetes personalizado (usando minikubeo kubeadmsimilar). En este caso, no hay ningún LoadBalancer integrado (a diferencia de AWS o Google Cloud). Con esta configuración predeterminada, solo puede usar NodePorto un controlador de ingreso.

Con el controlador de Ingress puede configurar un nombre de dominio que se asigne a su pod; no necesita darle el LoadBalancertipo a su Servicio si usa un Controlador de Ingreso.

Javier Salmeron avatar May 22 '2017 11:05 Javier Salmeron

Si estás usando Minikube, ¡hay un comando mágico!

$ minikube tunnel

Ojalá alguien pueda ahorrar unos minutos con esto.

Enlace de referencia https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel

Peter Zhou avatar Jan 19 '2019 08:01 Peter Zhou

Si no está utilizando GCE o EKS (usó kubeadm), puede agregar una externalIPsespecificación a su servicio YAML. Puede utilizar la IP asociada con la interfaz principal de su nodo, como eth0. Luego podrá acceder al servicio externamente, utilizando la IP externa del nodo.

...
spec:
  type: LoadBalancer
  externalIPs:
  - 192.168.0.10
toppur avatar Aug 17 '2018 19:08 toppur

Creé un clúster k8s de un solo nodo usando kubeadm. Cuando probé PortForward y kubectl proxy , mostró la IP externa como pendiente.

$ kubectl get svc -n argocd argocd-server
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-server   LoadBalancer   10.107.37.153   <pending>     80:30047/TCP,443:31307/TCP   110s

En mi caso he parcheado el servicio así:

kubectl patch svc <svc-name> -n <namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["172.31.71.218"]}}'

Después de esto, comenzó a funcionar a través de la IP pública.

$ kubectl get svc argo-ui -n argo
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
argo-ui   LoadBalancer   10.103.219.8   172.31.71.218   80:30981/TCP   7m50s
surya vallabhaneni avatar Jan 13 '2019 12:01 surya vallabhaneni