【问题标题】:Default Load Balancing in KubernetesKubernetes 中的默认负载均衡
【发布时间】:2019-07-11 04:15:54
【问题描述】:

我最近开始使用 Kubernetes 集群。我们集群中给定 Kubernetes 服务的网络调用流程如下所示:

外部非 K8S 负载均衡器 -> 入口控制器 -> 入口资源 -> 服务 -> Pod

对于给定的服务,有两个副本。通过查看副本中容器的日志,我可以看到调用被路由到不同的 pod。据我所知,我们没有在任何地方为我们在 Kubernetes 中的服务明确设置任何负载平衡策略。

我有几个问题:

1) K8S 有默认的负载均衡策略吗?我读过有关 kube-proxy 和随机路由的信息。这绝对不是循环赛。 2)是否有一种明显的方法可以在 Ingress 资源本身中指定负载平衡规则?以每项服务为基础?

查看我们的一个 Ingress 资源,我可以看到“loadBalancer”属性为空:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
ingress.kubernetes.io/rewrite-target: /
kubectl.kubernetes.io/last-applied-configuration: |
  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"ingress.kubernetes.io/rewrite-target":"/","nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"example-service-ingress","namespace":"member"},"spec":{"rules":[{"host":"example-service.x.x.x.example.com","http":{"paths":[{"backend":{"serviceName":"example-service-service","servicePort":8080},"path":""}]}}]}}
nginx.ingress.kubernetes.io/rewrite-target: /
  creationTimestamp: "2019-02-13T17:49:29Z"
  generation: 1
  name: example-service-ingress
  namespace: x
  resourceVersion: "59178"
  selfLink: /apis/extensions/v1beta1/namespaces/x/ingresses/example-service-ingress
  uid: b61decda-2fb7-11e9-935b-02e6ca1a54ae
spec:
  rules:
  - host: example-service.x.x.x.example.com
    http:
      paths:
      - backend:
          serviceName: example-service-service
          servicePort: 8080
status:
  loadBalancer:
    ingress:
    - {}

我应该指定 - 我们使用的是本地 Kubernetes 集群,而不是云端。

干杯!

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    Service 的 Pod 之间的“内部负载均衡”已经在 this question from a few days ago 中介绍过。

    Ingress 并没有真正做任何特别的事情(除非你一直在破解它使用的 NGINX 配置)——它将使用与链接问题中相同的服务规则。

    如果您想要或需要对如何在服务中路由 pod 进行细粒度控制,可以扩展 Kubernetes 的功能 - 我建议您查看 Istio 的流量管理功能,作为其功能之一是能够动态控制服务中不同 pod 接收多少流量。

    【讨论】:

      【解决方案2】:

      我看到两个可以与 k8s 一起使用的选项:

      1. 使用istio's traffic management 并创建一个DestinationRule。目前支持三种负载均衡模式:

        • 循环赛
        • 随机
        • 加权最小请求

          apiVersion: networking.istio.io/v1alpha3
          kind: DestinationRule
          ...
          spec:
            ...
            subsets:
            - name: test
              ...
              trafficPolicy:
                loadBalancer:
                  simple: ROUND_ROBIN
          
      2. 在 k8s 上使用 envoy proxy 中的 lb_typeambassador。有关大使的更多信息,请访问https://www.getambassador.io

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        • 2022-10-23
        • 1970-01-01
        • 2019-04-10
        • 1970-01-01
        相关资源
        最近更新 更多