【问题标题】:Kubernetes services endpoints healtcheckKubernetes 服务端点健康检查
【发布时间】:2020-01-29 13:58:56
【问题描述】:

我创建了一个 Kubernetes 服务,其后端节点不是集群的一部分,而是一组固定的节点(具有固定 IP),因此我还创建了一个同名的 Endpoints 资源:

apiVersion: v1
kind: Service
metadata:
  name: elk-svc
spec:
  ports:
    - port: 9200
      targetPort: 9200
      protocol: TCP
---
kind: Endpoints
apiVersion: v1
metadata:
  name: elk-svc
subsets:
  -
    addresses:
      - { ip: 172.21.0.40 }
      - { ip: 172.21.0.41 }
      - { ip: 172.21.0.42 }

    ports:
      - port: 9200

服务和端点描述:

$ kubectl describe svc elk-svc
Name:           elk-svc
Namespace:      default
Labels:         <none>
Annotations:        kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"elk-svc","namespace":"default"},"spec":{"ports":[{"port":9200,"protocol":"TCP"...
Selector:       <none>
Type:           ClusterIP
IP:         10.233.17.18
Port:           <unset> 9200/TCP
Endpoints:      172.21.0.40:9200,172.21.0.41:9200,172.21.0.42:9200
Session Affinity:   None
Events:         <none>

$ kubectl describe ep elk-svc
Name:       elk-svc
Namespace:  default
Labels:     <none>
Annotations:    kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Endpoints","metadata":{"annotations":{},"name":"elk-svc","namespace":"default"},"subsets":[{"addresses":[{"ip":"172.21.0.40"...
Subsets:
  Addresses:        172.21.0.40,172.21.0.41,172.21.0.42
  NotReadyAddresses:    <none>
  Ports:
    Name    Port    Protocol
    ----    ----    --------
    <unset> 9200    TCP

Events: <none>

我的 pod 能够使用内部集群 IP 10.233.17.18 与 ElasticSearch 通信。一切顺利!

我的问题是,是否有任何方法可以为我创建的该服务提供某种健康检查机制,所以如果我的一个 ElasticSearch 节点出现故障,即:172.21.0.40,那么服务会意识到这一点,并且将不再将流量路由到该节点,而是路由到其他节点。这可能吗?

谢谢。

【问题讨论】:

    标签: kubernetes kubernetes-health-check


    【解决方案1】:

    这在 k8s 中不受支持。
    有关更多说明,请参阅根据您的要求提出的此问题:: https://github.com/kubernetes/kubernetes/issues/77738#issuecomment-491560980
    对于这个用例,最佳实践是使用像 haproxy 这样的负载均衡器

    【讨论】:

    • 通过这个“有很多方法可以实现这一点,最好的选择是负载均衡器而不是外部端点。”您的意思是创建一个 LoadBalancer 服务,还是指一个完全外部的负载均衡器,例如位于我的 ElasticSearch 节点前面的 nginx?
    • 关于这个想法“但是有很多方法可以自定义诸如添加具有此功能的服务等效控制器等;)”你能举例说明你的意思吗?
    • @MoisésBelchín for comment 1,这里提到的是外部负载均衡器,可以对弹性搜索节点进行健康检查。对于评论 2,适用于开发人员应实现控制器功能以跟踪其副本的定制应用程序。这超出了您的用例范围。 对您而言,最佳做法是使用像 haproxy 这样的负载均衡器。
    【解决方案2】:

    我的建议是在弹性节点前面设置一个反向代理,例如 nginx 或 haproxy,它们将对这些节点进行健康检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-05
      相关资源
      最近更新 更多