Ich versuche, Nginx auf kubernetes bereitzustellen. Die Version von kubernetes ist v1.5.2. Ich habe Nginx mit 3 Replikaten bereitgestellt. Die YAML-Datei befindet sich 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 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 gut, aber er ist nicht nur auf dem Dashboard von kubernetes, sondern auch auf dem Terminal anhängig .
bitte helfen Sie mir, dieses Problem zu lösen. Vielen Dank ...
Es sieht so aus, als würden Sie einen benutzerdefinierten Kubernetes-Cluster verwenden (minikube
, kubeadm
oder ähnliches). In diesem Fall ist kein LoadBalancer integriert (im Gegensatz zu AWS oder Google Cloud). Mit dieser Standardeinstellung können Sie nur NodePort (weitere Informationen hier: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport ) oder einen Ingress Controller verwenden. Mit dem Ingress Controller können Sie einen Domainnamen einrichten, der Ihrem Pod zugeordnet ist (weitere Informationen hier: https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-controllers )
Um auf einen Dienst unter minikube
zuzugreifen, müssen Sie den folgenden Befehl ausführen:
minikube service [-n NAMESPACE] [--url] NAME
Mehr Informationen hier: Minikube GitHub
Wenn Sie nicht GCE oder EKS verwenden (Sie haben kubeadm
verwendet), können Sie Ihrem Dienst YAML eine externalIPs
-Spezifikation hinzufügen. Sie können die IP-Adresse verwenden, die der primären Schnittstelle Ihres Knotens zugeordnet ist, z. B. eth0
. Sie können dann über die externe IP des Knotens extern auf den Dienst zugreifen.
...
spec:
type: LoadBalancer
externalIPs:
- 192.168.0.10
Wenn Sie Minikube verwenden, gibt es einen magischen Befehl!
$ minikube tunnel
Hoffentlich kann jemand damit ein paar Minuten sparen.
Referenzlink https://github.com/kubernetes/minikube/blob/master/docs/networking.md#loadbalancer-emulation-minikube-tunnel
Ich habe mit kubeadm einen einzelnen Knoten-k8s-Cluster erstellt. Als ich PortForward und kubectl proxy ausprobiert habe, wurde die externe IP als ausstehend angezeigt.
$ 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
In meinem Fall habe ich den Dienst so gepatcht:
kubectl patch svc <svc-name> -n <namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["172.31.71.218"]}}'
Danach wurde der Dienst über der öffentlichen IP-Adresse gestartet
$ 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
NodePort verwenden:
kubectl run user-login --replicas = 2 --labels = "run = user-login" --image = kingslayerr/teamproject: version2 --port = 5000
kubectl Bereitstellung Bereitstellung Benutzeranmeldung - Typ = NodePort - Name = Benutzeranmeldedienst
kubectl beschreibt Dienste Benutzer-Login-Service .__ (notiert den Port)
kubect cluster-info (IP-> Get Die IP, auf der der Master ausgeführt wird)
Ihr Dienst ist erreichbar unter (IP) :( Port)
Wenn Sie mit minikube arbeiten, vergessen Sie nicht, den Namespace anzugeben, wenn Sie nicht die Standardeinstellung verwenden.
minikube service << service_name >> --url --namespace = << name_name >>
Folgende @ Javier Antwort. Ich habe mich für das "Patchen der externen IP" für meinen Load Balancer entschieden.
$ kubectl patch service my-loadbalancer-service-name \
-n lb-service-namespace \
-p '{"spec": {"type": "LoadBalancer", "externalIPs":["192.168.39.25"]}}'
Dadurch wird diese ausstehende IP-Adresse durch eine neue, aktualisierte IP-Adresse ersetzt, die Sie für Ihren Cluster verwenden können.
Mehr dazu. Bitte lesen Sie karthiks Post am LoadBalancer-Unterstützung mit Minikube für Kubernetes
Dies ist nicht der sauberste Weg. Ich brauchte eine vorübergehende Lösung. Hoffe das hilft jemandem.
Überprüfen Sie die kube-controller-Protokolle. Dieses Problem konnte behoben werden, indem die clusterID-Tags auf die ec2-Instanz gesetzt wurden, auf der ich den Cluster bereitgestellt habe.
bestehenden Dienst löschen und denselben neuen Dienst erstellen. Meine Probleme wurden behoben. Meine Probleme bestehen darin, dass der von mir definierte Lastausgleichs-Ip verwendet wird, sodass der externe Endpunkt ansteht. Wenn ich eine neue Lastausgleichs-IP ändere, funktioniert sie immer noch nicht. Löschen Sie zum Schluss den vorhandenen Dienst und erstellen Sie einen neuen, um mein Problem zu lösen.
gleicher Fehler:
os> kubectl erhalten svc right-sabertooth-wordpress
NAME TYPE CLUSTER-IP EXTERNER IP-PORT (S)
right-sabertooth-wordpress LoadBalancer 10.97.130.7 "ausstehend" 80: 30454/TCP, 443: 30427/TCPos> Minikubeservice-Liste
| ------------- | ---------------------------- | ------ -------------------------- |
| NAMESPACE | NAME | URL |
| ------------- | ---------------------------- | ------ -------------------------- |
| default | kubernetes | Kein Knotenport |
| default | rechts-sabertooth-mariadb | Kein Knotenport |
| default | right-sabertooth-wordpress | http://192.168.99.100:30454 |
| | | http://192.168.99.100:30427 |
| kube-system | kube-dns | Kein Knotenport |
| kube-system | Deichselbereitstellung | Kein Knotenport |
| ------------- | ---------------------------- | ------ -------------------------- |
Es ist jedoch über das http://192.168.99.100:30454 erreichbar.