Kubernetes服务端点healtcheck

Kubernetes服务端点healtcheck,kubernetes,kubernetes-health-check,Kubernetes,Kubernetes Health Check,我创建了一个Kubernetes服务,其后端节点不是集群的一部分,而是一组固定的节点(具有固定的IP),因此我还创建了一个同名的Endpoints资源: apiVersion: v1 kind: Service metadata: name: elk-svc spec: ports: - port: 9200 targetPort: 9200 protocol: TCP --- kind: Endpoints apiVersion: v1 metadata

我创建了一个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>
$kubectl描述svc麋鹿svc
名称:麋鹿
名称空间:默认值
标签:
注释:kubectl.kubernetes.io/last applicated configuration={“apiVersion”:“v1”,“种类”:“服务”,“元数据”:{“注释”:{},“名称”:“elk svc”,“命名空间”:“默认”},“规范”:{“端口”:[{“端口”:9200,“协议”:“TCP”。。。
选择器:
类型:集群
IP:10.233.17.18
端口:9200/TCP
终点:172.21.0.40:9200172.21.0.41:9200172.21.0.42:9200
会话关联:无
活动:
$kubectl描述ep麋鹿svc
名称:麋鹿
名称空间:默认值
标签:
注释:kubectl.kubernetes.io/last applicated configuration={“apiVersion”:“v1”,“kind”:“Endpoints”,“metadata”:{“Annotations”:{},“name”:“elk svc”,“namespace”:“default”},“subsets”:[{“addresses”:[{“ip”:“172.21.0.40”。。。
子集:
地址:172.21.0.40172.21.0.41172.21.0.42
NotReady地址:
端口:
名称端口协议
----    ----    --------
9200 TCP
活动:
我的吊舱能够使用内部集群IP 10.233.17.18与ElasticSearch通信。一切正常

我的问题是,是否有任何方法可以为我创建的服务使用某种healthCheck机制,因此如果我的ElasticSearch节点之一出现故障,即:172.21.0.40,那么该服务会意识到这一点,并且不再将流量路由到该节点,而是路由到其他节点。这可能吗


谢谢。

这在k8s中不受支持。
有关更多说明,请参阅您的要求中提出的问题:

对于这个用例,最佳实践是使用像haproxy这样的负载平衡器,我的建议是在弹性节点前面有一个反向代理,比如nginx或haproxy,它将对这些节点进行健康检查。

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