kubernetes service 访问问题


创建了一个service,访问service时,只能命中到当前node中的pods,无法命中其他node中的pods。
若当前node中没有相关的pods就会报错。
k8s集群使用了flannel,在任意node上访问所有的pod都是正常的。
请问如何才能使得在任意node上访问service都能访问到任意的pod?
已邀请:

iT2afL0rd - DevOps Lead at TrendMicro

赞同来自:


你的配置文件是什么样的?发出来看看?

Tim_p - 不想做摄影师的厨师不是好程序员

赞同来自:


@iT2afL0rd
svc的配置文件如下:
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "zksvc"
},
"spec": {
"ports": [
  {
"name": "prot1",
    "port": 2181,
    "protocol": "TCP",
    "targetPort":2181 
  },
  {
    "name": "prot2",
    "port": 2888,
    "protocol": "TCP",
    "targetPort":2888
  },
  {
    "name": "prot3",
    "port": 3888,
    "protocol": "TCP",
    "targetPort":3888
  }
],
"selector": {
  "name": "zk"
},
"clusterIP": "10.0.10.10",
"type": "LoadBalancer"
}
}


kubeclt describe svc zksvc 的结果如下:
Name:                   zksvc
Namespace:              default
Labels:                 <none>
Selector:               name=zk
Type:                   LoadBalancer
IP:                     10.0.10.10
Port:                   prot1   2181/TCP
NodePort:               prot1   30325/TCP
Endpoints:              172.17.8.2:2181,172.17.8.3:2181,172.17.8.4:2181
Port:                   prot2   2888/TCP
NodePort:               prot2   31093/TCP
Endpoints:              172.17.8.2:2888,172.17.8.3:2888,172.17.8.4:2888
Port:                   prot3   3888/TCP
NodePort:               prot3   30881/TCP
Endpoints:              172.17.8.2:3888,172.17.8.3:3888,172.17.8.4:3888
Session Affinity:       None
No events.

henryrao - 一個月內拿下k8s

赞同来自:

  1. 你的kube-proxy有正常运行吗? 去看下log都输出了些什么
  2. 你的kube master可以ping到flannel段的ip吗?

迁徙

赞同来自:


@henryrao 您好,我也有关于service这方面的问题。service在k8s中相当于LB的角色吗?一直不太理解这个是怎么回事。谢谢

henryrao - 一個月內拿下k8s

赞同来自:


对于是否是LB方面自己还没细读, 但是我目前拿来当做服务发现的peers(有些称为nodes, contact-points).

你可与通过
kubectl get endpoint --all-namespaces
来查看service能路由到的endpoints, 也是pods的ip地址

braveht

赞同来自:


service 是内部 LB, 访问不到可能是 flannel 或 firewall 问题

马达 - Kubernetes/Mesos Contributor

赞同来自:


看一下你的iptable对吗?kube-proxy会通过iptable进行redirect. 前几天写了篇关于flannel + k8s service文章,可以参考一下。http://dockone.io/article/1186

Tim_p - 不想做摄影师的厨师不是好程序员

赞同来自:


@马达,我看了您的文章,flannel 和 k8s 的部署和启动命令基本都是一样的。
我是没有使用任何的cloud provider(GCE什么的)的,不知道这个会不会对service有影响?
@iT2afL0rd 在评论中有提及使用“type:nodePort”,由于我还没有负载均衡节点,所以就直接将type删掉了,不知是否有影响?

两台minion节点上关于 zksvc 的iptable信息如下,都是一样的。

iptables-save | grep zksvc

-A KUBE-SEP-3OAO5J5DMRRVF7DZ -s 172.17.79.2/32 -m comment --comment "default/zksvc:prot3" -j KUBE-MARK-MASQ 
-A KUBE-SEP-3OAO5J5DMRRVF7DZ -p tcp -m comment --comment "default/zksvc:prot3" -m tcp -j DNAT --to-destination 172.17.79.2:3888 
-A KUBE-SEP-HKIFA6YBTZGXO6IL -s 172.17.79.2/32 -m comment --comment "default/zksvc:prot1" -j KUBE-MARK-MASQ 
-A KUBE-SEP-HKIFA6YBTZGXO6IL -p tcp -m comment --comment "default/zksvc:prot1" -m tcp -j DNAT --to-destination 172.17.79.2:2181 
-A KUBE-SEP-VTS3ZT3WVSHTKGZA -s 172.17.79.2/32 -m comment --comment "default/zksvc:prot2" -j KUBE-MARK-MASQ 
-A KUBE-SEP-VTS3ZT3WVSHTKGZA -p tcp -m comment --comment "default/zksvc:prot2" -m tcp -j DNAT --to-destination 172.17.79.2:2888 
-A KUBE-SERVICES -d 10.0.10.10/32 -p tcp -m comment --comment "default/zksvc:prot1 cluster IP" -m tcp --dport 2181 -j KUBE-SVC-O7OLCBPDG3TDCSK2 
-A KUBE-SERVICES -d 10.0.10.10/32 -p tcp -m comment --comment "default/zksvc:prot2 cluster IP" -m tcp --dport 2888 -j KUBE-SVC-YPX2ZV4KIL55Y3GI 
-A KUBE-SERVICES -d 10.0.10.10/32 -p tcp -m comment --comment "default/zksvc:prot3 cluster IP" -m tcp --dport 3888 -j KUBE-SVC-W3HOKDIRV7DUDSNN 
-A KUBE-SVC-O7OLCBPDG3TDCSK2 -m comment --comment "default/zksvc:prot1" -j KUBE-SEP-HKIFA6YBTZGXO6IL 
-A KUBE-SVC-W3HOKDIRV7DUDSNN -m comment --comment "default/zksvc:prot3" -j KUBE-SEP-3OAO5J5DMRRVF7DZ 
-A KUBE-SVC-YPX2ZV4KIL55Y3GI -m comment --comment "default/zksvc:prot2" -j KUBE-SEP-VTS3ZT3WVSHTKGZA


我flannel设置的是172.17.0.0/16,services-ip-range设置的是10.0.0.0/16,您的文章中说了这两个配置不一样并不影响使用,所以我暂时还没尝试修改成一样的。

由于直接访问container的ip是没有问题的,我认为跳转到172.17.79.2上之后的规则都是正确的,就没将完整的iptable贴上来了。

yarntime

赞同来自:


从你问题的描述来看,肯定是网络问题导致的。
可以从以下几点入手排查问题:
1. 检查跨主机pod通信是否正常。比如从主机minion1 ping 位于minon2上的pod ip。
2. 检查flannel配置是否正确。ifconfig flanne,确保所有主机的flannel在不同的网段。
3. 检查flannel
的网络地址和docker0地址是否匹配。

要回复问题请先登录注册