Ich habe einen Kubernetes Einzelknotenaufbau (siehe https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.html)Kubernetes pod nicht (durch Service) verbindet selbst, nur auf anderen pod-Behälter
Ich habe einen Service und eine Replikations Controller Schaffung Schoten. Diese Pods müssen sich mit den anderen Pods im gleichen Dienst verbinden (Hinweis: Dies ist letztlich so, dass ich Mongo mit w/replica-Sets ausführen kann (nicht localhost), aber dieses einfache Beispiel zeigt das Problem, das mongo hat).
Wenn ich eine Verbindung von einem Knoten zum Dienst herstelle, wird dieser (wie erwartet) an einen der Pods verteilt. Dies funktioniert so lange, bis es sich selbst ausgleicht (der Container, in dem ich bin). Dann kann es keine Verbindung herstellen.
Es tut mir leid, um ausführlich zu sein, aber ich werde alle meine Dateien anhängen, so dass Sie sehen können, was ich in diesem kleinen Beispiel mache.
Dockerfile:
FROM ubuntu
MAINTAINER Eric H
RUN apt-get update; apt-get install netcat
EXPOSE 8080
COPY ./entry.sh/
ENTRYPOINT ["/entry.sh"]
Hier ist der Einstiegspunkt
#!/bin/bash
# wait for a connection, then tell them who we are
while : ; do
echo "hello, the date=`date`; my host=`hostname`" | nc -l 8080
sleep .5
done
die
docker build -t echoserver .
Tag dockerfile bauen und zu meinem K8S Cluster-Registrierung laden
docker tag -f echoserver:latest 127.0.0.1:5000/echoserver:latest
docker push 127.0.0.1:5000/echoserver:latest
Hier mein Replication-Controller
apiVersion: v1
kind: ReplicationController
metadata:
labels:
role: echo-server
app: echo
name: echo-server-1
spec:
replicas: 3
template:
metadata:
labels:
entity: echo-server-1
role: echo-server
app: echo
spec:
containers:
-
image: 127.0.0.1:5000/echoserver:latest
name: echo-server-1
ports:
- containerPort: 8080
Und schließlich ist mein Service-Dienst meine hier ist
kind: Service
metadata:
labels:
app: echo
role: echo-server
name: echo-server-1
name: echo-server-1
spec:
selector:
entity: echo-server-1
role: echo-server
ports:
- port: 8080
targetPort: 8080
erstellen kubectl create -f echo.service.yaml
erstellen mein rc kubectl create -f echo.controller.yaml
Get
kubectl get po
NAME READY STATUS RESTARTS AGE
echo-server-1-jp0aj 1/1 Running 0 39m
echo-server-1-shoz0 1/1 Running 0 39m
echo-server-1-y9bv2 1/1 Running 0 39m
den Dienst IP kubectl exec -t -i echo-server-1-jp0aj /bin/bash
nun mehrmals auf den Dienst verbinden ... Es wird mir
kubectl get svc
NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE
echo-server-1 10.3.0.246 <none> 8080/TCP entity=echo-server-1,role=echo-server 39m
Exec in eine der Hülsen Holen Sie sich das App-Nachricht für alle Pods außer wenn es zu sich selbst kommt, woraufhin es hängt.
[email protected]:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:02:38 UTC 2016; my host=echo-server-1-y9bv2
[email protected]:/# nc 10.3.0.246 8080
^C
[email protected]:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:02:43 UTC 2016; my host=echo-server-1-shoz0
[email protected]:/# nc 10.3.0.246 8080
^C
[email protected]:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:19 UTC 2016; my host=echo-server-1-y9bv2
[email protected]:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:23 UTC 2016; my host=echo-server-1-shoz0
[email protected]:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:26 UTC 2016; my host=echo-server-1-y9bv2
[email protected]:/# nc 10.3.0.246 8080
hello, the date=Mon Jan 11 22:31:27 UTC 2016; my host=echo-server-1-shoz0
[email protected]:/# nc 10.3.0.246 8080
Wie kann ich Dinge so konfigurieren, dass alle Mitglieder eines Dienstes eine Verbindung mit allen anderen Mitgliedern herstellen können, einschließlich sich selbst?
kubelet --version = true Kubernetes v1.1.2 + 3.085.895 – rideswitch
ich die Single-Node-Demo bin mit von https://github.com/coreos/coreos-kubernetes.git als mein Ausgangspunkt – rideswitch
Coreos Version 899,5. 0 von beta – rideswitch