add sidecar to router

This commit is contained in:
Jeff
2019-04-14 20:27:38 +08:00
committed by zryfish
parent 8e862cafb2
commit 5c8a087a9c

View File

@@ -44,6 +44,11 @@ var RouterNodeIPLabelSelector = map[string]string{
"node-role.kubernetes.io/master": "", "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, // get master node ip, if there are multiple master nodes,
// choose first one according by their names alphabetically // choose first one according by their names alphabetically
func getMasterNodeIp() string { func getMasterNodeIp() string {
@@ -168,6 +173,13 @@ func CreateRouter(namespace string, routerType corev1.ServiceType, annotations m
yamls, err := LoadYamls() yamls, err := LoadYamls()
injectSidecar := false
if enabled, ok := annotations[SERVICEMESH_ENABLED]; ok {
if enabled == "true" {
injectSidecar = true
}
}
if err != nil { if err != nil {
glog.Error(err) glog.Error(err)
} }
@@ -210,6 +222,13 @@ func CreateRouter(namespace string, routerType corev1.ServiceType, annotations m
deployment.Spec.Selector.MatchLabels["project"] = namespace deployment.Spec.Selector.MatchLabels["project"] = namespace
deployment.Spec.Template.Labels["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 // Isolate namespace
deployment.Spec.Template.Spec.Containers[0].Args = append(deployment.Spec.Template.Spec.Containers[0].Args, "--watch-namespace="+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. // 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) { func UpdateRouter(namespace string, routerType corev1.ServiceType, annotations map[string]string) (*corev1.Service, error) {
k8sClient := k8s.Client()
var router *corev1.Service var router *corev1.Service
router, err := GetRouter(namespace) 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") return nil, fmt.Errorf("router not created yet")
} }
// from LoadBalancer to NodePort, or vice-versa router, err = DeleteRouter(namespace)
if router.Spec.Type != routerType {
router, err = DeleteRouter(namespace)
if err != nil { if err != nil {
glog.Error(err) glog.Error(err)
} }
router, err = CreateRouter(namespace, routerType, annotations) router, err = CreateRouter(namespace, routerType, annotations)
if err != nil { if err != nil {
glog.Error(err) glog.Error(err)
}
return router, err
} else {
router.SetAnnotations(annotations)
router, err = k8sClient.CoreV1().Services(constants.IngressControllerNamespace).Update(router)
if err != nil {
glog.Error(err)
return router, err
}
} }
addLoadBalancerIp(router) addLoadBalancerIp(router)