【问题标题】:Ingress rule not distribute traffic equally between pods,入口规则不会在 Pod 之间平均分配流量,
【发布时间】:2021-08-07 17:02:27
【问题描述】:

我们在 GKE 中启用了水平 pod 自动缩放,我们的 pod 位于 clusterIP 类型的服务后面,我们使用 NGINX Ingress 控制器将公共流量路由到该服务。 在监控使用情况时,我们注意到 Pod 之间的流量分布不均。它将流量路由到一个 pod。但是每当我们手动删除该特定 pod 时,它会将流量路由到另一个可用的 pod。

有什么方法可以让入口规则平均分配流量

入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/load-balance: round_robin
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.org/proxy-connect-timeout: 30s
    nginx.org/proxy-read-timeout: 20s
  generation: 11
  name: test-ingress
  namespace: default
spec:
  rules:
  - host: gateway.example.com
    http:
      paths:
      - backend:
          serviceName: gateway-443
          servicePort: 443
        path: /
      - backend:
          serviceName: gateway-80
          servicePort: 80
        path: /

服务清单

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/neg: '{"ingress":true}'
    serviceloadbalancer/lb.cookie-sticky-session: "false"
    serviceloadbalancer/lb.host: gateway.example.com
    serviceloadbalancer/lb.sslTerm: "true"
  labels:
    name: gateway-default
    port: gateway-default-8243
  name: gateway-8243
  namespace: default
spec:
  clusterIP: 10.20.215.122
  ports:
  - name: pass-through-https
    port: 443
    protocol: TCP
    targetPort: 8243
  selector:
    name: gatway-default
  sessionAffinity: ClientIP
  type: ClusterIP

【问题讨论】:

    标签: google-kubernetes-engine


    【解决方案1】:

    您的 Ingress 应该有一个 serviceName,在您的情况下是“gateway-443”和“gateway-80”,但在 metadata.name 中服务中指定的实际名称是“gateway-8243”。

    (如果这是故意的,请发布其他资源的 YAML,以便我查看整个设置。)

    另外请查看this page,其中有很多关于如何实现您想要做的事情的好例子。

    【讨论】:

    • 感谢您的回复,对不起,我复制入口规则时出错了,服务名称应该是gateway-8243。
    【解决方案2】:

    终于搞清楚问题了,原因是设置sessionAffinity: ClientIP,

    仅当您想确保来自特定客户端的连接每次都传递到同一个 Pod 时,您应该将会话亲和性设置为 ClientsIP,它将根据客户端的 IP 地址路由流量。要在 pod 之间平均分配流量,您可以使用值“None”或删除此 sessionAffinity 参数,因为默认值为 none。

    参考资料,

    https://kubernetes.io/docs/concepts/services-networking/service/#proxy-mode-userspace

    How to use Session Affinity on requests to Kubernetes service?

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多