@@ -42,6 +42,7 @@ import (
4242// KubeFlannelNetworkConfig
4343const (
4444 FlannelCNI = "flannel"
45+ GlobalRouterCNI = "globalrouter"
4546 KubeFlannelConfigMap = "kube-flannel-cfg"
4647 KubeFlannelNetworkConf = "net-conf.json"
4748 KubeFlannelIPPool = "Network"
@@ -122,16 +123,23 @@ func (c *Controller) Start(ctx context.Context) error {
122123 factory := informers .NewSharedInformerFactory (c .kubeClient , 0 )
123124 informer := factory .Core ().V1 ().Pods ().Informer ()
124125 c .podLister = factory .Core ().V1 ().Pods ().Lister ()
125- podFilterFunc := func (pod * corev1.Pod ) bool {
126- //TODO 确认这个写法是否正确
127- return pod .Labels ["component" ] == "kube-apiserver"
128- }
129126
130127 cluster , err := c .clusterLinkClient .KosmosV1alpha1 ().Clusters ().Get (ctx , c .clusterName , metav1.GetOptions {})
131128 if err != nil {
132129 klog .Errorf ("can not find local cluster %s, err: %v" , c .clusterName , err )
133130 return err
134131 }
132+ var podFilterFunc func (pod * corev1.Pod ) bool
133+ if cluster .Spec .ClusterLinkOptions .UseExternalApiserver {
134+ podFilterFunc = func (pod * corev1.Pod ) bool {
135+ return pod .Labels ["k8s-app" ] == "kube-proxy" || pod .Labels ["app" ] == "clusterlink-controller-manager"
136+ }
137+ } else {
138+ podFilterFunc = func (pod * corev1.Pod ) bool {
139+ //TODO 确认这个写法是否正确
140+ return pod .Labels ["component" ] == "kube-apiserver"
141+ }
142+ }
135143 _ , err = informer .AddEventHandler (cache.FilteringResourceEventHandler {
136144 FilterFunc : func (obj interface {}) bool {
137145 pod := obj .(* corev1.Pod )
@@ -157,6 +165,15 @@ func (c *Controller) Start(ctx context.Context) error {
157165 klog .Errorf ("cluster %s initCalicoInformer err: %v" , err )
158166 return err
159167 }
168+ } else if cluster .Spec .ClusterLinkOptions .CNI == GlobalRouterCNI {
169+ c .setClusterPodCIDRFun = func (cluster * clusterlinkv1alpha1.Cluster ) error {
170+ if len (cluster .Spec .ClusterLinkOptions .ClusterPodCIDRs ) == 0 {
171+ klog .Errorf ("Please define ClusterPodCIDRs for cni %s" , GlobalRouterCNI )
172+ return fmt .Errorf ("clusterpodcidrs is not defined for cni %s" , GlobalRouterCNI )
173+ }
174+ cluster .Status .ClusterLinkStatus .PodCIDRs = cluster .Spec .ClusterLinkOptions .ClusterPodCIDRs
175+ return nil
176+ }
160177 } else {
161178 isEtcd := CheckIsEtcd (cluster )
162179 if ! isEtcd {
@@ -188,6 +205,7 @@ func (c *Controller) Reconcile(key utils.QueueKey) error {
188205 klog .Error ("invalid key" )
189206 return fmt .Errorf ("invalid key" )
190207 }
208+ klog .Info ("cluster controller start reconcile" )
191209 namespacedName := types.NamespacedName {
192210 Name : clusterWideKey .Name ,
193211 Namespace : clusterWideKey .Namespace ,
0 commit comments