2016-01-11 28 views
7

Tôi có một kubernetes thiết lập đơn nút (xem https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.html)kubernetes pod không thể kết nối (thông qua dịch vụ) để tự, chỉ để khác pod-container

Tôi có một dịch vụ và một bộ điều khiển sao chép tạo vỏ. Những pod này cần kết nối với các pod khác trong cùng một dịch vụ (Lưu ý: điều này là cuối cùng để tôi có thể chạy các tập w/replica mongo (non localhost), nhưng ví dụ đơn giản này cho thấy vấn đề mà mongo có).

Khi tôi kết nối từ bất kỳ nút nào với dịch vụ, nó sẽ được phân phối (như mong đợi) vào một trong các nhóm. Điều này sẽ làm việc cho đến khi nó tải số dư cho chính nó (container mà tôi đang trên). Sau đó, nó không kết nối được.

Xin lỗi để tiết lộ, nhưng tôi sẽ đính kèm tất cả các tệp của tôi để bạn có thể xem những gì tôi đang làm trong ví dụ nhỏ này.

Dockerfile:

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

Dưới đây là điểm mấu chốt

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

xây dựng dockerfile

docker build -t echoserver .

tag và tải lên registry k8s cụm của tôi

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

Đây là điều khiển Replication tôi

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 

Và cuối cùng, đây là dịch vụ

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 

tôi Tạo dịch vụ của tôi kubectl create -f echo.service.yaml

Tạo rc tôi kubectl create -f echo.controller.yaml

Nhận PODs tôi

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 

Lấy IP dịch vụ

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 thành một trong những vỏ kubectl exec -t -i echo-server-1-jp0aj /bin/bash

Bây giờ kết nối với dịch vụ nhiều lần ... Nó sẽ cho tôi tin nhắn ứng dụng cho tất cả các nhóm ngoại trừ khi nó được gửi đến chính nó, khi nó bị treo.

[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 

Tôi có thể định cấu hình mọi thứ để tất cả thành viên của dịch vụ có thể kết nối với tất cả các thành viên khác, bao gồm cả chính nó?

Trả lời

3

Nhờ tất cả những người đã trợ giúp về GitHub.
Cách giải quyết hóa ra là như sau:

tanen01 nhận xét về ngày 04 tháng 2 Thấy cùng một vấn đề ở đây trên k8s v1.1.7 ổn định

Issue xảy ra với:

kube-proxy --proxy-mode=iptables 

Khi tôi đã thay đổi thành:

  --proxy-mode=userspace 

(cũng là mặc định), sau đó hoạt động lại.

Vì vậy, nếu bạn đang gặp phải điều này, vui lòng thử tắt --proxy-mode khi bạn bắt đầu kube-proxy.

1

Điều này được cho là hoạt động - chúng tôi đã thử nghiệm nó rộng rãi với proxy iptables trong kubernetes v1.1 (không phải mặc định, nhưng sẽ ở phiên bản v1.2). Bạn có thể nói thêm về môi trường của bạn không?

+0

kubelet --version = true Kubernetes v1.1.2 + 3085895 – rideswitch

+0

Tôi đang sử dụng bản trình diễn một nút từ https://github.com/coreos/coreos-kubernetes.git làm điểm xuất phát của tôi – rideswitch

+0

Coreos phiên bản 899.5. 0 từ bản beta – rideswitch

Các vấn đề liên quan