Skip to content

Commit 434bcbc

Browse files
committed
feat: setup gatewayclass support
Signed-off-by: STRRL <[email protected]>
1 parent 311f60a commit 434bcbc

File tree

10 files changed

+289
-77
lines changed

10 files changed

+289
-77
lines changed

cmd/cloudflare-tunnel-ingress-controller/main.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,22 @@ package main
22

33
import (
44
"context"
5+
"log"
6+
"os"
7+
"time"
8+
59
cloudflarecontroller "github.com/STRRL/cloudflare-tunnel-ingress-controller/pkg/cloudflare-controller"
610
"github.com/STRRL/cloudflare-tunnel-ingress-controller/pkg/controller"
711
"github.com/cloudflare/cloudflare-go"
812
"github.com/go-logr/logr"
913
"github.com/go-logr/stdr"
1014
"github.com/spf13/cobra"
11-
"log"
12-
"os"
15+
"k8s.io/apimachinery/pkg/runtime"
16+
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
1317
"sigs.k8s.io/controller-runtime/pkg/client/config"
1418
crlog "sigs.k8s.io/controller-runtime/pkg/log"
1519
"sigs.k8s.io/controller-runtime/pkg/manager"
16-
"time"
20+
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
1721
)
1822

1923
type rootCmdFlags struct {
@@ -72,7 +76,20 @@ func main() {
7276
os.Exit(1)
7377
}
7478

75-
mgr, err := manager.New(cfg, manager.Options{})
79+
scheme := runtime.NewScheme()
80+
err = clientgoscheme.AddToScheme(scheme)
81+
if err != nil {
82+
logger.Error(err, "unable to add scheme")
83+
os.Exit(1)
84+
}
85+
// append gateway-api scheme
86+
err = gatewayv1.AddToScheme(scheme)
87+
if err != nil {
88+
logger.Error(err, "unable to add gateway-api scheme")
89+
os.Exit(1)
90+
}
91+
92+
mgr, err := manager.New(cfg, manager.Options{Scheme: scheme})
7693
if err != nil {
7794
logger.Error(err, "unable to set up manager")
7895
os.Exit(1)
@@ -89,6 +106,11 @@ func main() {
89106
return err
90107
}
91108

109+
err = controller.RegisterGatewayClassController(logger, mgr)
110+
if err != nil {
111+
return err
112+
}
113+
92114
ticker := time.NewTicker(10 * time.Second)
93115
done := make(chan struct{})
94116
defer close(done)

hack/dev/deployment.yaml

Lines changed: 6 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -11,74 +11,6 @@ spec:
1111
selector:
1212
app: cloudflare-tunnel-ingress-controller
1313
---
14-
apiVersion: rbac.authorization.k8s.io/v1
15-
kind: ClusterRole
16-
metadata:
17-
name: cloudflare-tunnel-ingress-controller
18-
labels:
19-
app: cloudflare-tunnel-ingress-controller
20-
rules:
21-
- apiGroups:
22-
- ""
23-
resources:
24-
- services
25-
- endpoints
26-
- secrets
27-
verbs:
28-
- get
29-
- list
30-
- watch
31-
- apiGroups:
32-
- networking.k8s.io
33-
resources:
34-
- ingresses
35-
- ingressclasses
36-
verbs:
37-
- get
38-
- list
39-
- watch
40-
- update
41-
- apiGroups:
42-
- networking.k8s.io
43-
resources:
44-
- ingresses/status
45-
verbs:
46-
- update
47-
- apiGroups:
48-
- apps
49-
resources:
50-
- deployments
51-
verbs:
52-
- get
53-
- list
54-
- watch
55-
- update
56-
- create
57-
---
58-
apiVersion: v1
59-
kind: ServiceAccount
60-
metadata:
61-
name: cloudflare-tunnel-ingress-controller
62-
namespace: cloudflare-tunnel-ingress-controller-dev
63-
labels:
64-
app: cloudflare-tunnel-ingress-controller
65-
---
66-
apiVersion: rbac.authorization.k8s.io/v1
67-
kind: ClusterRoleBinding
68-
metadata:
69-
name: cloudflare-tunnel-ingress-controller
70-
labels:
71-
app: cloudflare-tunnel-ingress-controller
72-
roleRef:
73-
apiGroup: rbac.authorization.k8s.io
74-
kind: ClusterRole
75-
name: cloudflare-tunnel-ingress-controller
76-
subjects:
77-
- name: cloudflare-tunnel-ingress-controller
78-
kind: ServiceAccount
79-
# hardcoded namespace for dev
80-
namespace: cloudflare-tunnel-ingress-controller-dev
81-
---
8214
apiVersion: apps/v1
8315
kind: Deployment
8416
metadata:
@@ -132,4 +64,10 @@ spec:
13264
valueFrom:
13365
fieldRef:
13466
fieldPath: metadata.namespace
67+
- name: CLOUDFLARED_IMAGE
68+
value: "cloudflare/cloudflared:latest"
69+
- name: CLOUDFLARED_IMAGE_PULL_POLICY
70+
value: "IfNotPresent"
71+
- name: CLOUDFLARED_REPLICA_COUNT
72+
value: "1"
13573
serviceAccountName: cloudflare-tunnel-ingress-controller

hack/dev/gatewayclass.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: GatewayClass
3+
metadata:
4+
name: cloudflare-tunnel
5+
spec:
6+
controllerName: "strrl.dev/cloudflare-tunnel-gatewayclass-controller"

hack/dev/rbac.yaml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
---
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: ClusterRole
4+
metadata:
5+
name: cloudflare-tunnel-ingress-controller
6+
labels:
7+
app: cloudflare-tunnel-ingress-controller
8+
rules:
9+
- apiGroups:
10+
- ""
11+
resources:
12+
- services
13+
- endpoints
14+
- secrets
15+
verbs:
16+
- get
17+
- list
18+
- watch
19+
- apiGroups:
20+
- networking.k8s.io
21+
resources:
22+
- ingresses
23+
- ingressclasses
24+
verbs:
25+
- get
26+
- list
27+
- watch
28+
- update
29+
- apiGroups:
30+
- networking.k8s.io
31+
resources:
32+
- ingresses/status
33+
verbs:
34+
- update
35+
- apiGroups:
36+
- apps
37+
resources:
38+
- deployments
39+
verbs:
40+
- get
41+
- list
42+
- watch
43+
- update
44+
- create
45+
- apiGroups:
46+
- gateway.networking.k8s.io
47+
resources:
48+
- gatewayclasses
49+
- gatewayclasses/status
50+
verbs:
51+
- get
52+
- list
53+
- watch
54+
- update
55+
- patch
56+
---
57+
apiVersion: v1
58+
kind: ServiceAccount
59+
metadata:
60+
name: cloudflare-tunnel-ingress-controller
61+
namespace: cloudflare-tunnel-ingress-controller-dev
62+
labels:
63+
app: cloudflare-tunnel-ingress-controller
64+
---
65+
apiVersion: rbac.authorization.k8s.io/v1
66+
kind: ClusterRoleBinding
67+
metadata:
68+
name: cloudflare-tunnel-ingress-controller
69+
labels:
70+
app: cloudflare-tunnel-ingress-controller
71+
roleRef:
72+
apiGroup: rbac.authorization.k8s.io
73+
kind: ClusterRole
74+
name: cloudflare-tunnel-ingress-controller
75+
subjects:
76+
- name: cloudflare-tunnel-ingress-controller
77+
kind: ServiceAccount
78+
# hardcoded namespace for dev
79+
namespace: cloudflare-tunnel-ingress-controller-dev

helm/cloudflare-tunnel-ingress-controller/templates/clusterrole.yaml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,15 @@ rules:
3838
- list
3939
- watch
4040
- update
41-
- create
41+
- create
42+
- apiGroups:
43+
- gateway.networking.k8s.io
44+
resources:
45+
- gatewayclasses
46+
- gatewayclasses/status
47+
verbs:
48+
- get
49+
- list
50+
- watch
51+
- update
52+
- patch
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: GatewayClass
3+
metadata:
4+
name: cloudflare-tunnel
5+
spec:
6+
controllerName: "strrl.dev/cloudflare-tunnel-gatewayclass-controller"

pkg/controller/bootstrap.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
networkingv1 "k8s.io/api/networking/v1"
77
"sigs.k8s.io/controller-runtime/pkg/builder"
88
"sigs.k8s.io/controller-runtime/pkg/manager"
9+
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
910
)
1011

1112
type IngressControllerOptions struct {
@@ -26,8 +27,18 @@ func RegisterIngressController(logger logr.Logger, mgr manager.Manager, options
2627
return err
2728
}
2829

30+
return nil
31+
}
32+
33+
func RegisterGatewayClassController(logger logr.Logger, mgr manager.Manager) error {
34+
controller := NewGatewayClassController(logger.WithName("gatewayclass-controller"), mgr.GetClient())
35+
err := builder.
36+
ControllerManagedBy(mgr).
37+
For(&gatewayv1.GatewayClass{}).
38+
Complete(controller)
39+
2940
if err != nil {
30-
logger.WithName("register-controller").Error(err, "could not register ingress class controller")
41+
logger.WithName("register-controller").Error(err, "could not register gatewayclass controller")
3142
return err
3243
}
3344

0 commit comments

Comments
 (0)