diff --git a/cmd/controller-manager/app/controllers.go b/cmd/controller-manager/app/controllers.go index d23f76e64461810566930f2b0d23e3498199a903..0bd907f0be845cf0ffcf2215aae5a4aaf4726cb2 100644 --- a/cmd/controller-manager/app/controllers.go +++ b/cmd/controller-manager/app/controllers.go @@ -88,7 +88,8 @@ func AddControllers(mgr manager.Manager, cfg *rest.Config, stopCh <-chan struct{ informerFactory.Core().V1().Services(), servicemeshInformer.Servicemesh().V1alpha2().ServicePolicies(), kubeClient, - istioclient) + istioclient, + servicemeshclient) apController := application.NewApplicationController(informerFactory.Core().V1().Services(), informerFactory.Apps().V1().Deployments(), diff --git a/pkg/controller/application/application_controller.go b/pkg/controller/application/application_controller.go index bebd16e5e41be1e09c08d6c67e928aef8ce65463..208f28d85d1811451ba6bae0380b93d6622babca 100644 --- a/pkg/controller/application/application_controller.go +++ b/pkg/controller/application/application_controller.go @@ -149,7 +149,7 @@ func NewApplicationController(serviceInformer coreinformers.ServiceInformer, } func (v *ApplicationController) Start(stopCh <-chan struct{}) error { - v.Run(5, stopCh) + v.Run(2, stopCh) return nil } diff --git a/pkg/controller/destinationrule/destinationrule_controller.go b/pkg/controller/destinationrule/destinationrule_controller.go index 688ec08c5641edf07a0182be07e3e7ff6e0d7207..f83be2b94d5da899a2fbf3174287db88c2f12747 100644 --- a/pkg/controller/destinationrule/destinationrule_controller.go +++ b/pkg/controller/destinationrule/destinationrule_controller.go @@ -34,6 +34,7 @@ import ( "k8s.io/client-go/util/workqueue" "time" + servicemeshclient "kubesphere.io/kubesphere/pkg/client/clientset/versioned" servicemeshinformers "kubesphere.io/kubesphere/pkg/client/informers/externalversions/servicemesh/v1alpha2" servicemeshlisters "kubesphere.io/kubesphere/pkg/client/listers/servicemesh/v1alpha2" ) @@ -53,6 +54,7 @@ type DestinationRuleController struct { client clientset.Interface destinationRuleClient istioclientset.Interface + servicemeshClient servicemeshclient.Interface eventBroadcaster record.EventBroadcaster eventRecorder record.EventRecorder @@ -79,7 +81,8 @@ func NewDestinationRuleController(deploymentInformer informersv1.DeploymentInfor serviceInformer coreinformers.ServiceInformer, servicePolicyInformer servicemeshinformers.ServicePolicyInformer, client clientset.Interface, - destinationRuleClient istioclientset.Interface) *DestinationRuleController { + destinationRuleClient istioclientset.Interface, + servicemeshClient servicemeshclient.Interface) *DestinationRuleController { broadcaster := record.NewBroadcaster() broadcaster.StartLogging(func(format string, args ...interface{}) { @@ -95,6 +98,7 @@ func NewDestinationRuleController(deploymentInformer informersv1.DeploymentInfor v := &DestinationRuleController{ client: client, destinationRuleClient: destinationRuleClient, + servicemeshClient: servicemeshClient, queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "destinationrule"), workerLoopPeriod: time.Second, } @@ -211,12 +215,20 @@ func (v *DestinationRuleController) syncService(key string) error { service, err := v.serviceLister.Services(namespace).Get(name) if err != nil { - // Delete the corresponding destinationrule if there is any, as the service has been deleted. + // delete the corresponding destinationrule if there is any, as the service has been deleted. err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Delete(name, nil) if err != nil && !errors.IsNotFound(err) { log.Error(err, "delete destination rule failed", "namespace", namespace, "name", name) return err } + + // delete orphan service policy if there is any + err = v.servicemeshClient.ServicemeshV1alpha2().ServicePolicies(namespace).Delete(name, nil) + if err != nil && !errors.IsNotFound(err) { + log.Error(err, "delete orphan service policy failed", "namespace", namespace, "name", name) + return err + } + return nil } @@ -332,9 +344,9 @@ func (v *DestinationRuleController) syncService(key string) error { } if createDestinationRule { - newDestinationRule, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Create(newDestinationRule) + _, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Create(newDestinationRule) } else { - newDestinationRule, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Update(newDestinationRule) + _, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Update(newDestinationRule) } if err != nil { diff --git a/pkg/controller/virtualservice/virtualservice_controller.go b/pkg/controller/virtualservice/virtualservice_controller.go index 42e2cbb5b7d38ddf0974790c885ab5e745262b7d..ba81de932584f930b3ad2251c0707b769fcf7f68 100644 --- a/pkg/controller/virtualservice/virtualservice_controller.go +++ b/pkg/controller/virtualservice/virtualservice_controller.go @@ -231,6 +231,14 @@ func (v *VirtualServiceController) syncService(key string) error { log.Error(err, "delete orphan virtualservice failed", "namespace", namespace, "name", service.Name) return err } + + // delete the orphan strategy if there is any + err = v.servicemeshClient.ServicemeshV1alpha2().Strategies(namespace).Delete(name, nil) + if err != nil && !errors.IsNotFound(err) { + log.Error(err, "delete orphan strategy failed", "namespace", namespace, "name", service.Name) + return err + } + return nil } log.Error(err, "get service failed", "namespace", namespace, "name", name) @@ -385,9 +393,9 @@ func (v *VirtualServiceController) syncService(key string) error { } if createVirtualService { - newVirtualService, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Create(newVirtualService) + _, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Create(newVirtualService) } else { - newVirtualService, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Update(newVirtualService) + _, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Update(newVirtualService) } if err != nil {