我使用HAProxy作为我的GKE集群中的入口控制器。并将HAProxy服务公开为LoadBalancer服务(内部)。
最近,我遇到了一个问题,在这个问题上,HA代理服务改变了它的外部IP,流量停止了到HAProxy的路由。这个问题在不同的日子里发生过多次(现在已经停止了)。我必须手动将新的外部IP添加到负载均衡器的前端,以允许通信到HAProxy。
有两个吊舱在运行HAProxy,它们都运行了好几天,日志中什么也没有。我猜想这是与服务或GCP LB有关的东西,而不是HAProxy本身。
恐怕我没有任何与此有关的日志。
我还是不知道是什么原因导致了服务IP的改变。由于没有最近的变化,集群和所有服务都正常运行了很多天,突然发生了这种情况。
以前有没有人遇到过类似的问题?或者我能做些什么来避免这样的问题呢?
是什么导致了IP的改变?
以下是配置我的服务的方式:
---
apiVersion: v1
kind: Service
metadata:
labels:
run: haproxy-ingress
name: haproxy-ingress
namespace: haproxy-controller
annotations:
cloud.google.com/load-balancer-type: "Internal"
networking.gke.io/internal-load-balancer-allow-global-access: "true"
cloud.google.com/network-tier: "Premium"
spec:
selector:
run: haproxy-ingress
type: LoadBalancer
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
- name: stat
port: 1024
protocol: TCP
targetPort: 1024找到了一些原木:
Warning SyncLoadBalancerFailed 30m (x3570 over 13d) service-controller Error syncing load balancer: failed to ensure load balancer: googleapi: Error 409: IP_IN_USE_BY_ANOTHER_RESOURCE - IP '10.17.129.17' is already being used by another resource.
Normal EnsuringLoadBalancer 3m33s (x3576 over 13d) service-controller Ensuring load balancer发布于 2021-05-18 11:02:31
简单的回答是:服务的External IP是短暂的。
因为HA控制器吊舱是重新创建的,所以HA服务是用一个短暂的IP创建的。
为了避免这个问题,我建议使用可以在loadBalancerIP字段中引用的静态IP。
这可以通过以下步骤来完成:
例YAML:
apiVersion: v1
kind: Service
metadata:
name: helloweb
labels:
app: hello
spec:
selector:
app: hello
tier: web
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
loadBalancerIP: "YOUR.IP.ADDRESS.HERE"发布于 2021-05-16 00:48:12
不幸的是,如果没有日志,就很难确定。您应该检查GKE提供给云日志的审计日志,因为这可能会让您了解发生了什么。一种选择是GCP“oops”(Oops),GLB和GKE重新创建了它,从而给了它一个新的IP。不过,我从未听说过LBs会出现这种情况(这种情况经常发生在节点上,而不是LBs)。更常见的情况是,您运行了一些kubectl命令,该命令无意中删除了Service,然后由您设置的管理层(Argo、Flux、Helm运算符等)重新创建了它,但delete+recreate再次表示它是一个新的LB带新IP。审计日志中应该可以看到后一种情况,因此可以肯定地检查它们。
https://stackoverflow.com/questions/67551961
复制相似问题