2016-01-11 15 views
7

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 mila
docker 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?

risposta

3

Grazie a tutti coloro che hanno contribuito a GitHub.
La soluzione si è rivelata essere la seguente:

tanen01 commentato 4 febbraio Vedendo lo stesso problema qui in K8S v1.1.7 stabile

Problema si verifica con:

kube-proxy --proxy-mode=iptables 

Una volta modificato:

  --proxy-mode=userspace 

(anche l'impostazione predefinita), quindi funziona di nuovo.

Quindi, se si verifica questo, si prega di provare a disattivare --proxy-mode quando si avvia kube-proxy.

1

Questo dovrebbe funzionare: l'abbiamo testato ampiamente con il proxy iptables in kubernetes v1.1 (non predefinito, ma sarà in v1.2). Puoi dire di più sul tuo ambiente?

+0

kubelet version = true kubernetes v1.1.2 + 3.085.895 – rideswitch

+0

Sto usando il singolo nodo demo dal https://github.com/coreos/coreos-kubernetes.git come punto di partenza – rideswitch

+0

CoreOS versione 899,5. 0 dalla beta – rideswitch

Problemi correlati