如标题所示,GCP-LB或HAProxy侵入控制器服务(作为LoadBalancer类型公开)正在不均匀地将流量分配给HAProxy侵入控制器Pods。
设置:
我在GCP中运行GKE集群,并使用HAProxy作为入口控制器。
HAProxy服务公开为带有staticIP的类型负载平衡器。
用于 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/hostnameHAProxy ConfigMap:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: haproxy
namespace: haproxy-controller
data:问题:
在调试其他问题时,我发现HAProxy吊舱上的流量分布不均。例如,一个Pod接收540 k请求/秒,另一个Pod接收80k请求/秒。
在进一步的调查中,我们还发现,在接下来的20到30分钟内,新开的Pods不会开始接收流量。即使在那之后,也只有一小部分交通通过它们。
查看下面的图表:

另一个版本的流量分布不均。这看起来一点也不随机,看起来像一个加权的流量分布:

另一个版本的不均匀交通分布。从一只脚到另一只脚的交通似乎正在转向另一只脚。

是什么原因造成这种不均衡的流量分布,并没有发送到新的豆荚在一个很长的时间?
发布于 2021-06-22 12:17:54
Kubernetes与GCP负载均衡器集成。K8s为用户提供入口和服务等原语,以便通过L4/L7负载平衡器公开豆荚。在引入NEGs之前,负载均衡器将流量分配给VM实例,“kube”程序iptables将流量转发到后端吊舱。这可能会导致流量分布不均、负载均衡器健康检查不可靠和影响网络性能。
我建议您使用容器本机负载平衡,它允许负载均衡器直接瞄准库伯内特斯波兹,并将流量均匀分配给波兹。使用容器-本机负载均衡,负载均衡器流量直接分配给应该接收流量的Pods,从而消除额外的网络跳数。它还有助于改进健康检查,因为它直接针对Pods,您可以看到从HTTP(S)负载均衡器到Pods的延迟。HTTP(S)负载均衡器到每个Pod的延迟是可见的,它是通过节点IP基容器-本机负载平衡进行聚合的。这使得在NEG级别上对您的服务进行故障排除变得更容易。
容器-本机负载平衡器不支持内部TCP/UDP负载平衡器或网络负载平衡器,因此如果要使用这种负载平衡,则必须将服务拆分为HTTP(80)、HTTPS(443)和TCP(1024)。若要使用此功能,群集必须启用HTTP负载平衡。GKE集群默认启用HTTP负载平衡;您不能禁用它。
https://stackoverflow.com/questions/68054846
复制相似问题