Linkerd负载均衡gRPC服务以意外方式

时间:2018-12-21 03:18:10

标签: kubernetes grpc linkerd

我正在尝试使用linkerd解决gRPC负载平衡问题,但是仅当所有服务都部署在同一节点上时,请求才会平均分配。如果我在其他节点上部署服务器,则所有请求都将定向到其中一个。

https://imgur.com/a/F2GcbuY

gRPC服务和客户端都是.Net应用程序。 Kubernetes版本是v1.12.3。 Linkerd版本为稳定版2.1.0。

这是我的gRPC服务的配置:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: demogrpc-deploy
  name: demogrpc
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demogrpc
  template:
    metadata:
      labels:
        app: demogrpc
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - topologyKey: kubernetes.io/hostname
            labelSelector:
              matchLabels:
                app: demogrpc
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - image: 192.168.99.25:30000/demogrpchost:1.0.9
        imagePullPolicy: Always
        name: demogrpc
        env:
        - name: GRPC_HOST
          value: "127.0.0.1"
        - name: SERVICE_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: GRPC_PORT
          value: "8000"
        ports:
        - containerPort: 8000
          name: grpc
      imagePullSecrets:
      - name: kubernetes-registry
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: demogrpc
  name: demogrpc
spec:
  clusterIP: None
  ports:
  - port: 8000
    targetPort: 8000
  selector:
    app: demogrpc

在不同节点上部署服务时,如何使负载平衡起作用?


更新:

我将链接器注入到客户端,它现在开始分发请求,但是负载平衡器仍然忽略了其中一项服务。


更新:

我将服务规模扩大到了5,客户3,发生了一些有趣的事情。所有服务现在都接收请求,但是对于每个客户端,他们的请求将分配给其中四个服务。

https://imgur.com/dXdjTsR

1 个答案:

答案 0 :(得分:0)

要配置 Linkerd 服务网格,每个节点将具有一个Linkerd。节点之间将没有service-to-service直接通信,仅允许 Linkerd 与另一个Linkerd进行通信。 Linkerd将与在同一节点中创建的服务进行通信。

在您的情况下,您的Kubernetes服务将与 Linkerd 对话,然后Linkerd会将其请求分发给所有其他Linkerd。这就是在节点之间分配请求的方式。然后上游Linkerd将在其节点上的服务之间分配请求。

enter image description here

要获取更多信息,请检查以下内容:linkerd-as-a-service-mesh