Skip to content

Commit

Permalink
Merge pull request #120 from backguynn/main
Browse files Browse the repository at this point in the history
add gateway-api (L4)
  • Loading branch information
UltraInstinct14 authored Mar 20, 2024
2 parents 372338d + 2e700ae commit a42040f
Show file tree
Hide file tree
Showing 18 changed files with 1,891 additions and 535 deletions.
24 changes: 23 additions & 1 deletion cmd/loxilb-agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"time"

"github.com/loxilb-io/kube-loxilb/pkg/agent/config"
"github.com/loxilb-io/kube-loxilb/pkg/agent/manager/gatewayapi"
"github.com/loxilb-io/kube-loxilb/pkg/agent/manager/loadbalancer"
"github.com/loxilb-io/kube-loxilb/pkg/api"
"github.com/loxilb-io/kube-loxilb/pkg/ippool"
Expand All @@ -33,6 +34,8 @@ import (
"k8s.io/client-go/informers"
"k8s.io/klog/v2"

sigsInformer "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions"

tk "github.com/loxilb-io/loxilib"
)

Expand All @@ -53,12 +56,13 @@ func run(o *Options) error {
klog.Infof(" Build: %s", BuildInfo)

// create k8s Clientset, CRD Clientset and SharedInformerFactory for the given config.
k8sClient, _, _, err := k8s.CreateClients(o.config.ClientConnection, "")
k8sClient, _, _, sigsClient, err := k8s.CreateClients(o.config.ClientConnection, "")
if err != nil {
return fmt.Errorf("error creating k8s clients: %v", err)
}

informerFactory := informers.NewSharedInformerFactory(k8sClient, informerDefaultResync)
sigsInformerFactory := sigsInformer.NewSharedInformerFactory(sigsClient, informerDefaultResync)

// networkReadyCh is used to notify that the Node's network is ready.
// Functions that rely on the Node's network should wait for the channel to close.
Expand All @@ -85,6 +89,7 @@ func run(o *Options) error {
networkConfig := &config.NetworkConfig{
LoxilbURLs: o.config.LoxiURLs,
LoxilbLoadBalancerClass: o.config.LoxilbLoadBalancerClass,
LoxilbGatewayClass: o.config.LoxilbGatewayClass,
ExternalCIDR: o.config.ExternalCIDR,
ExternalCIDR6: o.config.ExternalCIDR6,
SetBGP: o.config.SetBGP,
Expand Down Expand Up @@ -169,6 +174,18 @@ func run(o *Options) error {
}
}

gatewayClassManager := gatewayapi.NewGatewayClassManager(
k8sClient, sigsClient, networkConfig, sigsInformerFactory)

gatewayManager := gatewayapi.NewGatewayManager(
k8sClient, sigsClient, networkConfig, ipPool, sigsInformerFactory)

tcpRouteManager := gatewayapi.NewTCPRouteManager(
k8sClient, sigsClient, networkConfig, sigsInformerFactory)

udpRouteManager := gatewayapi.NewUDPRouteManager(
k8sClient, sigsClient, networkConfig, sigsInformerFactory)

lbManager := loadbalancer.NewLoadBalancerManager(
k8sClient,
loxilbClients,
Expand Down Expand Up @@ -205,8 +222,13 @@ func run(o *Options) error {
}()
log.StartLogFileNumberMonitor(stopCh)
informerFactory.Start(stopCh)
sigsInformerFactory.Start(stopCh)

go lbManager.Run(stopCh, loxiLBLiveCh, loxiLBPurgeCh, loxiLBSelMasterEvent)
go gatewayClassManager.Run(stopCh)
go gatewayManager.Run(stopCh)
go tcpRouteManager.Run(stopCh)
go udpRouteManager.Run(stopCh)

<-stopCh

Expand Down
2 changes: 2 additions & 0 deletions cmd/loxilb-agent/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ type AgentConfig struct {
NodePortServiceVirtIP string `yaml:"nodePortServiceVirtIP,omitempty"`
// support LoadBalancerClass
LoxilbLoadBalancerClass string `yaml:"loxilbLoadBalancerClass,omitempty"`
// support GatewayClass manager name
LoxilbGatewayClass string `yaml:"loxilbGatewayClass,omitempty"`
// support LoadBalancer external IP
ExternalCIDR string `yaml:"externalCIDR,omitempty"`
// support LoadBalancer external secondary IP. This is a comma separated list
Expand Down
10 changes: 10 additions & 0 deletions cmd/loxilb-agent/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ func (o *Options) addFlags(fs *pflag.FlagSet) {
fs.StringVar(&o.config.ExternalCIDR6, "externalCIDR6", o.config.ExternalCIDR6, "External CIDR6 Range")
fs.StringVar(&secondaryCIDRs6, "externalSecondaryCIDRs6", secondaryCIDRs6, "External Secondary CIDR6 Range(s)")
fs.StringVar(&o.config.LoxilbLoadBalancerClass, "loxilbLoadBalancerClass", o.config.LoxilbLoadBalancerClass, "Load-Balancer Class Name")
fs.StringVar(&o.config.LoxilbGatewayClass, "loxilbGatewayClass", o.config.LoxilbGatewayClass, "GatewayClass manager Name")
fs.Uint16Var(&o.config.SetBGP, "setBGP", o.config.SetBGP, "Use BGP routing")
fs.Uint16Var(&o.config.ListenBGPPort, "listenBGPPort", o.config.ListenBGPPort, "Custom BGP listen port")
fs.BoolVar(&o.config.EBGPMultiHop, "eBGPMultiHop", o.config.EBGPMultiHop, "Enable multi-hop eBGP")
Expand Down Expand Up @@ -174,6 +175,12 @@ func (o *Options) validate(args []string) error {
}
}

if o.config.LoxilbGatewayClass != "" {
if ok := strings.Contains(o.config.LoxilbGatewayClass, "/"); !ok {
return fmt.Errorf("LoxilbGatewayClass must be a label-style identifier")
}
}

if o.config.SetRoles != "" {
if net.ParseIP(o.config.SetRoles) == nil {
return fmt.Errorf("SetRoles %s config is invalid", o.config.SetRoles)
Expand Down Expand Up @@ -229,6 +236,9 @@ func (o *Options) setDefaults() {
if o.config.LoxilbLoadBalancerClass == "" {
o.config.LoxilbLoadBalancerClass = "loxilb.io/loxilb"
}
if o.config.LoxilbGatewayClass == "" {
o.config.LoxilbGatewayClass = "loxilb.io/loxilb"
}
if o.config.ExternalCIDR == "" {
o.config.ExternalCIDR = "123.123.123.1/24"
}
Expand Down
68 changes: 35 additions & 33 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,60 +4,62 @@ go 1.19

require (
github.com/loxilb-io/loxilib v0.8.9-0.20240315085933-0925d8a579ed
github.com/spf13/cobra v1.6.1
github.com/spf13/cobra v1.7.0
github.com/spf13/pflag v1.0.5
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.26.0
k8s.io/apiextensions-apiserver v0.26.0
k8s.io/apimachinery v0.26.0
k8s.io/client-go v0.26.0
k8s.io/component-base v0.26.0
k8s.io/klog/v2 v2.80.1
k8s.io/api v0.28.3
k8s.io/apiextensions-apiserver v0.28.3
k8s.io/apimachinery v0.28.3
k8s.io/client-go v0.28.3
k8s.io/component-base v0.28.3
k8s.io/klog/v2 v2.100.1
k8s.io/kube-aggregator v0.26.0
sigs.k8s.io/gateway-api v1.0.0
)

require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/jsonreference v0.20.0 // indirect
github.com/go-openapi/swag v0.19.14 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/go-openapi/jsonpointer v0.20.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.4 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/gnostic v0.5.7-v3refs // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/imdario/mergo v0.3.6 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/loxilb-io/sctp v0.0.0-20230519081703-6d1baec82fd4 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/prometheus/client_golang v1.14.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.45.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
golang.org/x/oauth2 v0.13.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/term v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
google.golang.org/appengine v1.6.7 // indirect
golang.org/x/time v0.3.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)
Loading

0 comments on commit a42040f

Please sign in to comment.