当前位置: 首页 > 知识库问答 >
问题:

Google负载均衡器健康检查失败

南宫俊逸
2023-03-14

根据以下官方文件,我在GKE上安装了Kubernetes入口控制器。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/cloud/deploy.yaml

入口控制器运行良好。

ingress-nginx-admission-create-dvkgp        0/1     Completed   0          5h29m
ingress-nginx-admission-patch-58l4z         0/1     Completed   1          5h29m
ingress-nginx-controller-65d7564f46-2rtjs   1/1     Running     0          5h29m

它自动创建TCP负载平衡器、健康检查和防火墙规则。我的kubernetes群集有3个节点。有趣的是,有两次健康检查失败。它传递给入口控制器正在运行的实例。我调试了它,但没有找到任何线索。谁能帮我一下吗。

共有2个答案

鱼阳伯
2023-03-14

可能的原因之一是防火墙规则。Google已指定Google Health Check探测器的IP范围和端口详细信息。您必须配置入口允许规则才能建立与后端的健康检查探测连接。

有关其他调试详细信息,请查看此Google云平台博客:在Google Compute Engine上的负载平衡中调试运行状况检查

濮俭
2023-03-14

如果您要查看部署。您申请的yaml您将看到:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local

请注意externalTra0014 Policy: Local。它用于保存客户端源ip。

这里的解释更好:类型为LoadBalancer的服务的源IP

来自k8s文档:

但是,如果您在Google库伯内特斯引擎/GCE上运行,请将相同的service.spec.external设置为本地策略字段,通过故意失败的运行状况检查,强制没有服务终结点的节点从符合负载平衡流量条件的节点列表中删除自己。

这些健康检查旨在失败。它以这种方式工作,以便可以保留客户端IP。

请注意,列出为正常的一个节点是ingress nginx controller pod运行的节点。删除此pod并等待它在另一个节点上重新调度-现在另一个节点应该正常。现在运行3个pod副本,每个节点上一个,所有节点都将正常运行。

 类似资料:
  • 我在GCP中建立了自己的Elasticsearch集群。群集已启动并运行良好。 集群包含两个客户端节点,我可以使用它们在内部访问并通过运行状况检查http://IP:9200/和

  • 我有一个ECS集群,它有多个节点(任务定义),由应用程序负载平衡器前置。在负载平衡器和容器级别(在任务定义内)配置健康检查有意义吗? 负载平衡器对每个注册的目标运行配置的健康检查,以便注销故障节点。在容器级别设置健康检查可以完成相同的事情:ECS将注销任何未通过健康检查的容器(根据您的配置)。ECS将始终实例化更多任务定义实例,以满足您所需的计数。 对我来说,如果任务定义只有一个容器,那么只在负载

  • 场景:我有一个Google Compute Engine实例,通过HTTP端口80公开了一个web应用程序,我可以使用外部IP地址直接访问它。 然后,我添加了一个带有运行状况检查的HTTP负载平衡器,之后,我可以通过负载平衡器访问web应用程序而没有任何问题。 现在,如果删除计算实例的外部IP地址,负载平衡器的健康检查就会开始失败。我阅读了[1]并添加了防火墙规则,允许运行状况检查探测来自130.

  • 我试图在谷歌云上设置网络负载均衡器,但健康检查总是返回不健康的结果。 我给你我遵循的步骤 > 我创建了两个windows Server 2012 R2实例 我检查了端口80在这两个实例上是否对公众开放 我创建了转发规则,谷歌云给了我一个外部IP 我在两个服务器实例的网络环回接口中设置了外部IP 我创建了一个网络路由,用于转发两个实例上的流量(路由菜单) 我为169.254.169.254/32(网

  • 我正在Kubernetes(GKE)中运行WebService后端应用程序。它仅由我们的前端Web应用程序使用。通常,来自同一用户(ClientIP)的请求有数十个序列。我的应用程序设置为运行至少2个实例(“minReplicas:2”)。 问题:从日志中我可以看到一个pod过载(接收许多请求)而另一个闲置的情况。两个吊舱都处于就绪状态。 我试图修复它:我试图添加一个自定义就绪状态检查,当有太多打

  • 升级了Spring云版本后,我很难从Ribbon切换到Spring云负载平衡器。使用Feign设置SimpleDiscoveryClient很容易。但是simplediscovery客户端“太简单了”。我想至少添加一个healthcheck,这样它就不会使用可能停机的实例 https://docs.spring.io/spring-cloud-commons/docs/current/refere