Skip to content

Commit

Permalink
migrate to controller-runtime controllers for k8s watch events (#3510)
Browse files Browse the repository at this point in the history
Moves from informers to controller-runtime for gateway-api processing.

Signed-off-by: Steve Sloka <slokas@vmware.com>
  • Loading branch information
stevesloka committed May 11, 2021
1 parent 7ed38de commit db368dc
Show file tree
Hide file tree
Showing 6 changed files with 301 additions and 20 deletions.
48 changes: 41 additions & 7 deletions cmd/contour/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import (
"syscall"
"time"

"github.com/projectcontour/contour/internal/controller"

envoy_server_v3 "github.com/envoyproxy/go-control-plane/pkg/server/v3"
contour_api_v1 "github.com/projectcontour/contour/apis/projectcontour/v1"
contour_api_v1alpha1 "github.com/projectcontour/contour/apis/projectcontour/v1alpha1"
Expand Down Expand Up @@ -54,6 +56,10 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/tools/cache"
controller_config "sigs.k8s.io/controller-runtime/pkg/client/config"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
gatewayapi_v1alpha1 "sigs.k8s.io/gateway-api/apis/v1alpha1"
)

// Add RBAC policy to support leader election.
Expand Down Expand Up @@ -399,18 +405,49 @@ func doServe(log logrus.FieldLogger, ctx *serveContext) error {
}
}

// Set up workgroup runner and register informers.
var g workgroup.Group

// Only inform on GatewayAPI resources if Gateway API is found.
if ctx.Config.GatewayConfig != nil {
if clients.ResourcesExist(k8s.GatewayAPIResources()...) {
for _, r := range k8s.GatewayAPIResources() {
if err := informOnResource(clients, r, &dynamicHandler); err != nil {
log.WithError(err).WithField("resource", r).Fatal("failed to create informer")
}

// Setup a Manager
mgr, err := manager.New(controller_config.GetConfigOrDie(), manager.Options{})
if err != nil {
log.WithError(err).Fatal("unable to set up controller manager")
}

// Add the GatetwayAPI Scheme.
err = gatewayapi_v1alpha1.AddToScheme(mgr.GetScheme())
if err != nil {
log.WithError(err).Fatal("unable to add GatewayAPI to scheme.")
}

// Create and register the NewGatewayController controller with the manager.
if _, err := controller.NewGatewayController(mgr, &dynamicHandler, log.WithField("context", "gateway-controller")); err != nil {
log.WithError(err).Fatal("failed to create gateway-controller")
}

// Create and register the NewHTTPRouteController controller with the manager.
if _, err := controller.NewHTTPRouteController(mgr, &dynamicHandler, log.WithField("context", "httproute-controller")); err != nil {
log.WithError(err).Fatal("failed to create httproute-controller")
}

// Create and register the NewTLSRouteController controller with the manager.
if _, err := controller.NewTLSRouteController(mgr, &dynamicHandler, log.WithField("context", "tlsroute-controller")); err != nil {
log.WithError(err).Fatal("failed to create tlsroute-controller")
}

// Inform on Namespaces.
if err := informOnResource(clients, k8s.NamespacesResource(), &dynamicHandler); err != nil {
log.WithError(err).WithField("resource", k8s.NamespacesResource()).Fatal("failed to create informer")
}

// Start Manager
g.AddContext(func(taskCtx context.Context) error {
return mgr.Start(signals.SetupSignalHandler())
})
} else {
log.Fatalf("GatewayAPI Gateway configured but APIs not installed in cluster.")
}
Expand Down Expand Up @@ -444,9 +481,6 @@ func doServe(log logrus.FieldLogger, ctx *serveContext) error {
}
}

// Set up workgroup runner and register informers.
var g workgroup.Group

// Register a task to start all the informers.
g.AddContext(func(taskCtx context.Context) error {
log := log.WithField("context", "informers")
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ require (
github.com/prometheus/client_golang v1.9.0
github.com/prometheus/client_model v0.2.0
github.com/prometheus/common v0.15.0
github.com/sirupsen/logrus v1.6.0
github.com/sirupsen/logrus v1.7.0
github.com/stretchr/testify v1.6.1
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a
google.golang.org/grpc v1.27.1
Expand All @@ -26,7 +26,7 @@ require (
k8s.io/client-go v0.21.0
k8s.io/klog/v2 v2.8.0
k8s.io/utils v0.0.0-20210305010621-2afb4311ab10
sigs.k8s.io/controller-runtime v0.8.3
sigs.k8s.io/controller-runtime v0.9.0-beta.1
sigs.k8s.io/controller-tools v0.5.0
sigs.k8s.io/gateway-api v0.3.0
sigs.k8s.io/kustomize/kyaml v0.1.1
Expand Down

0 comments on commit db368dc

Please sign in to comment.