2015-04-04 39 views
0

我已经有了Azure云3台Ubuntu机器的以下群集:Kubernetes:外部服务不可用从Azure云所有的爪牙

172.16.0.7 (master) 
172.16.0.4 (kube-01) 
172.16.0.5 (kube-02) 

172.16.0.4 (kube-01)我有一个叫做出版商荚与端口暴露。为了使提供给世界,我定义了如下服务:

"id": "publisher-service", 
    "kind": "Service", 
    "apiVersion": "v1beta1", 
    "port": 8181, 
    "containerPort": 8080, 
    "publicIPs": ["172.16.0.4", "172.16.0.5"], 
    "selector": { 
    "group": "abc", 
    "component": "publisher" 
    }, 
    "labels": { 
    "group": "abc" 
    } 
  • 172.16.0.4172.16.0.5是内部IP Addressess(天青换算)为kube-01kube-02分别

  • 172.16.0.4 (kube-01)我有将公有端口设置为并将私有端口设置为

  • 定义的Azure端点
  • 172.16.0.5 (kube-02)我得设置为以及私用端口公共端口定义的Azure的端点设置为

有了这样的设置,我可以用我的VM虚拟公众成功访问publisher-service IP(VIP)地址和端口。

但是我认为那些是还能够使用相同的VIP地址和端口到达publisher-service(因为它被映射到端口上kube-02)。相反curl报告Recv failure: Connection reset by peer

我在这里做错了什么吗?也许我对Kubernetes External Services的理解是不正确的(因此我的期望是错误的)?

我也注意到在/var/log/upstart/kube-proxy以下条目记录:

E0404 17:36:33.371889 1661 proxier.go:82] Dial failed: dial tcp 10.0.86.26:8080: i/o timeout 
E0404 17:36:33.371951 1661 proxier.go:110] Failed to connect to balancer: failed to connect to an endpoint. 

这里是172.16.0.5 (kube-02)捕获iptables -L -t nat输出的一部分:

Chain KUBE-PORTALS-CONTAINER (1 references) 
target  prot opt source    destination 
REDIRECT tcp -- anywhere    11.1.1.2    /* kubernetes */ tcp dpt:https redir ports 45717 
REDIRECT tcp -- anywhere    11.1.1.1    /* kubernetes-ro */ tcp dpt:http redir ports 34122 
REDIRECT tcp -- anywhere    11.1.1.221   /* publisher-service */ tcp dpt:8181 redir ports 48046 
REDIRECT tcp -- anywhere    172.16.0.4   /* publisher-service */ tcp dpt:8181 redir ports 48046 
REDIRECT tcp -- anywhere    172.16.0.5   /* publisher-service */ tcp dpt:8181 redir ports 48046 

Chain KUBE-PORTALS-HOST (1 references) 
target  prot opt source    destination 
DNAT  tcp -- anywhere    11.1.1.2    /* kubernetes */ tcp dpt:https to:172.16.0.5:45717 
DNAT  tcp -- anywhere    11.1.1.1    /* kubernetes-ro */ tcp dpt:http to:172.16.0.5:34122 
DNAT  tcp -- anywhere    11.1.1.221   /* publisher-service */ tcp dpt:8181 to:172.16.0.5:48046 
DNAT  tcp -- anywhere    172.16.0.4   /* publisher-service */ tcp dpt:8181 to:172.16.0.5:48046 
DNAT  tcp -- anywhere    172.16.0.5   /* publisher-service */ tcp dpt:8181 to:172.16.0.5:48046 

我使用Kubernetes v0.12.0。我跟着this guide设置我的群集(即我使用法兰绒)。


更新#1:添加publisher荚状态信息。

apiVersion: v1beta1 
creationTimestamp: 2015-04-04T13:24:47Z 
currentState: 
    Condition: 
    - kind: Ready 
    status: Full 
    host: 172.16.0.4 
    hostIP: 172.16.0.4 
    info: 
    publisher: 
     containerID: docker://6eabf71d507ad0086b37940931aa739534ef681906994a6aae6d97b8b213 
     image: xxxxx.cloudapp.net/publisher:0.0.2 
     imageID: docker://5a76329ae2d0dce05fae6f7b1216e346cef2e5aa49899cd829a5dc1f6e70 
     ready: true 
     restartCount: 5 
     state: 
     running: 
      startedAt: 2015-04-04T13:26:24Z 
    manifest: 
    containers: null 
    id: "" 
    restartPolicy: {} 
    version: "" 
    volumes: null 
    podIP: 10.0.86.26 
    status: Running 
desiredState: 
    manifest: 
    containers: 
    - capabilities: {} 
     command: 
     - sh 
     - -c 
     - java -jar publisher.jar -b $KAFKA_SERVICE_HOST:$KAFKA_SERVICE_PORT 
     image: xxxxx.cloudapp.net/publisher:0.0.2 
     imagePullPolicy: PullIfNotPresent 
     name: publisher 
     ports: 
     - containerPort: 8080 
     hostPort: 8080 
     protocol: TCP 
     resources: {} 
     terminationMessagePath: /dev/termination-log 
    dnsPolicy: ClusterFirst 
    id: "" 
    restartPolicy: 
     always: {} 
    version: v1beta2 
    volumes: null 
generateName: rc-publisher- 
id: rc-publisher-ls6k1 
kind: Pod 
labels: 
    group: abc 
namespace: default 
resourceVersion: 22853 
selfLink: /api/v1beta1/pods/rc-publisher-ls6k1?namespace=default 
uid: f746555d-dacd-11e4-8ae7-000d3a101fda 

回答

0

一旦我使用k8s重新安装我的集群v0.14.2一切开始按预期工作。我跟着Brendan Burns 。

+0

好的。对于外部访问,您是否有请求进入一个节点(通过打开的端口/端点)并让kubernetes服务处理负载平衡? – Eatdoku 2015-05-26 23:19:03

+0

所有请求都通过一个节点/端点以nginx代理websocket流量到k8s服务门户地址。 – begie 2015-05-27 09:25:16

0

外部网络实际上似乎做工精细 - 你在日志中看到的消息是因为KUBE-代理确实收到你发送给它的请求。

不过,失败的原因是kube-proxy无法与您的pod进行通话。无论是法兰绒都无法正确路由到您的吊舱IP,或者吊舱不健康。由于发送请求到172.16.0.4起作用,您的绒布设置可能有问题。您可以通过尝试从节点2卷曲10.0.86.26:8080来确认此情况。

如果pod的运行状况可能有问题,可以通过运行kubectl.sh get pod $POD_NAME --output=yaml来检查其详细状态。

对不起,困难!

+0

确实卷曲到“10.0.86.26:8080”超时。我已经向问题主体添加了pod状态信息。请注意,'restartCount:5'不是一个问题 - 我尝试不同的设置时自己重新启动了这个窗格。还有一件事:我也检查了小兵的身份 - 这里没有可疑的事情。 – begie 2015-04-04 23:47:10

+0

任何想法如何检查绒布设置? – begie 2015-04-05 01:04:27

+0

仅供参考,虽然我发现在k8s定义没有使用选择器,而是使用固定端点时,我发现可以到达“发布服务”,但我没有找到解决此问题的方法。 – begie 2015-04-15 20:15:19