The CNCF has accepted Porter, a load balancer meant for bare-metal Kubernetes clusters, in its Landscape. Porter uses BGP and ECMP to load balance traffic in self-hosted Kubernetes clusters.
There are two standard ways to expose Kubernetes services to external clients - the "LoadBalancer" service type and Ingress. When Kubernetes is deployed on cloud vendor platforms like GCP and AWS, these mechanisms depend on the vendor's load balancer implementation. Bare-metal Kubernetes deployments need a load balancer implementation to provide this functionality. Porter provides a LoadBalancer service type implementation by dynamic configuration routing using BGP, IP access management, and traffic load balancing. Porter is part of the KubeSphere suite.
InfoQ reached out to Feynman Zhou, information developer at QingCloud, to find out more about Porter.
Porter uses the Equal-cost multi-path (ECMP) routing strategy with the Border Gateway Protocol (BGP) where routing to a single destination can happen over multiple best paths. Using multipath allows for installing multiple BGP paths in the routing table, and thus load balance traffic over multiple links. The BGP server runs as a StatefulSet and the agents run on each node as a DaemonSet, and the BGP configuration lies in a ConfigMap. The LB controller and agent component synchronizes the configured BGP routes to the physical switch in the cluster. The other component - EIP service - dynamically updates the EIP for the service.
Image courtesy: https://github.com/kubesphere/porter/
Porter uses the GoBGP project as its BGP implementation. Zhou elaborates:
It is used as a library by Porter. Going forward, we will change this way and adopt dynamic configuration of daemons. Therefore, different BGP projects can be supported as long as it complies with BGP.
MetalLB - another project with similar aims - also supports BGP based load-balancing. Both of these projects are targeted at bare-metal Kubernetes clusters. However, MetalLB does work on cloud platforms that allow access to the underlying network layers required for it to function. Zhou says that "it is possible that Porter will support Neutron BGP to publish routes in the future" on self-managed OpenStack clouds. He adds that for OpenStack, users can also use the official load balancer plugin.
Currently, Porter supports IPv4. Zhou says that "Porter will support IPv6 in the future. Currently it does not support it because this is not an urgent need as many users are still using IPv4".
In response to a question about monitoring and metrics for Porter, Zhou responded:
Currently, the metrics of Porter are mainly related to EIP, such as the remaining IP address. They can be checked through EIP status. Besides, it is our plan to allow Porter to expose more monitoring metrics in a way that is Prometheus compatible. Monitoring metrics include IP Address in use, IP Address total and ARP/NDP related metrics like request/response/transmissions. Some metrics that show the running status of Porter components will also be included. At the same time, we will release some alert rules (within AlertManager) based on the metrics above. In this way, users can take better advantage of monitoring metrics for alerts.
Porter can be installed using the provided Helm chart and the source code is available on GitHub.