J'essaye 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 nœud, pour cela 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 bien comme il se doit, mais il apparaît comme en attente non seulement sur le tableau de bord de kubernetes également sur le terminal.
alors aidez-moi à résoudre ce problème. Merci ...
la source
LoadBalancer
comme type de service qui est un type de service valide.NodePort
etingress
existe-t-il d'autres façons de le faire mais pas vraiment de résoudre le problème, n'est-ce pas?LoadBalancer
?Si vous utilisez Minikube, il existe une commande magique!
J'espère que quelqu'un pourra gagner quelques minutes avec ça.
Lien de référence https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel
la source
minikube tunnel
et cela résout lepending
problème, mais la nouvelle adresse IP externe ne fonctionne pas: j'obtiens une erreur de délai d'expiration ...Si vous n'utilisez pas GCE ou EKS (que vous avez utilisé
kubeadm
), vous pouvez ajouter uneexternalIPs
spécification à votre service YAML. Vous pouvez utiliser l'adresse IP associée à l'interface principale de votre nœud, telle queeth0
. Vous pouvez alors accéder au service en externe, en utilisant l'adresse IP externe du nœud.la source
Pour accéder à un service sur
minikube
, vous devez exécuter la commande suivante:Plus d'informations ici: Minikube GitHub
la source
J'ai créé un cluster k8s à nœud unique à l'aide de kubeadm. Quand j'ai essayé le proxy PortForward et kubectl , il a montré l'IP externe comme en attente.
Dans mon cas, j'ai corrigé le service comme ceci:
Après cela, il a commencé à servir sur l'adresse IP publique
la source
Si vous utilisez minikube , n'oubliez pas de mentionner l'espace de noms si vous n'utilisez pas default.
service minikube << nom_service >> --url --namespace = << nom_espace_noms >>
la source
Si vous utilisez minikube, exécutez les commandes ci-dessous à partir du terminal,
la source
même problème:
Il est cependant accessible via ce http://192.168.99.100:30454 .
la source
Suite à la réponse de @ Javier. J'ai décidé de "patcher l'adresse IP externe" pour mon équilibreur de charge.
Cela remplacera cette adresse «en attente» par une nouvelle adresse IP corrigée que vous pouvez utiliser pour votre cluster.
Pour en savoir plus. Veuillez consulter l' article de karthik sur le support de LoadBalancer avec Minikube pour Kubernetes
Ce n'est pas la façon la plus propre de le faire. J'avais besoin d'une solution temporaire. J'espère que cela aide quelqu'un.
la source
Utilisez NodePort:
kubectl run user-login --replicas = 2 --labels = "run = user-login" --image = kingslayerr / teamproject: version2 --port = 5000
kubectl expose le déploiement user-login --type = NodePort --name = user-login-service
kubectl décrire les services user-login-service (notez le port)
kubect cluster-info (IP-> Obtenir l'IP où le maître s'exécute)
Votre service est accessible sur (IP) :( port)
la source
Lorsque vous utilisez Minikube, vous pouvez obtenir l'adresse IP et le port via lesquels vous pouvez accéder au service en exécutant le service minikube kubia-http.
la source
Si vous n'êtes pas sur un cloud pris en charge (aws, azure, gcloud etc.) vous ne pouvez pas utiliser LoadBalancer sans MetalLB https://metallb.universe.tf/ mais il est encore en version bêta ..
la source
Le LoadBalancer ServiceType ne fonctionnera que si l'infrastructure sous-jacente prend en charge la création automatique d'équilibreurs de charge et dispose du support correspondant dans Kubernetes, comme c'est le cas avec Google Cloud Platform et AWS. Si aucune fonctionnalité de ce type n'est configurée, le champ d'adresse IP LoadBalancer n'est pas rempli et toujours en attente, et le service fonctionnera de la même manière qu'un service de type NodePort
la source
Vous pouvez patcher l'adresse IP du nœud où les pods sont hébergés (IP privée du nœud), c'est la solution de contournement simple.
Prenant référence aux articles ci-dessus, la suite a fonctionné pour moi:
kubectl patch service mon-loadbalancer-service-name \ -n lb-service-namespace \ -p '{"spec": {"type": "LoadBalancer", "externalIPs": ["xxx.xxx.xxx.xxx Privé IP du serveur physique - Nœud - où le déploiement est effectué "]}} '
la source
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 Ip que je définit est utilisé de sorte que le point de terminaison externe soit en attente. Lorsque j'ai changé une nouvelle adresse IP d'équilibrage de charge, cela ne fonctionnait toujours pas. Enfin, supprimez le service existant et créez-en un nouveau a résolu mon problème.
la source
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.
la source
S'il s'agit de votre cluster k8 privé, MetalLB conviendrait mieux. Voici les étapes.
Étape 1: Installez MetalLB dans votre cluster
Étape 2: Configurez-le à l'aide d'un configmap
Étape 3: Créez votre service pour obtenir une adresse IP externe (ce serait cependant une adresse IP privée).
FYR:
Avant l'installation de MetalLB:
Après l'installation de MetalLB:
la source
Ajout d'une solution pour ceux qui ont rencontré cette erreur lors de l'exécution sur amazon-eks.
Tout d'abord, lancez:
Et puis examinez le
events
champ dans l'exemple de sortie ci-dessous:Consultez le message d'erreur:
Dans mon cas, la raison pour laquelle aucun sous-réseau approprié n'a été fourni pour créer l'ELB était:
1: Le cluster EKS a été déployé sur le mauvais groupe de sous-réseaux - sous-réseaux internes au lieu de publics.
(*) Par défaut, les services de type
LoadBalancer
créent des équilibreurs de charge publics si aucuneservice.beta.kubernetes.io/aws-load-balancer-internal: "true"
annotation n'a été fournie).2: Les sous-réseaux n'ont pas été étiquetés conformément aux exigences mentionnées ici .
Marquage de VPC avec:
Balisage des sous-réseaux publics avec:
la source