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

ikfrs5lh  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(4)|浏览(151)

我正在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端点来轮询?

wb1gzix0

wb1gzix01#

额外的东西检查。
只有在您的部署被视为正常时,才会建立端点。如果您的readinessProbe定义不正确(表示责任),或部署未正确回应,将不会建立端点。

6fe3ivhb

6fe3ivhb2#

您可以尝试使用kubectl get epkubectl describe ep检查端点。如果您在端点描述中的NotReadyAddresses旁边看到pod IP,这表示pod存在导致其未就绪的问题,在这种情况下,它将无法注册到端点。
如果单元未就绪,则可能是由于运行状况/活动探测失败。
服务(kubectl get serviceskubectl describe myServiceName)上的“选择器”应与pod(kubectl get podskubectl describe po myPodName)上的标签匹配。例如,选择器= app=myAppName,pod标签= app=myAppName。这是服务确定应尝试连接到哪个终结点的方式。

ymdaylpp

ymdaylpp3#

有 几 件 事 在 我 看来 很 有趣 , 前 两 件 是 最 重要 的 :
1.服务 似乎 不 存在 。 您 确定 它 已 正确 建立 吗 ? 当 您 执行 kubectl get svc 时 , 它 会 显示 吗 ?
1.服务 上 的 选择 器 看 起来 不 对 。 选择 器 应该 是 与 复制 控制 器 模板 中 的 键值 标签 对 相 匹配 的 键值 标签 对 。 rc 模板 中 的 标签 是 name: "rediscontroller" , 所以 您 也 应该 将 其 用作 服务 选择 器 。
1.每个 对象 开头 的 id 字段 是 什么 ? 它 在 v1beta3 中 不是 有效 的 字段 。

kkbh8khc

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代理等。

相关问题