Skip to content

Commit

Permalink
Gateway spins up Ngrok CRDs (#343)
Browse files Browse the repository at this point in the history
* add experimetnal gateway flag

* update store

* sperate experimental gateway deploy from normal deploy process

* split http edge for gateway

* update helm snapshot tests

* lint

* fix build issue

* remove comments

* use flag in driver seed/sync

* move util functions

* clean-up controller

* add DeleteNamedGateway function

* set domainNaim var

* block httproutes from seeding

* get domainmaps

* init httproute controller (#345)

* init httproute controller

* only start HTTPRouteReconciler if gateway flag is set

* setup reconciler struct

* update reconciler markers

* run httproute edge creation

* Gateway handles traffic

* remove debug log

* map HTTProute to HTTPSEdge

* implement HTTPRouteRules (#347)

* init httproute controller

* only start HTTPRouteReconciler if gateway flag is set

* setup reconciler struct

* update reconciler markers

* run httproute edge creation

* Gateway handles traffic

* remove debug log

* map HTTProute to HTTPSEdge

* add HTTPRouteMatch

* convert filters to traffic policy actions

* fix RequestRedirect filter

* fix request redirect filter

* fix domain issue

* switch request redirect to redirect action

* remove log

* emmit error if regex path match is created

* remove unsupported match types

* add AllowedRoutes check

* rename utils/ to controllers/

* update helm snapshots

* remove spaces

* check if listener has hostname field

* move functions with their structs

* don't finalize ingored gateway

* boolean logic fix

* remove unsed function param

* rename module set func to endpoint policy

* clean up some comments

* fix spelling/copy-paste errors

* fix more boolean errors

* Revert "remove unsed function param"

This reverts commit 02b6795.

* remove hostnames not in gateway domain map

* turn gateway domains to a map

* skip non HTTPS listeners

* pull out boolean inside of getDriver

* fix copy-paste error

* don't build edge if traffic unsupported filters are set

* handle error case for all filters

* merge edgemaps

* don't overwrite gateway domain map

* cleanup comments

* use loop instead of func

* throw more errors

* fix lint

* use guard statements

* rename to hasReference

* inline error check

* encapsulate double pointer to struct
  • Loading branch information
Abdiramen authored Mar 14, 2024
1 parent a4765d9 commit a79a900
Show file tree
Hide file tree
Showing 19 changed files with 1,437 additions and 223 deletions.
23 changes: 20 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ preflight: ## Verifies required things like the go version

.PHONY: manifests
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
$(CONTROLLER_GEN) rbac:roleName=ngrok-ingress-controller-manager-role crd webhook paths="{./api/ingress/v1alpha1/, ./internal/controller/ingress/, ./internal/controller/gateway}" \
$(CONTROLLER_GEN) rbac:roleName=ngrok-ingress-controller-manager-role crd webhook paths="{./api/ingress/v1alpha1/, ./internal/controller/ingress/, ./internal/controller/gateway/}" \
output:crd:artifacts:config=$(HELM_TEMPLATES_DIR)/crds \
output:rbac:artifacts:config=$(HELM_TEMPLATES_DIR)/rbac

.PHONY: generate
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="{./api/ingress/v1alpha1/, ./internal/controller/ingress/, ./internal/controller/gateway}"
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="{./api/ingress/v1alpha1/, ./internal/controller/ingress/, ./internal/controller/gateway/}"

.PHONY: fmt
fmt: ## Run go fmt against code.
Expand Down Expand Up @@ -127,7 +127,24 @@ deploy: _deploy-check-env-vars docker-build manifests kustomize _helm_setup ## D
--set log.format=console \
--set log.level=debug \
--set log.stacktraceLevel=panic \
--set metaData.env=local,metaData.from=makefile && \
--set metaData.env=local,metaData.from=makefile &&\
kubectl rollout restart deployment ngrok-ingress-controller-kubernetes-ingress-controller-manager -n ngrok-ingress-controller

.PHONY: deploy_gateway
deploy_gateway: _deploy-check-env-vars docker-build manifests kustomize _helm_setup ## Deploy controller to the K8s cluster specified in ~/.kube/config.
helm upgrade ngrok-ingress-controller $(HELM_CHART_DIR) --install \
--namespace ngrok-ingress-controller \
--create-namespace \
--set image.repository=$(IMG) \
--set image.tag="latest" \
--set podAnnotations."k8s\.ngrok\.com/test"="\{\"env\": \"local\"\}" \
--set credentials.apiKey=$(NGROK_API_KEY) \
--set credentials.authtoken=$(NGROK_AUTHTOKEN) \
--set log.format=console \
--set log.level=debug \
--set log.stacktraceLevel=panic \
--set metaData.env=local,metaData.from=makefile \
--set useExperimentalGatewayApi=true &&\
kubectl rollout restart deployment ngrok-ingress-controller-kubernetes-ingress-controller-manager -n ngrok-ingress-controller

.PHONY: _deploy-check-env-vars
Expand Down
5 changes: 5 additions & 0 deletions PROJECT

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 29 additions & 8 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
"sigs.k8s.io/controller-runtime/pkg/webhook"
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"

"github.com/ngrok/ngrok-api-go/v5"

Expand All @@ -63,9 +64,9 @@ var (

func init() {
utilruntime.Must(clientgoscheme.AddToScheme(scheme))

//+kubebuilder:scaffold:scheme
utilruntime.Must(gatewayv1.AddToScheme(scheme))
utilruntime.Must(ingressv1alpha1.AddToScheme(scheme))
//+kubebuilder:scaffold:scheme
}

func main() {
Expand Down Expand Up @@ -277,12 +278,26 @@ func runController(ctx context.Context, opts managerOpts) error {
}
if opts.useExperimentalGatewayAPI {
if err = (&gatewaycontroller.GatewayReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("Gateway"),
Scheme: mgr.GetScheme(),
Recorder: mgr.GetEventRecorderFor("gateway-controller"),
Driver: driver,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "Gateway")
os.Exit(1)
}

if err = (&gatewaycontroller.HTTPRouteReconciler{
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("Gateway"),
Scheme: mgr.GetScheme(),
Recorder: mgr.GetEventRecorderFor("gateway-controller"),
Driver: driver,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "HTTPRoute")
os.Exit(1)
}
}
//+kubebuilder:scaffold:builder

Expand All @@ -304,10 +319,16 @@ func runController(ctx context.Context, opts managerOpts) error {
// getDriver returns a new Driver instance that is seeded with the current state of the cluster.
func getDriver(ctx context.Context, mgr manager.Manager, options managerOpts) (*store.Driver, error) {
logger := mgr.GetLogger().WithName("cache-store-driver")
d := store.NewDriver(logger, mgr.GetScheme(), options.controllerName, types.NamespacedName{
Namespace: options.namespace,
Name: options.managerName,
})
d := store.NewDriver(
logger,
mgr.GetScheme(),
options.controllerName,
types.NamespacedName{
Namespace: options.namespace,
Name: options.managerName,
},
options.useExperimentalGatewayAPI,
)
if options.metaData != "" {
metaData := strings.TrimSuffix(options.metaData, ",")
// metadata is a comma separated list of key=value pairs.
Expand Down
3 changes: 3 additions & 0 deletions helm/ingress-controller/templates/controller-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ spec:
{{- if .Values.watchNamespace }}
- --watch-namespace={{ .Values.watchNamespace}}
{{- end }}
{{- if .Values.useExperimentalGatewayApi }}
- --use-experimental-gateway-api={{ .Values.useExperimentalGatewayApi }}
{{- end }}
- --zap-log-level={{ .Values.log.level }}
- --zap-stacktrace-level={{ .Values.log.stacktraceLevel }}
- --zap-encoder={{ .Values.log.format }}
Expand Down
91 changes: 63 additions & 28 deletions helm/ingress-controller/templates/rbac/role.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit a79a900

Please sign in to comment.