Kubernetes中的默认负载平衡

Default Load Balancing in Kubernetes

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

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

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

我有几个问题:

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

查看我们的Ingress资源之一,我可以看到'loadBalancer'属性为空:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
---
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集群,而不是在云上。

干杯!


几天前,此问题已经涵盖了服务Pod之间的"内部负载平衡"。

Ingress实际上并没有做任何特别的事情(除非您一直在使用它所使用的NGINX配置进行黑客攻击)-它将使用与链接的问题相同的服务规则。

如果您希望或需要对服务中Pod的路由方式进行细粒度控制,可以扩展Kubernetes的功能-我建议您研究一下Istio的流量管理功能,因为Istio的功能之一就是能够动态控制服务中不同Pod接收的流量。


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

  • 使用istio的流量管理并创建DestinationRule。当前支持三种负载均衡模式:

    • 轮循
    • 随机的
    • 加权最小请求

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      ...
      spec:
        ...
        subsets:
        - name: test
          ...
          trafficPolicy:
            loadBalancer:
              simple: ROUND_ROBIN
  • 在k8s上与大使一起在特使代理中使用lb_type。有关大使的更多信息,请参见https://www.getambassador.io。