Google 负载均衡器健康检查失败
Google loadbalancer health checkup fails
我按照以下 official documentation 在 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 次失败。它通过入口控制器为 运行 的实例。我调试它但没有找到任何线索。有人可以帮我解决这个问题吗?
其中一个可能的原因是 Firewall rules。 Google 已指定 Google 健康检查探测器的 IP 范围和端口详细信息。您必须配置 ingress allow
规则以建立与后端的健康检查探测连接。
有关其他调试详细信息,请查看此 Google 云平台博客:Debugging Health Checks in Load Balancing on Google Compute Engine
如果您查看您申请的 deploy.yaml,您会看到:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: LoadBalancer
externalTrafficPolicy: Local
注意 externalTrafficPolicy: Local
。它被用于 Preserve the client source ip.
这里有更好的解释:Source IP for Services with Type=LoadBalancer
来自 k8s 文档:
However, if you're running on Google Kubernetes Engine/GCE, setting the same service.spec.externalTrafficPolicy field to Local forces nodes without Service endpoints to remove themselves from the list of nodes eligible for loadbalanced traffic by deliberately failing health checks.
这些健康检查旨在失败。它以这种方式工作,以便可以保留客户端 IP。
请注意,被列为健康的节点是 ingress-nginx-controller pod 运行s 所在的节点。删除这个 pod 并等待它在不同的节点上重新安排——现在这个其他节点应该是健康的。现在 运行 3 个 pod 副本,每个节点一个,所有节点都健康。
我按照以下 official documentation 在 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 次失败。它通过入口控制器为 运行 的实例。我调试它但没有找到任何线索。有人可以帮我解决这个问题吗?
其中一个可能的原因是 Firewall rules。 Google 已指定 Google 健康检查探测器的 IP 范围和端口详细信息。您必须配置 ingress allow
规则以建立与后端的健康检查探测连接。
有关其他调试详细信息,请查看此 Google 云平台博客:Debugging Health Checks in Load Balancing on Google Compute Engine
如果您查看您申请的 deploy.yaml,您会看到:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: LoadBalancer
externalTrafficPolicy: Local
注意 externalTrafficPolicy: Local
。它被用于 Preserve the client source ip.
这里有更好的解释:Source IP for Services with Type=LoadBalancer
来自 k8s 文档:
However, if you're running on Google Kubernetes Engine/GCE, setting the same service.spec.externalTrafficPolicy field to Local forces nodes without Service endpoints to remove themselves from the list of nodes eligible for loadbalanced traffic by deliberately failing health checks.
这些健康检查旨在失败。它以这种方式工作,以便可以保留客户端 IP。
请注意,被列为健康的节点是 ingress-nginx-controller pod 运行s 所在的节点。删除这个 pod 并等待它在不同的节点上重新安排——现在这个其他节点应该是健康的。现在 运行 3 个 pod 副本,每个节点一个,所有节点都健康。