Ich versuche, nginx auf kubernetes bereitzustellen, kubernetes Version ist v1.5.2, ich habe nginx mit 3 Replikaten bereitgestellt, YAML-Datei ist unten,
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
und jetzt möchte ich seinen Port 80 auf Port 30062 des Knotens verfügbar machen, dafür habe ich unten einen Dienst erstellt,
kind: Service
apiVersion: v1
metadata:
name: nginx-ils-service
spec:
ports:
- name: http
port: 80
nodePort: 30062
selector:
app: nginx
type: LoadBalancer
Dieser Dienst funktioniert einwandfrei, wird jedoch nicht nur im kubernetes-Dashboard, sondern auch im Terminal als ausstehend angezeigt.
Bitte helfen Sie mir, dieses Problem zu beheben. Vielen Dank ...
quelle
LoadBalancer
als Diensttyp einen gültigen Diensttyp.NodePort
undingress
gibt es andere Möglichkeiten, aber das Problem nicht wirklich zu lösen, oder?LoadBalancer
?Wenn Sie Minikube verwenden, gibt es einen magischen Befehl!
Hoffentlich kann jemand damit ein paar Minuten sparen.
Referenzlink https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-tunnel
quelle
minikube tunnel
und es löst daspending
Problem tatsächlich , aber dann funktioniert die neue externe IP nicht: Ich erhalte einen Timeout-Fehler ...Wenn Sie GCE oder EKS (Sie haben es nicht verwendet
kubeadm
) nicht verwenden , können SieexternalIPs
Ihrer Service-YAML eine Spezifikation hinzufügen . Sie können die IP-Adresse verwenden, die der primären Schnittstelle Ihres Knotens zugeordnet ist, zeth0
. Sie können dann über die externe IP des Knotens extern auf den Dienst zugreifen.quelle
Um auf einen Dienst zuzugreifen
minikube
, müssen Sie den folgenden Befehl ausführen:Weitere Informationen hier: Minikube GitHub
quelle
Ich habe mit kubeadm einen einzelnen Knoten-k8s-Cluster erstellt. Als ich PortForward und Kubectl Proxy ausprobierte , zeigte es externe IP als ausstehend an.
In meinem Fall habe ich den Dienst wie folgt gepatcht:
Danach wurde es über die öffentliche IP-Adresse bereitgestellt
quelle
Wenn Sie mit minikube arbeiten , vergessen Sie nicht, den Namespace anzugeben , wenn Sie nicht die Standardeinstellung verwenden.
minikube service << service_name >> --url --namespace = << namespace_name >>
quelle
Wenn Sie minikube verwenden, führen Sie die folgenden Befehle vom Terminal aus.
quelle
gleicher Fehler:
Es ist jedoch über die http://192.168.99.100:30454 zugänglich .
quelle
Nach der Antwort von @ Javier. Ich habe mich für das "Patchen der externen IP" für meinen Load Balancer entschieden.
Dadurch wird diese ausstehende IP-Adresse durch eine neue gepatchte IP-Adresse ersetzt, die Sie für Ihren Cluster verwenden können.
Mehr dazu. Weitere Informationen finden Sie in Karthiks Beitrag zur LoadBalancer-Unterstützung mit Minikube für Kubernetes
Nicht der sauberste Weg, es zu tun. Ich brauchte eine vorübergehende Lösung. Hoffe das hilft jemandem.
quelle
Verwenden Sie NodePort:
kubectl run Benutzer-Login --replicas = 2 --labels = "run = Benutzer-Login" --image = kingslayerr / teamproject: version2 --port = 5000
kubectl enthüllt die Bereitstellung Benutzeranmeldung --type = NodePort --name = Benutzeranmeldedienst
kubectl beschreibt Dienste Benutzer-Anmeldedienst (Notieren Sie den Port)
kubect cluster-info (IP-> Get Die IP, auf der der Master ausgeführt wird)
Ihr Dienst ist erreichbar unter (IP) :( Port)
quelle
Wenn Sie Minikube verwenden, können Sie die IP und den Port abrufen, über die Sie auf den Dienst zugreifen können, indem Sie den Minikube-Dienst kubia-http ausführen.
quelle
Wenn Sie sich nicht in einer unterstützten Cloud befinden (aws, azure, gcloud usw.), können Sie LoadBalancer nicht ohne MetalLB https://metallb.universe.tf/ verwenden, aber es befindet sich noch in der Beta.
quelle
Der LoadBalancer ServiceType funktioniert nur, wenn die zugrunde liegende Infrastruktur die automatische Erstellung von Load Balancern unterstützt und die entsprechende Unterstützung in Kubernetes bietet, wie dies bei Google Cloud Platform und AWS der Fall ist. Wenn keine solche Funktion konfiguriert ist, wird das LoadBalancer-IP-Adressfeld nicht ausgefüllt und befindet sich noch im Status "Ausstehend". Der Dienst funktioniert genauso wie ein Dienst vom Typ NodePort
quelle
Sie können die IP des Knotens patchen, auf dem Pods gehostet werden (Private IP des Knotens). Dies ist die einfache Problemumgehung.
Unter Bezugnahme auf die obigen Beiträge hat Folgendes für mich funktioniert:
kubectl patch service my-loadbalancer-service-name \ -n lb-service-namespace \ -p '{"spec": {"type": "LoadBalancer", "externalIPs": ["xxx.xxx.xxx.xxx Private IP des physischen Servers - Knoten - wo die Bereitstellung erfolgt "]}} '
quelle
Bestehenden Dienst löschen und denselben neuen Dienst erstellen löste meine Probleme. Meine Probleme sind, dass die von mir definierte IP-Lastausgleichs-IP verwendet wird, sodass der externe Endpunkt aussteht. Wenn ich eine neue IP für den Lastausgleich geändert habe, funktioniert sie immer noch nicht. Löschen Sie schließlich den vorhandenen Dienst und erstellen Sie einen neuen, um mein Problem zu lösen.
quelle
Überprüfen Sie die Kube-Controller-Protokolle. Ich konnte dieses Problem lösen, indem ich die clusterID-Tags auf die ec2-Instanz setzte, auf der ich den Cluster bereitgestellt habe.
quelle
Wenn es sich um Ihren privaten k8s-Cluster handelt, ist MetalLB besser geeignet. Unten sind die Schritte.
Schritt 1: Installieren Sie MetalLB in Ihrem Cluster
Schritt 2: Konfigurieren Sie es mithilfe einer Konfigurationskarte
Schritt 3: Erstellen Sie Ihren Dienst, um eine externe IP zu erhalten (wäre jedoch eine private IP).
EJR:
Vor der Installation von MetalLB:
Nach der Installation von MetalLB:
quelle
Hinzufügen einer Lösung für diejenigen, bei denen dieser Fehler beim Ausführen aufgetreten ist amazon-eks.
Zunächst einmal ausführen:
Überprüfen Sie anschließend das
events
Feld in der folgenden Beispielausgabe:Überprüfen Sie die Fehlermeldung:
In meinem Fall war der Grund dafür, dass keine geeigneten Subnetze zum Erstellen der ELB bereitgestellt wurden:
1: Der EKS-Cluster wurde in der falschen Subnetzgruppe bereitgestellt - interne Subnetze statt öffentlich zugänglich.
(*) Standardmäßig
LoadBalancer
erstellen Dienste des Typs öffentlich zugängliche Load Balancer, wenn keineservice.beta.kubernetes.io/aws-load-balancer-internal: "true"
Anmerkung angegeben wurde.)2: Die Subnetze wurden nicht gemäß den hier genannten Anforderungen markiert .
Tagging VPC mit:
Öffentliche Subnetze markieren mit:
quelle