正如标题所示,GCP-LB 或作为 LoadBalancer 类型公开的 HAProxy Ingress Controller Service 将流量不均匀地分配给 HAProxy Ingress Controller Pod。
设置:
我在 GCP 中运行 GKE 集群,并使用 HAProxy 作为入口控制器。
HAProxy 服务作为具有静态IP 的负载均衡器类型公开。
HAProxy 服务的 YAML:
apiVersion: v1
kind: Service
metadata:
name: haproxy-ingress-static-ip
namespace: haproxy-controller
labels:
run: haproxy-ingress-static-ip
annotations:
cloud.google.com/load-balancer-type: "Internal"
networking.gke.io/internal-load-balancer-allow-global-access: "true"
cloud.google.com/network-tier: "Premium"
cloud.google.com/neg: '{"ingress": false}'
spec:
selector:
run: haproxy-ingress
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
type: LoadBalancer
loadBalancerIP: "10.0.0.76"
用于 HAProxy 部署的 YAML:
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: haproxy-ingress
name: haproxy-ingress
namespace: haproxy-controller
spec:
replicas: 2
selector:
matchLabels:
run: haproxy-ingress
template:
metadata:
labels:
run: haproxy-ingress
spec:
serviceAccountName: haproxy-ingress-service-account
containers:
- name: haproxy-ingress
image: haproxytech/kubernetes-ingress
args:
- --configmap=haproxy-controller/haproxy
- --default-backend-service=haproxy-controller/ingress-default-backend
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: stat
containerPort: 1024
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: run
operator: In
values:
- haproxy-ingress
topologyKey: kubernetes.io/hostname
HAProxy 配置图:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: haproxy
namespace: haproxy-controller
data:
问题:
在调试其他问题时,我发现 HAProxy pod 上的流量分布不均匀。例如,一个 Pod 每秒接收 540k 请求,而另一个 Pod 每秒接收 80k 请求。
在进一步调查中,还发现,新启动的 Pod 在接下来的 20-30 分钟内不会开始接收流量。即使在那之后,也只有一小部分流量通过它们。
流量分布不均的另一个版本。这似乎根本不是随机的,看起来像是加权流量分布:
流量分布不均的另一个版本。来自一个 Pod 的流量似乎正在转向另一个 Pod。
什么可能导致这种不均匀的流量分布并且在很长一段时间内没有向新的 Pod 发送流量?