我正在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
据我所知,我确实让服务指向了正确的pod和正确的端口,但我错了吗?
更新1
我注意到另一个可能的问题,在修复Alex提到的问题后,我注意到在其他使用websockets的服务中,服务找不到端点。这是否意味着服务需要一个http端点来轮询?
4条答案
按热度按时间wb1gzix01#
额外的东西检查。
只有在您的部署被视为正常时,才会建立端点。如果您的
readinessProbe
定义不正确(表示责任),或部署未正确回应,将不会建立端点。6fe3ivhb2#
您可以尝试使用
kubectl get ep
kubectl describe ep
检查端点。如果您在端点描述中的NotReadyAddresses
旁边看到pod IP,这表示pod存在导致其未就绪的问题,在这种情况下,它将无法注册到端点。如果单元未就绪,则可能是由于运行状况/活动探测失败。
服务(
kubectl get services
kubectl describe myServiceName
)上的“选择器”应与pod(kubectl get pods
kubectl describe po myPodName
)上的标签匹配。例如,选择器=app=myAppName
,pod标签=app=myAppName
。这是服务确定应尝试连接到哪个终结点的方式。ymdaylpp3#
有 几 件 事 在 我 看来 很 有趣 , 前 两 件 是 最 重要 的 :
1.服务 似乎 不 存在 。 您 确定 它 已 正确 建立 吗 ? 当 您 执行
kubectl get svc
时 , 它 会 显示 吗 ?1.服务 上 的 选择 器 看 起来 不 对 。 选择 器 应该 是 与 复制 控制 器 模板 中 的 键值 标签 对 相 匹配 的 键值 标签 对 。 rc 模板 中 的 标签 是
name: "rediscontroller"
, 所以 您 也 应该 将 其 用作 服务 选择 器 。1.每个 对象 开头 的 id 字段 是 什么 ? 它 在 v1beta3 中 不是 有效 的 字段 。
kkbh8khc4#
对于您的特定情况,如果您在Pod规范中指定了
containerPort
,请确保服务规范具有containerPort
。请查看详细信息:http://kubernetes.io/docs/user-guide/debugging-services/#my-service-is-missing-endpoints否则请通过官方K8s服务调试指南进行设置:
http://kubernetes.io/docs/user-guide/debugging-services/
它有一个循序渐进的清单,从服务到DNS到网络到kube代理等。