web-dev-qa-db-fra.com

kubernetes service ip externe en attente

J'essaie de déployer nginx sur kubernetes, la version de kubernetes est v1.5.2, J'ai déployé nginx avec 3 répliques, le fichier YAML est ci-dessous,

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

et maintenant je veux exposer son port 80 sur le port 30062 du noeud, pour cela j'ai créé un service en dessous, 

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

ce service fonctionne correctement, mais il est en attente non seulement sur le tableau de bord kubernetes mais aussi sur le terminal .  Terminal output  Dash board status

alors aidez-moi à résoudre ce problème. Merci ...

41
Pankaj Jackson

Il semble que vous utilisiez un cluster Kubernetes personnalisé (en utilisant minikube, kubeadm ou similaire). Dans ce cas, LoadBalancer n’est pas intégré (contrairement à AWS ou Google Cloud). Avec cette configuration par défaut, vous ne pouvez utiliser que NodePort (plus d’informations ici: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport ) ou un contrôleur de niveau. Avec Ingress Controller, vous pouvez configurer un nom de domaine qui correspond à votre pod (plus d’informations ici: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-controllers )

77
Javier Salmeron

Pour accéder à un service sur minikube, vous devez exécuter la commande suivante:

minikube service [-n NAMESPACE] [--url] NAME

Plus d'informations ici: Minikube GitHub

16
Saket Jain

Si vous n'utilisez pas GCE ou EKS (vous avez utilisé kubeadm), vous pouvez ajouter une spécification externalIPs à votre service YAML. Vous pouvez utiliser l'adresse IP associée à l'interface principale de votre nœud, telle que eth0. Vous pouvez ensuite accéder au service en externe, en utilisant l'adresse IP externe du nœud. 

...
spec:
  type: LoadBalancer
  externalIPs:
  - 192.168.0.10
13
toppur

Si vous utilisez Minikube, il existe une commande magique!

$ minikube tunnel

J'espère que quelqu'un pourra économiser quelques minutes avec cela.

Lien de référence https://github.com/kubernetes/minikube/blob/master/docs/networking.md#loadbalancer-emulation-minikube-tunnel

5
Peter Zhou

J'ai créé un cluster k8s à un seul noeud à l'aide de kubeadm. Quand j'ai essayé PortForward et proxy kubectl , il a montré une adresse IP externe en attente.

$ 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

Dans mon cas, j'ai corrigé le service comme ceci:

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

Après cela, il a commencé à servir sur IP publique

$ 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
2
surya vallabhaneni

Utilisez NodePort:

kubectl lance l'utilisateur login --replicas = 2 --labels = "lance = l'utilisateur" --image = kingslayerr/teamproject: version2 --port = 5000

kubectl expose déploiement utilisateur-login --type = NodePort --name = utilisateur-login-service

kubectl décrit les services utilisateur-connexion-service (notez le port)

kubect cluster-info (IP-> Obtenir l'IP où le maître est exécuté)

Votre service est accessible à (IP) :( port)

1
Shubham Sawant

Si vous utilisez minikube, n'oubliez pas de mentionner namespace si vous n'utilisez pas default.

minikube service << nom_service >> --url --namespace = << nom_espace_nom >>>

1
Mohsin

Suite à la réponse de @ Javier. J'ai décidé de "réparer l'IP externe" pour mon équilibreur de charge.

 $ kubectl patch service my-loadbalancer-service-name \
-n lb-service-namespace \
-p '{"spec": {"type": "LoadBalancer", "externalIPs":["192.168.39.25"]}}'

Ceci remplacera cette "en attente" par une nouvelle adresse IP corrigée que vous pourrez utiliser pour votre cluster.

Pour plus à ce sujet. S'il vous plaît voir karthik's post sur support de LoadBalancer avec Minikube pour Kubernetes

Pas le moyen le plus propre de le faire. J'avais besoin d'une solution temporaire. J'espère que ça aide quelqu'un.

0
Mo-Gang

Vérifiez les journaux du contrôleur kube. J'ai pu résoudre ce problème en définissant les balises clusterID sur l'instance ec2 sur laquelle j'ai déployé le cluster.

0
Rakesh Pelluri

supprimer le service existant et créer un même nouveau service a résolu mes problèmes. Mon problème est que l'équilibrage de charge défini par Ip que je définis est utilisé de sorte que le point de terminaison externe est en attente. Lorsque j'ai changé une nouvelle adresse IP d'équilibrage de charge, cela ne fonctionnait toujours pas. Enfin, supprimer le service existant et en créer un nouveau a résolu mon problème.

0
Shakira Sun

même problème:

os> kubectl obtenir svc right-sabertooth-wordpress

TYPE DE NOM PORT (S) EXTERNE-IP IP-CLUSTER-IP
right-sabertooth-wordpress LoadBalancer 10.97.130.7 "en attente" 80: 30454/TCP, 443: 30427/TCP 

os> liste de services minikube

| ------------- | ---------------------------- | ------ -------------------------- |

| NOM ESPACE | NOM | URL |

| ------------- | ---------------------------- | ------ -------------------------- |

| par défaut | kubernetes | Aucun port de noeud |

| par défaut | mariadb à dents de sabre droit | Aucun port de noeud |

| par défaut | right-sabertooth-wordpress | http://192.168.99.100:30454 |

| | | http://192.168.99.100:30427 |

| système kube | kube-dns | Aucun port de noeud |

| système kube | motoculteur-deploy | Aucun port de noeud |

| ------------- | ---------------------------- | ------ -------------------------- |

Il est cependant accessible via cela http://192.168.99.100:30454 .

0
alfred