Estoy tratando de implementar nginx en kubernetes, la versión de kubernetes es v1.5.2, he implementado nginx con 3 réplicas, el archivo YAML está debajo,
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 control de kubernetes sino también en la terminal.
así que ayúdame a resolver este problema. Gracias ...
fuente
LoadBalancer
como un tipo de servicio que es un tipo de servicio válido.NodePort
yingress
hay otras formas de hacerlo pero no resolver realmente el problema, ¿verdad?LoadBalancer
?Si está utilizando Minikube, ¡hay un comando mágico!
Esperemos que alguien pueda ahorrar unos minutos con esto.
Enlace de referencia https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel
fuente
minikube tunnel
y que en realidad resuelve elpending
problema, pero entonces el nuevo IP externa no funciona: me sale un error de tiempo de espera ...Si no está utilizando GCE o EKS (que utilizó
kubeadm
), puede agregar unaexternalIPs
especificación a su servicio YAML. Puede usar la IP asociada con la interfaz principal de su nodo, comoeth0
. Luego puede acceder al servicio externamente, utilizando la IP externa del nodo.fuente
Para acceder a un servicio
minikube
, debe ejecutar el siguiente comando:Más información aquí: Minikube GitHub
fuente
Creé un clúster de nodo único k8s usando kubeadm. Cuando probé PortForward y el proxy kubectl , mostró IP externa como pendiente.
En mi caso, parcheé el servicio así:
Después de esto, comenzó a servir sobre la IP pública
fuente
Si se ejecuta en minikube , no olvide mencionar el espacio de nombres si no está utilizando el predeterminado.
servicio minikube << service_name >> --url --namespace = << namespace_name >>
fuente
Si está utilizando minikube, ejecute los siguientes comandos desde la terminal,
fuente
mismo problema:
Sin embargo, es accesible a través de esa http://192.168.99.100:30454 .
fuente
Siguiendo la respuesta de @ Javier. He decidido ir a "parchar la IP externa" para mi equilibrador de carga.
Esto reemplazará ese 'pendiente' con una nueva dirección IP parcheada que puede usar para su clúster.
Para más sobre esto. Consulte la publicación de karthik sobre el soporte de LoadBalancer con Minikube para Kubernetes
No es la forma más limpia de hacerlo. Necesitaba una solución temporal. Espero que esto ayude a alguien.
fuente
Use NodePort:
kubectl ejecutar inicio de sesión de usuario --replicas = 2 --labels = "ejecutar = inicio de sesión de usuario" --imagen = kingslayerr / teamproject: versión2 --port = 5000
kubectl expone la implementación de inicio de sesión de usuario --type = NodePort --name = user-login-service
kubectl describe los servicios user-login-service (anote el puerto)
kubect cluster-info (IP-> Obtener la IP donde se ejecuta el maestro)
Se puede acceder a su servicio en (IP) :( puerto)
fuente
Al usar Minikube, puede obtener la IP y el puerto a través del cual puede acceder al servicio ejecutando el servicio de minikube kubia-http.
fuente
Si no está en una nube compatible (aws, azure, gcloud, etc.), no puede usar LoadBalancer sin MetalLB https://metallb.universe.tf/ pero todavía está en beta.
fuente
LoadBalancer ServiceType solo funcionará si la infraestructura subyacente admite la creación automática de Load Balancers y tiene el soporte respectivo en Kubernetes, como es el caso de Google Cloud Platform y AWS. Si no se configura dicha función, el campo de dirección IP de LoadBalancer no se rellena y aún está en estado pendiente, y el Servicio funcionará de la misma manera que un Servicio de tipo NodePort
fuente
Puede parchear la IP del nodo donde se alojan los pods (IP privada del nodo), esta es la solución fácil.
Tomando referencia con las publicaciones anteriores, siguiente funcionó para mí:
servicio de parche kubectl my-loadbalancer-service-name \ -n lb-service-namespace \ -p '{"spec": {"type": "LoadBalancer", "externalIPs": ["xxx.xxx.xxx.xxx Private IP del servidor físico - Nodo - donde se realiza la implementación "]}} '
fuente
eliminar el servicio existente y crear un mismo servicio nuevo resolvió mis problemas. Mi problema es que el equilibrio de carga que define Ip I se usa para que el punto final externo esté pendiente. Cuando cambié una nueva IP de equilibrio de carga, todavía no funcionaba. Finalmente, eliminar el servicio existente y crear uno nuevo resolvió mi problema.
fuente
Verifique los registros del controlador Kube. Pude resolver este problema estableciendo las etiquetas de clusterID en la instancia ec2 en la que implementé el clúster.
fuente
Si es su clúster privado de k8s, MetalLB sería mejor. Debajo están los pasos.
Paso 1: Instale MetalLB en su clúster
Paso 2: configúrelo utilizando un mapa de configuración
Paso 3: cree su servicio para obtener una IP externa (aunque sería una IP privada).
ARY:
Antes de la instalación de MetalLB:
Después de la instalación de MetalLB:
fuente
Agregar una solución para aquellos que encontraron este error mientras se ejecutaban amazon-eks.
Primero de todo correr:
Y luego revise el
events
campo en la salida de ejemplo a continuación:Revise el mensaje de error:
En mi caso, la razón por la que no se proporcionaron subredes adecuadas para crear el ELB fueron:
1: El clúster EKS se implementó en el grupo de subredes incorrecto: subredes internas en lugar de cara al público.
(*) De manera predeterminada, los servicios de tipo
LoadBalancer
crean equilibradores de carga de cara al público si noservice.beta.kubernetes.io/aws-load-balancer-internal: "true"
se proporcionó ninguna anotación).2: Las subredes no se etiquetaron de acuerdo con los requisitos mencionados aquí .
Etiquetar VPC con:
Etiquetado de subredes públicas con:
fuente