Ho una configurazione a singolo nodo kubernetes (vedi https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.html)kubernetes baccello non può collegarsi (attraverso il servizio) per sé, solo ad altri pod contenitori
Ho un servizio ed un controllore di replica creazione cialde. Questi pod devono connettersi agli altri pod nello stesso servizio (Nota: questo è in definitiva in modo che io possa far funzionare mongo con i set di repliche (non localhost), ma questo semplice esempio dimostra il problema che ha mongo).
Quando mi collego da qualsiasi nodo al servizio, verrà distribuito (come previsto) a uno dei pod. Questo funzionerà fino a quando non caricherà i saldi su se stesso (il contenitore in cui mi trovo). Quindi non riesce a connettersi.
Mi spiace essere prolisso, ma ho intenzione di allegare tutti i miei file in modo che tu possa vedere cosa sto facendo in questo piccolo esempio.
Dockerfile:
FROM ubuntu
MAINTAINER Eric H
RUN apt-get update; apt-get install netcat
EXPOSE 8080
COPY ./entry.sh/
ENTRYPOINT ["/entry.sh"]
Ecco il punto di ingresso
#!/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
costruire l'dockerfile
docker build -t echoserver .
tag e per caricare il registro il mio K8S del cluster
0.123.516,41 miladocker tag -f echoserver:latest 127.0.0.1:5000/echoserver:latest
docker push 127.0.0.1:5000/echoserver:latest
Ecco il mio controller di replica
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
E, infine, ecco il mio servizio
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
Crea il mio servizio kubectl create -f echo.service.yaml
Crea il mio rc kubectl create -f echo.controller.yaml
ottenere il mio POD
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
ottenere l'IP di servizio
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 uno dei baccelli kubectl exec -t -i echo-server-1-jp0aj /bin/bash
Ora connettersi al servizio più volte ... E mi darà la messaggio di app per tutti i pod tranne quando arriva a se stesso, dopo di che si blocca.
[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
Come posso configurare le cose in modo che tutti i membri di un servizio possano connettersi a tutti gli altri membri, incluso se stesso?
kubelet version = true kubernetes v1.1.2 + 3.085.895 – rideswitch
Sto usando il singolo nodo demo dal https://github.com/coreos/coreos-kubernetes.git come punto di partenza – rideswitch
CoreOS versione 899,5. 0 dalla beta – rideswitch