kubernetes ClusterIP服务无法将请求路由到其他节点上的容器

时间:2017-01-08 21:55:43

标签: networking service kubernetes

我们在Centos 7上安装了3台Kubernetes物理机。我们使用一台机器作为主机和工作机,另外两台机器用作工作机。

我有如下定义的服务。

kubectl get service hostnames -o yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 2017-01-08T21:26:54Z
  name: hostnames
  namespace: default
  resourceVersion: "1209904"
  selfLink: /api/v1/namespaces/default/services/hostnames
  uid: 2d6b6ffe-d5e9-11e6-b2d8-842b2b55e882
spec:
  clusterIP: 10.254.241.39
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9376
  selector:
    app: hostnames
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

仅当请求被路由到物理上位于同一台计算机上的容器时,才尝试调用该服务。

[root@server5 hostnames]# curl 10.254.241.39:80
^C
[root@server5 hostnames]# curl 10.254.241.39:80
hostnames-9ga5b
[root@server5 hostnames]# curl 10.254.241.39:80
hostnames-9ga5b
[root@server5 hostnames]# curl 10.254.241.39:80

端点存在并且直接调用端点IP地址。

server5 hostnames]# curl 10.20.36.4:9376; curl 10.20.48.6:9376; curl 10.20.63.2:9376
hostnames-9ga5b
hostnames-ygxnk
hostnames-vcfql

IP Tables规则由kube-proxy创建,如下所示。

server5 hostnames]# iptables-save | grep hostnames
-A KUBE-SEP-3UQOVTFJM332BGMS -s 10.20.48.6/32 -m comment --comment "default/hostnames:" -j KUBE-MARK-MASQ
-A KUBE-SEP-3UQOVTFJM332BGMS -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.20.48.6:9376
-A KUBE-SEP-6ZUKVGLXRG6BMNNI -s 10.20.63.2/32 -m comment --comment "default/hostnames:" -j KUBE-MARK-MASQ
-A KUBE-SEP-6ZUKVGLXRG6BMNNI -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.20.63.2:9376
-A KUBE-SEP-UMK676VFQ5WVT4CI -s 10.20.36.4/32 -m comment --comment "default/hostnames:" -j KUBE-MARK-MASQ
-A KUBE-SEP-UMK676VFQ5WVT4CI -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.20.36.4:9376
-A KUBE-SERVICES -d 10.254.241.39/32 -p tcp -m comment --comment "default/hostnames: cluster IP" -m tcp --dport 80 -j KUBE-SVC-NWV5X2332I4OT4T3
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-UMK676VFQ5WVT4CI
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-3UQOVTFJM332BGMS
-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -j KUBE-SEP-6ZUKVGLXRG6BMNNI

检查kube-proxy的日志不会显示任何错误。使用-v 4增加日志记录级别。

我们在其他两台计算机上检查了上述行为并且是相同的(IP表规则,能够将服务请求仅路由到本地容器,端点可以直接使用容器IP地址访问)。

有没有理由kubernetes服务无法将请求路由到在其他物理机器上运行的容器?所有计算机上的防火墙都已禁用并停止。

感谢。

0 个答案:

没有答案