containers-roadmap icon indicating copy to clipboard operation
containers-roadmap copied to clipboard

[EKS] [request]: Network Load Balancer with mixed protocols

Open kerwanp opened this issue 4 years ago • 4 comments

Community Note

  • Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

Tell us about your request Most of multiplayer game servers are base on TCP&UDP which is currently not implemented in Kubernetes (there is a workaround).

Which service(s) is this request for? This request is for EKS.

Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard?

Kubernetes does not currently support mixed protocols, there is a pull requests that implement the feature: https://github.com/kubernetes/kubernetes/pull/75831

There is a workaround that allow us to mix protocols by creating a service for each protocol (https://github.com/kubernetes/kubernetes/issues/23880#issuecomment-269054735):

  • Create the TCP service
  • Wait for the service to have the external IP
  • Create the UDP service and specifying the external IP in spec.loadBalancerIP

This workaround can not work for AWS EKS because of the following problems:

  • Services (type=LoadBalancer) NLB does not support UDP: https://github.com/kubernetes/kubernetes/issues/79523
    • The UDP support for NLBs has been implemented, but not in EKS. This fix is important and not directly related with mixed protocols.
  • We are not able to specify loadBalancerIP on a service with the type LoadBalancer (Error syncing load balancer: failed to ensure load balancer: LoadBalancerIP cannot be specified for AWS ELB)
    • It should create a target group for each protocol and the differents listeners on the NLB.

Additional context After the support for mixed protocols in Kubernetes (maybe 1.19), using mixed protocols in services would create a target group with TCP&UDP and a listener with TCP&UDP in the NLB.

kerwanp avatar Apr 17 '20 22:04 kerwanp

The mixed protocols in one service KEP isn't in 1.19 currently, as there seems to be some pending decisions about how to handle the feature introduction and what happens when older k8s sees such a Service definition.

k8s 1.19 will support UDP Services. To make the workaround work, the Load Balancer support would still need to be modified to be able to recognise a second Service for the same loadBalancerIP and merge the definitions. That change seems unlikely, as it would be fairly complex (the Cloud Provider code would have to go hunting for matching Services, as it only gets asked to set up one Load Balancer at a time, as I understand the code) and less-interesting once the mixed-protocols KEP is integrated and support added to the AWS Cloud Provider.

TBBle avatar Jun 25 '20 05:06 TBBle

Mixed protocols support in LoadBalancer was merged into k8s today (KEP, issue, PR). It should be released in 1.20.

jbg avatar Nov 14 '20 13:11 jbg

Support for this would come via https://github.com/kubernetes-sigs/aws-load-balancer-controller/issues/1608.

TBBle avatar Feb 27 '21 01:02 TBBle

This is planned in an upcoming release of AWS LB controller

mikestef9 avatar Apr 11 '24 21:04 mikestef9