我的kubernetes服务怎么找不到端点?

我在coreos上运行kubernetes集群。

我有一个kubernetes复制控制器工作正常。 它看起来像这样:

id: "redis-controller" kind: "ReplicationController" apiVersion: "v1beta3" metadata: name: "rediscontroller" lables: name: "rediscontroller" spec: replicas: 1 selector: name: "rediscontroller" template: metadata: labels: name: "rediscontroller" spec: containers: - name: "rediscontroller" image: "redis:3.0.2" ports: - name: "redisport" hostPort: 6379 containerPort: 6379 protocol: "TCP" 

但是我有一个复制控制器的pod服务,如下所示:

 id: "redis-service" kind: "Service" apiVersion: "v1beta3" metadata: name: "redisservice" spec: ports: - protocol: "TCP" port: 6379 targetPort: 6379 selector: name: "redissrv" createExternalLoadBalancer: true sessionAffinity: "ClientIP" 

kube-proxy的日志有这样的说服务:

 Jul 06 21:18:31 core-01 kube-proxy[6896]: E0706 21:18:31.477535 6896 proxysocket.go:126] Failed to connect to balancer: failed to connect to an endpoint. Jul 06 21:18:41 core-01 kube-proxy[6896]: E0706 21:18:41.353425 6896 proxysocket.go:81] Couldn't find an endpoint for default/redisservice:: missing service entry 

据我所知,我确实有服务指向正确的吊舱和正确的端口,但我错了吗?

更新1

我注意到另一个可能的问题,修复亚历克斯提到的事情后,我注意到在其他服务,它使用websockets,服务无法find一个端点。 这是否意味着服务需要一个http端点来轮询?

有几件事对我来说很有趣,前两件事最重要:

  1. 它看起来像服务不存在。 你确定它被正确地创build了吗? 当你运行kubectl get svc时,它显示kubectl get svc吗?
  2. 您的服务select器看起来不正确。 select器应该是与复制控制器模板中匹配的键值标签对。 您的rc模板中的标签name: "rediscontroller"name: "rediscontroller" ,所以您也应该将其用作服务select器。
  3. 每个对象开始时的id字段是什么? 这看起来不像是v1beta3中的有效字段。

对于您的特定情况,如果您在Pod规范中指定了服务规范,请确保服务规范具有containerPort 。 查看详情: http : //kubernetes.io/docs/user-guide/debugging-services/#my-service-is-missing-endpoints

否则请通过官方K8s服务debugging指南进行设置:

http://kubernetes.io/docs/user-guide/debugging-services/

它有从服务到DNS到联网到kube代理等的一步一步的检查清单。

额外的事情来检查。

仅当您的部署被认为是健康的时才会创build端点。 如果您已经准确定义了准备就绪探测器(mea culpa),或者部署没有正确响应,则不会创build端点。