aws / aws-app-mesh-controller-for-k8s

A controller to help manage App Mesh resources for a Kubernetes cluster.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Grpc Load Balancing not working

metalLeveller opened this issue · comments

commented

Describe the bug
GRPC Load Balancing is not working for several pods in one service. VirtualRouter is sending all requests to only one pod.

Steps to reproduce
Create two services (let's call them A and B), with one service (A) receiving traffic from outside world, and invoking GRPC method on the other service (B). Create multiple pods for service B.

Expected outcome
Traffic should be equally distributed between pods of service B.

Environment

  • App Mesh controller version: appmesh-controller:v1.6.0
  • Envoy version: aws-appmesh-envoy:v1.22.2.1-prod
  • Are you using any integrations? No
  • Kubernetes version: 1.23
  • Using EKS (yes/no), if so version? yes, 1.23

Additional Context:
Looks like duplicate, but that solution didn't work.

Confurigations:

kind: VirtualService
metadata:
  name: user-service
  namespace: app
spec:
  awsName: user-service.app.svc.cluster.local
  provider:
    virtualRouter:
      virtualRouterRef:
        name: user-service-virtual-router
kind: VirtualRouter
metadata:
  namespace: app
  name: user-service-virtual-router
spec:
  listeners:
    - portMapping:
        port: 6565
        protocol: grpc
  routes:
    - name: user-service-route
      httpRoute:
        match:
          prefix: /
        action:
          weightedTargets:
            - virtualNodeRef:
                name: user-service
              weight: 1
kind: VirtualNode
metadata:
  name: user-service
  namespace: app
spec:
  podSelector:
    matchLabels:
      app: user-service
  listeners:
    - portMapping:
        port: 6565
        protocol: grpc
  serviceDiscovery:
    awsCloudMap:
      namespaceName: app
      serviceName: user-service

We were trying to use different configurations for service discovery:

    dns:
      hostname: user-service.app.svc.cluster.local