首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCP-LB不均匀地分配给HAProxy入口控制器Pods的流量

GCP-LB不均匀地分配给HAProxy入口控制器Pods的流量
EN

Stack Overflow用户
提问于 2021-06-20 10:21:58
回答 1查看 327关注 0票数 1

如标题所示,GCP-LB或HAProxy侵入控制器服务(作为LoadBalancer类型公开)正在不均匀地将流量分配给HAProxy侵入控制器Pods。

设置:

我在GCP中运行GKE集群,并使用HAProxy作为入口控制器。

HAProxy服务公开为带有staticIP的类型负载平衡器。

用于 HAProxy服务的YAML:

代码语言:javascript
复制
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:

代码语言:javascript
复制
---
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 ConfigMap:

代码语言:javascript
复制
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: haproxy
  namespace: haproxy-controller
data:

问题:

在调试其他问题时,我发现HAProxy吊舱上的流量分布不均。例如,一个Pod接收540 k请求/秒,另一个Pod接收80k请求/秒。

在进一步的调查中,我们还发现,在接下来的20到30分钟内,新开的Pods不会开始接收流量。即使在那之后,也只有一小部分交通通过它们。

查看下面的图表:

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

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

是什么原因造成这种不均衡的流量分布,并没有发送到新的豆荚在一个很长的时间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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负载平衡;您不能禁用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68054846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档