281 votes

kubernetes service ip externe en attente

Je suis en train de déployer nginx sur kubernetes, kubernetes version est v1.5.2, J'ai déployé nginx avec 3 réplique, 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 de noeud, pour qui j'ai créé un service ci-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 comme il devrait l'être, mais il montre que l'attente non seulement sur kubernetes tableau de bord aussi sur terminal. Terminal outputDash board status

merci donc de m'aider à résoudre ce problème. Merci ...

283voto

Javier Salmeron Points 3032

On dirait que vous êtes en utilisant une mesure Kubernetes Cluster (à l'aide d' minikube, kubeadm ou similaire). Dans ce cas, il n'y a pas de LoadBalancer intégré (contrairement à AWS ou Google Cloud). Avec cette configuration par défaut, vous ne pouvez utiliser qu' NodePort ou un indice de Contrôleur. Avec la Pénétration de Contrôleur , vous pouvez configurer un nom de domaine qui correspond à votre pod.

231voto

Peter Zhou Points 1203

Si vous utilisez Minikube, il existe une commande magique!

 $ minikube tunnel
 

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

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

88voto

toppur Points 65

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
 

57voto

J'ai créé un cluster k8s à un seul noeud à l'aide de kubeadm. Quand j'ai essayé PortForward et le proxy kubectl , il a montré qu'une adresse IP externe était 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
 

45voto

Saket Jain Points 221

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X