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 .
alors aidez-moi à résoudre ce problème. Merci ...
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 )
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
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
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
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
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)
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 >>>
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.
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.
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.
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/TCPos> 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 .