随着年龄的增长,Kubernetes Services无法访问

时间:2018-01-15 13:02:50

标签: kubernetes

我一直有一个非常令人沮丧的问题,即Kubernetes服务在部署几个小时后随机停止在其群集IP上可用。他们几乎似乎正在衰老。

我的广告正在使用hostNetwork: truednsPolicy: ClusterFirstWithHostNet。这是事情变得有趣的地方 - 我在受影响的集群上有两个命名空间(登台和生产)。在另一个只有一个命名空间的相同集群上,这个问题似乎还没有出现!

在尝试查看kube-proxy日志时,我看到了以下内容:

admin@gke ~ $ tail /var/log/kube-proxy.log
E0115 12:13:01.669222       5 proxier.go:1372] can't open "nodePort for staging/foo:foo-sip-1" (:31765/tcp), skipping this nodePort: listen tcp :31765: bind: address already 
in use
E0115 12:13:01.671353       5 proxier.go:1372] can't open "nodePort for staging/foo:http-api" (:30932/tcp), skipping this nodePort: listen tcp :30932: bind: address already in use
E0115 12:13:01.671548       5 proxier.go:1372] can't open "nodePort for staging/our-lb:our-lb-http" (:32477/tcp), skipping this nodePort: listen tcp :32477: bind: address alrea
dy in use
E0115 12:13:01.671641       5 proxier.go:1372] can't open "nodePort for staging/foo:foo-sip-0" (:30130/tcp), skipping this nodePort: listen tcp :30130: bind: address already 
in use
E0115 12:13:01.671710       5 proxier.go:1372] can't open "nodePort for default/foo:foo-sip-0" (:30132/tcp), skipping this nodePort: listen tcp :30132: bind: address already 
in use
E0115 12:13:02.510177       5 proxier.go:1372] can't open "nodePort for default/our-lb:our-lb-http" (:31613/tcp), skipping this nodePort: listen tcp :31613: bind: address alrea
dy in use
E0115 12:13:06.577412       5 server.go:661] starting metrics server failed: listen tcp 127.0.0.1:10249: bind: address already in use
E0115 12:13:11.578446       5 server.go:661] starting metrics server failed: listen tcp 127.0.0.1:10249: bind: address already in use
E0115 12:13:16.580441       5 server.go:661] starting metrics server failed: listen tcp 127.0.0.1:10249: bind: address already in use
E0115 12:13:21.583691       5 server.go:661] starting metrics server failed: listen tcp 127.0.0.1:10249: bind: address already in use

我现在已从受影响的群集中删除了一个命名空间,其余的一个似乎已自行修复;但我很好奇为什么Kubernetes在资源创建时没有警告我,如果它竞争资源,那么为什么它稍后会以导致这种情况的方式重新分配它们问题?这可能不是DNS缓存问题,因为getent hosts向我显示了服务的正确群集IP - IP无法访问!在我看来,它似乎是Kubernetes网络设置中的错误。

我应该创建一个问题,还是有一些明显我做错了?

1 个答案:

答案 0 :(得分:1)

听起来你有hostNetwork: true的pod并使用type: NodePort的服务,并设置修复节点端口号与你的pod将使用的相同。

通常,除非您有非常引人注目的用例,否则应避免使用hostNetwork: true。它主要用于需要访问主机网络的遗留应用程序或守护程序。 如果您确实需要将服务与主机网络上的pod一起使用,则应使用type: ClusterIP的服务。