1 Introduction to Application Load Balancers

Important:

The software described in this documentation is either in Extended Support or Sustaining Support. See Oracle Open Source Support Policies for more information.

We recommend that you upgrade the software described by this documentation as soon as possible.

Network load balancers provide a method of externally exposing Kubernetes applications. A Kubernetes LoadBalancer service is used to create a network load balancer that provides and exposes an external IP address that can be used to connect to an application from outside the cluster.

More information on Kubernetes services, including the LoadBalancer service, is available in the upstream documentation at:

https://kubernetes.io/docs/concepts/services-networking/service/

Oracle Cloud Native Environment provides two methods to create a LoadBalancer service: using the Oracle Cloud Infrastructure load balancer, or using MetalLB.

The Oracle Cloud Infrastructure load balancer provides network load balancers for Kubernetes applications running on Oracle Cloud Infrastructure.

MetalLB is a network load balancer for Kubernetes applications running on bare metal hosts. MetalLB allows you to use Kubernetes LoadBalancer services, which traditionally make use of a cloud provider network load balancer, in a bare metal environment.

Introduction to the Oracle Cloud Infrastructure Cloud Controller Manager Module

The Oracle Cloud Infrastructure Flexible Network Load Balancing service (Oracle Cloud Infrastructure load balancer) provides automated traffic distribution from one entry point to multiple backend servers in a Virtual Cloud Network (VCN). It operates at the connection level and load balances incoming client connections to healthy backend servers based on Layer 3/Layer 4 (IP protocol) data.

For more information on the Oracle Cloud Infrastructure load balancer, see the Oracle Cloud Infrastructure documentation.

The Oracle Cloud Infrastructure Cloud Controller Manager module is used to create and manage Oracle Cloud Infrastructure load balancers for Kubernetes applications. The Oracle Cloud Infrastructure Cloud Controller Manager module is deployed by the Helm module into a Kubernetes cluster.

The Oracle Cloud Infrastructure Cloud Controller Manager module uses the Kubernetes Cloud Controller Manager (oci-cloud-controller-manager) to provide and manage Oracle Cloud Infrastructure load balancers. The Kubernetes Cloud Controller Manager ServiceController is responsible for creating load balancers when a Kubernetes LoadBalancer service is created.

The Platform API Server communicates with the Oracle Cloud Infrastructure API to provision and manage Oracle Cloud Infrastructure load balancers.

For more information on the Kubernetes Cloud Controller Manager, see the upstream documentation at:

https://github.com/oracle/oci-cloud-controller-manager

Introduction to the MetalLB Module

MetalLB is a network load balancer for Kubernetes applications running on bare metal hosts. MetalLB allows you to use Kubernetes LoadBalancer services, which traditionally make use of a cloud provider network load balancer, in a bare metal environment.

MetalLB has two features that enable the network load balancer: address allocation, and external announcement.

Address allocation provides IP addresses to Kubernetes applications from the pool of IP addresses you provide in the ConfigMap file.

External announcement makes the network beyond the Kubernetes cluster aware that the IP is available in the cluster. This is provided using either Address Resolution Protocol (ARP) and Neighbor Discover Protocol (NDP) in Layer 2 mode, or Border Gateway Protocol (BGP) in BGP mode.

For more information on MetalLB, see the upstream documentation at:

https://metallb.universe.tf/concepts/

The MetalLB module is used to set up network load balancers for Kubernetes applications using MetalLB. The MetalLB module is deployed by the Helm module into a Kubernetes cluster.

Oracle Cloud Native Environment deploys MetalLB onto the control plane nodes using a ConfigMap file you set up beforehand.