我们在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服务无法将请求路由到在其他物理机器上运行的容器?所有计算机上的防火墙都已禁用并停止。
感谢。