add node ip to router
This commit is contained in:
@@ -20,13 +20,14 @@ package routers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/golang/glog"
|
||||
"io/ioutil"
|
||||
"kubesphere.io/kubesphere/pkg/simple/client/k8s"
|
||||
"sort"
|
||||
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"kubesphere.io/kubesphere/pkg/informers"
|
||||
|
||||
"github.com/golang/glog"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
|
||||
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -40,12 +41,68 @@ import (
|
||||
"kubesphere.io/kubesphere/pkg/models/iam"
|
||||
)
|
||||
|
||||
// choose router node ip by labels, currently select master node
|
||||
var RouterNodeIPLabelSelector = map[string]string{
|
||||
"node-role.kubernetes.io/master": "",
|
||||
}
|
||||
|
||||
// get master node ip, if there are multiple master nodes,
|
||||
// choose first one according by their names alphabetically
|
||||
func getMasterNodeIp() string {
|
||||
|
||||
nodeLister := informers.SharedInformerFactory().Core().V1().Nodes().Lister()
|
||||
selector := labels.SelectorFromSet(RouterNodeIPLabelSelector)
|
||||
|
||||
masters, err := nodeLister.List(selector)
|
||||
sort.Slice(masters, func(i, j int) bool {
|
||||
return strings.Compare(masters[i].Name, masters[j].Name) > 0
|
||||
})
|
||||
if err != nil {
|
||||
glog.Error(err)
|
||||
return ""
|
||||
}
|
||||
|
||||
if len(masters) == 0 {
|
||||
return ""
|
||||
} else {
|
||||
for _, address := range masters[0].Status.Addresses {
|
||||
if address.Type == corev1.NodeInternalIP {
|
||||
return address.Address
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
func addLoadBalancerIp(service *corev1.Service) {
|
||||
|
||||
// append selected node ip as loadbalancer ingress ip
|
||||
if len(service.Status.LoadBalancer.Ingress) == 0 {
|
||||
rip := getMasterNodeIp()
|
||||
if len(rip) == 0 {
|
||||
glog.Info("can not get node ip")
|
||||
return
|
||||
}
|
||||
|
||||
gIngress := corev1.LoadBalancerIngress{
|
||||
IP: rip,
|
||||
}
|
||||
|
||||
service.Status.LoadBalancer.Ingress = append(service.Status.LoadBalancer.Ingress, gIngress)
|
||||
}
|
||||
}
|
||||
|
||||
func GetAllRouters() ([]*corev1.Service, error) {
|
||||
|
||||
selector := labels.SelectorFromSet(labels.Set{"app": "kubesphere", "component": "ks-router", "tier": "backend"})
|
||||
serviceLister := informers.SharedInformerFactory().Core().V1().Services().Lister()
|
||||
services, err := serviceLister.Services(constants.IngressControllerNamespace).List(selector)
|
||||
|
||||
for i := range services {
|
||||
addLoadBalancerIp(services[i])
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
glog.Error(err)
|
||||
return nil, err
|
||||
@@ -79,6 +136,7 @@ func GetAllRoutersOfUser(username string) ([]*corev1.Service, error) {
|
||||
glog.Error(err)
|
||||
return routers, err
|
||||
} else if router != nil {
|
||||
addLoadBalancerIp(router)
|
||||
routers = append(routers, router)
|
||||
}
|
||||
}
|
||||
@@ -99,9 +157,10 @@ func GetRouter(namespace string) (*corev1.Service, error) {
|
||||
glog.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
for _, s := range services {
|
||||
if s.Name == serviceName {
|
||||
return s, nil
|
||||
for i := range services {
|
||||
if services[i].Name == serviceName {
|
||||
addLoadBalancerIp(services[i])
|
||||
return services[i], nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,6 +267,7 @@ func CreateRouter(namespace string, routerType corev1.ServiceType, annotations m
|
||||
}
|
||||
}
|
||||
|
||||
addLoadBalancerIp(router)
|
||||
return router, nil
|
||||
}
|
||||
|
||||
@@ -312,5 +372,6 @@ func UpdateRouter(namespace string, routerType corev1.ServiceType, annotations m
|
||||
}
|
||||
}
|
||||
|
||||
addLoadBalancerIp(router)
|
||||
return router, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user