Skip to content

Commit 819d722

Browse files
committed
Add Gateway/ListenerSet controller and DNS service scaffold
- Add GatewayReconciler for K8s Gateway API: handles create/update/delete of DNS records via DNSRecordService for Gateways and ListenerSets - Add ListenerSet event handler to trigger Gateway reconciliation - Wire GatewayReconciler and DNSRecordService initialization in cmd/main.go - Add DNSRecordService public API: CreateOrUpdateDNSRecords (stub; DNS zone validation and NSX record creation deferred to follow-up), DeleteDNSRecordsByOwner, DeleteAllDNSRecordsInGateway, DeleteOrphanedDNSRecordsInGateway, ListGatewayNamespacedName - Add DNSRecordStore with indexers for owner UID and gateway namespaced name - Add unit tests for controller flow and DNS service/store components - DNS zone configuration (ZoneConfig, permitted zones) is deferred to the follow-up change AI-Tool-Used: Cursor AI-Tool-Use-Level: Medium AI-Code-Category: Production
1 parent 8a866d7 commit 819d722

File tree

14 files changed

+2176
-16
lines changed

14 files changed

+2176
-16
lines changed

cmd/main.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ import (
2323
"sigs.k8s.io/controller-runtime/pkg/manager"
2424
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
2525
"sigs.k8s.io/controller-runtime/pkg/webhook"
26+
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
2627

2728
"github.com/vmware-tanzu/nsx-operator/pkg/apis/legacy/v1alpha1"
2829
crdv1alpha1 "github.com/vmware-tanzu/nsx-operator/pkg/apis/vpc/v1alpha1"
2930
"github.com/vmware-tanzu/nsx-operator/pkg/config"
31+
"github.com/vmware-tanzu/nsx-operator/pkg/controllers/gateway"
3032
"github.com/vmware-tanzu/nsx-operator/pkg/controllers/inventory"
3133
"github.com/vmware-tanzu/nsx-operator/pkg/controllers/ipaddressallocation"
3234
namespacecontroller "github.com/vmware-tanzu/nsx-operator/pkg/controllers/namespace"
@@ -42,6 +44,7 @@ import (
4244
subnetipreservationcontroller "github.com/vmware-tanzu/nsx-operator/pkg/controllers/subnetipreservation"
4345
"github.com/vmware-tanzu/nsx-operator/pkg/controllers/subnetport"
4446
"github.com/vmware-tanzu/nsx-operator/pkg/controllers/subnetset"
47+
"github.com/vmware-tanzu/nsx-operator/pkg/nsx/services/dns"
4548
"github.com/vmware-tanzu/nsx-operator/pkg/nsx/services/health"
4649
inventoryservice "github.com/vmware-tanzu/nsx-operator/pkg/nsx/services/inventory"
4750
"github.com/vmware-tanzu/nsx-operator/pkg/nsx/services/ipblocksinfo"
@@ -81,6 +84,7 @@ func init() {
8184
utilruntime.Must(crdv1alpha1.AddToScheme(scheme))
8285
utilruntime.Must(v1alpha1.AddToScheme(scheme))
8386
utilruntime.Must(vmv1alpha1.AddToScheme(scheme))
87+
utilruntime.Must(gatewayv1.Install(scheme))
8488
config.AddFlags()
8589

8690
cf, err = config.NewNSXOperatorConfigFromFile()
@@ -191,6 +195,11 @@ func startServiceController(mgr manager.Manager, nsxClient *nsx.Client) {
191195
log.Error(err, "Failed to initialize staticroute commonService", "controller", "StaticRoute")
192196
os.Exit(1)
193197
}
198+
dnsRecordService, err := dns.InitializeDNSRecordService(commonService, vpcService)
199+
if err != nil {
200+
log.Error(err, "Failed to initialize DNS record service", "controller", "DNS")
201+
os.Exit(1)
202+
}
194203
ipblocksInfoService := ipblocksinfo.InitializeIPBlocksInfoService(commonService, subnetService)
195204

196205
subnetBindingService, err := subnetbindingservice.InitializeService(commonService)
@@ -241,6 +250,7 @@ func startServiceController(mgr manager.Manager, nsxClient *nsx.Client) {
241250
pod.NewPodReconciler(mgr, subnetPortService, subnetService, vpcService, nodeService),
242251
networkpolicycontroller.NewNetworkPolicyReconciler(mgr, commonService, vpcService),
243252
service.NewServiceLbReconciler(mgr, commonService),
253+
gateway.NewGatewayReconciler(mgr, dnsRecordService),
244254
subnetbindingcontroller.NewReconciler(mgr, subnetService, subnetBindingService),
245255
subnetipreservationcontroller.NewReconciler(mgr, subnetIPReservationService, subnetService),
246256
)

pkg/controllers/common/types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const (
2424
MetricResTypePod = "pod"
2525
MetricResTypeNode = "node"
2626
MetricResTypeServiceLb = "servicelb"
27+
MetricResTypeGateway = "gateway"
2728
MaxConcurrentReconciles = 8
2829
NSXOperatorError = "nsx-op/error"
2930
//sync the error with NCP side
@@ -34,6 +35,8 @@ const (
3435

3536
LabelK8sMasterRole = "node-role.kubernetes.io/master"
3637
LabelK8sControlRole = "node-role.kubernetes.io/control-plane"
38+
39+
ManagedK8sGatewayClassIstio = "istio"
3740
)
3841

3942
var (

0 commit comments

Comments
 (0)