提交 e8c1d6fb 编写于 作者: J Jeff 提交者: zryfish

add node ip to router

上级 9a9664f0
......@@ -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
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册