github.com/cilium/cilium@v1.16.2/pkg/clustermesh/endpointslicesync/endpointslicesync.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package endpointslicesync 5 6 import ( 7 "context" 8 "fmt" 9 10 "github.com/cilium/hive/cell" 11 "github.com/cilium/hive/job" 12 cache "k8s.io/client-go/tools/cache" 13 ) 14 15 func registerEndpointSliceSync(_ cell.Lifecycle, params endpointSliceSyncParams) { 16 if !params.Clientset.IsEnabled() || params.ClusterMesh == nil || !params.ClusterMeshEnableEndpointSync { 17 return 18 } 19 20 params.Logger.Info("Endpoint Slice Cluster Mesh synchronization enabled") 21 22 meshPodInformer := newMeshPodInformer(params.Logger, params.ClusterMesh.GlobalServices()) 23 params.ClusterMesh.RegisterClusterServiceUpdateHook(meshPodInformer.onClusterServiceUpdate) 24 params.ClusterMesh.RegisterClusterServiceDeleteHook(meshPodInformer.onClusterServiceDelete) 25 meshNodeInformer := newMeshNodeInformer(params.Logger) 26 params.ClusterMesh.RegisterClusterAddHook(meshNodeInformer.onClusterAdd) 27 params.ClusterMesh.RegisterClusterDeleteHook(meshNodeInformer.onClusterDelete) 28 params.JobGroup.Add(job.OneShot("endpointslicesync-main", func(ctx context.Context, health cell.Health) error { 29 params.Logger.Info("Bootstrap clustermesh EndpointSlice controller") 30 31 endpointSliceMeshController, meshServiceInformer, endpointSliceInformerFactory := newEndpointSliceMeshController( 32 ctx, params.Logger, params.EndpointSliceSyncConfig, meshPodInformer, 33 meshNodeInformer, params.Clientset, 34 params.Services, params.ClusterMesh.GlobalServices(), 35 ) 36 37 endpointSliceInformerFactory.Start(ctx.Done()) 38 if err := meshServiceInformer.Start(ctx); err != nil { 39 return err 40 } 41 endpointSliceInformerFactory.WaitForCacheSync(ctx.Done()) 42 43 if !cache.WaitForCacheSync(ctx.Done(), meshServiceInformer.HasSynced) { 44 return fmt.Errorf("waitForCacheSync on service informer not successful") 45 } 46 47 if err := params.ClusterMesh.ServicesSynced(ctx); err != nil { 48 return nil // The parent context expired, and we are already terminating 49 } 50 endpointSliceMeshController.Run(ctx, params.ClusterMeshConcurrentEndpointSync) 51 return nil 52 })) 53 }