2016-01-11 13 views
7

に、自己に(サービスを通じて)接続することはできません、私はサービスやポッドを作成、複製コントローラを持ってkubernetesポッドは、私がkubernetes単一ノードのセットアップを持っているだけで、他のポッドのコンテナ

https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.htmlを参照してください)。これらのポッドは、同じサービス内の他のポッドに接続する必要があります(注:これは最終的にmongoがレプリカセット(非ローカルホスト)を実行できるようにするためですが、この単純な例はmongoが持つ問題を示しています)。

任意のノードからサービスに接続すると、(期待どおり)1つのポッドに配信されます。これは、自分自身(私がいるコンテナ)にロードバランスが取られるまで機能します。それから、接続に失敗します。

冗長で残念ですが、私はこの小さな例で何をしているのかわかるようにすべてのファイルを添付します。

Dockerfile:ここ

FROM ubuntu 
MAINTAINER Eric H 
RUN apt-get update; apt-get install netcat 
EXPOSE 8080 
COPY ./entry.sh/
ENTRYPOINT ["/entry.sh"] 

は、エントリポイント

#!/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 

dockerfileに

docker build -t echoserver .

タグを構築し、私のK8Sクラスタのレジストリにアップロードされ

ここで
docker tag -f echoserver:latest 127.0.0.1:5000/echoserver:latest 
docker push 127.0.0.1:5000/echoserver:latest 

は私のレプリケーションコントローラー

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 

そして最後に、ここに私のサービスがある

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 

は私のRC kubectl create -f echo.controller.yaml

を作成し、私のサービス kubectl create -f echo.service.yaml

を作成しています210

は私の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 

はIP

kubectl exec -t -i echo-server-1-jp0aj /bin/bash

ポッドの1つに

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は今、それは私を与えるだろう...サービスに複数回接続するサービスをゲットすべてのポッドのapp-messageがそれ自身に到達したときを除いて、それはハングします。

[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 

サービスのすべてのメンバーが他のすべてのメンバー(自分自身を含む)に接続できるように設定するにはどうすればよいですか?

答えて

3

GitHubを手助けしたすべての人に感謝します。次のように
回避策があることが判明:

kube-proxy --proxy-mode=iptables 

tanen01は 安定

問題がで発生K8Sのv1.1.7にここで同じ問題を見て02月04日にコメント

一度変更しました:

(これもデフォルト)は、再び動作します。

kube-proxyを起動すると、これが発生する場合は、--proxy-modeをオフにしてください。

1

これは動作するはずです - kubernetes v1.1のiptablesプロキシを使って広範にテストしました(デフォルトではありませんがv1.2になります)。あなたの環境についてもっと詳しく言うことができますか?

+0

kubelet --version =真 Kubernetes v1.1.2デベロッパー+ 3085895私は私の出発点 – rideswitch

+0

。 0 from beta – rideswitch

+0

Coreosバージョン899.5としてhttps://github.com/coreos/coreos-kubernetes.gitから単一ノードのデモを使用してい – rideswitch

関連する問題