From 5c8a087a9c85080e75dd29f4c174b4b35c8e843a Mon Sep 17 00:00:00 2001 From: Jeff Date: Sun, 14 Apr 2019 20:27:38 +0800 Subject: [PATCH] add sidecar to router --- pkg/models/routers/routers.go | 50 ++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/pkg/models/routers/routers.go b/pkg/models/routers/routers.go index ed9ec982..49b89f6a 100644 --- a/pkg/models/routers/routers.go +++ b/pkg/models/routers/routers.go @@ -44,6 +44,11 @@ var RouterNodeIPLabelSelector = map[string]string{ "node-role.kubernetes.io/master": "", } +const ( + SERVICEMESH_ENABLED = "servicemesh.kubesphere.io/enabled" + SIDECAR_INJECT = "sidecar.istio.io/inject" +) + // get master node ip, if there are multiple master nodes, // choose first one according by their names alphabetically func getMasterNodeIp() string { @@ -168,6 +173,13 @@ func CreateRouter(namespace string, routerType corev1.ServiceType, annotations m yamls, err := LoadYamls() + injectSidecar := false + if enabled, ok := annotations[SERVICEMESH_ENABLED]; ok { + if enabled == "true" { + injectSidecar = true + } + } + if err != nil { glog.Error(err) } @@ -210,6 +222,13 @@ func CreateRouter(namespace string, routerType corev1.ServiceType, annotations m deployment.Spec.Selector.MatchLabels["project"] = namespace deployment.Spec.Template.Labels["project"] = namespace + if injectSidecar { + if deployment.Spec.Template.Annotations == nil { + deployment.Spec.Template.Annotations = make(map[string]string, 0) + } + deployment.Spec.Template.Annotations[SIDECAR_INJECT] = "true" + } + // Isolate namespace deployment.Spec.Template.Spec.Containers[0].Args = append(deployment.Spec.Template.Spec.Containers[0].Args, "--watch-namespace="+namespace) @@ -293,8 +312,6 @@ func DeleteRouter(namespace string) (*corev1.Service, error) { // Update Ingress Controller Service, change type from NodePort to Loadbalancer or vice versa. func UpdateRouter(namespace string, routerType corev1.ServiceType, annotations map[string]string) (*corev1.Service, error) { - k8sClient := k8s.Client() - var router *corev1.Service router, err := GetRouter(namespace) @@ -309,31 +326,16 @@ func UpdateRouter(namespace string, routerType corev1.ServiceType, annotations m return nil, fmt.Errorf("router not created yet") } - // from LoadBalancer to NodePort, or vice-versa - if router.Spec.Type != routerType { - router, err = DeleteRouter(namespace) + router, err = DeleteRouter(namespace) - if err != nil { - glog.Error(err) - } - - router, err = CreateRouter(namespace, routerType, annotations) - - if err != nil { - glog.Error(err) - } - - return router, err - - } else { - router.SetAnnotations(annotations) + if err != nil { + glog.Error(err) + } - router, err = k8sClient.CoreV1().Services(constants.IngressControllerNamespace).Update(router) + router, err = CreateRouter(namespace, routerType, annotations) - if err != nil { - glog.Error(err) - return router, err - } + if err != nil { + glog.Error(err) } addLoadBalancerIp(router) -- GitLab