Skip to content

Commit

Permalink
add new source for istio virtual services
Browse files Browse the repository at this point in the history
add new source for istio virtual services
  • Loading branch information
tariq1890 committed May 28, 2020
1 parent deaeca2 commit cfa76c1
Show file tree
Hide file tree
Showing 5 changed files with 2,032 additions and 10 deletions.
29 changes: 19 additions & 10 deletions source/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,23 +220,23 @@ func (sc *gatewaySource) setResourceLabel(gateway networkingv1alpha3.Gateway, en
}
}

func (sc *gatewaySource) targetsFromGatewayConfig(gateway networkingv1alpha3.Gateway) (targets endpoint.Targets, err error) {
labelSelector, err := metav1.ParseToLabelSelector(labels.Set(gateway.Spec.Selector).String())
if err != nil {
return nil, err
}
selector, err := metav1.LabelSelectorAsSelector(labelSelector)
if err != nil {
return nil, err
func (sc *gatewaySource) targetsFromGateway(gateway networkingv1alpha3.Gateway) (targets endpoint.Targets, err error) {
targets = getTargetsFromTargetAnnotation(gateway.Annotations)
if len(targets) > 0 {
return
}

services, err := sc.serviceInformer.Lister().Services(sc.namespace).List(selector)
services, err := sc.serviceInformer.Lister().Services(sc.namespace).List(labels.Everything())
if err != nil {
log.Error(err)
return
}

for _, service := range services {
if !gatewaySelectorMatchesServiceSelector(gateway.Spec.Selector, service.Spec.Selector) {
continue
}

for _, lb := range service.Status.LoadBalancer.Ingress {
if lb.IP != "" {
targets = append(targets, lb.IP)
Expand All @@ -262,7 +262,7 @@ func (sc *gatewaySource) endpointsFromGateway(hostnames []string, gateway networ
targets := getTargetsFromTargetAnnotation(annotations)

if len(targets) == 0 {
targets, err = sc.targetsFromGatewayConfig(gateway)
targets, err = sc.targetsFromGateway(gateway)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -316,3 +316,12 @@ func (sc *gatewaySource) hostNamesFromTemplate(gateway networkingv1alpha3.Gatewa
hostnames := strings.Split(strings.Replace(buf.String(), " ", "", -1), ",")
return hostnames, nil
}

func gatewaySelectorMatchesServiceSelector(gwSelector, svcSelector map[string]string) bool {
for k, v := range gwSelector {
if lbl, ok := svcSelector[k]; !ok || lbl != v {
return false
}
}
return true
}
4 changes: 4 additions & 0 deletions source/gateway_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1151,6 +1151,7 @@ type fakeIngressGatewayService struct {
hostnames []string
namespace string
name string
selector map[string]string
}

func (ig fakeIngressGatewayService) Service() *v1.Service {
Expand All @@ -1164,6 +1165,9 @@ func (ig fakeIngressGatewayService) Service() *v1.Service {
Ingress: []v1.LoadBalancerIngress{},
},
},
Spec: v1.ServiceSpec{
Selector: ig.selector,
},
}

for _, ip := range ig.ips {
Expand Down
10 changes: 10 additions & 0 deletions source/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,16 @@ func BuildWithConfig(source string, p ClientGenerator, cfg *Config) (Source, err
return nil, err
}
return NewIstioGatewaySource(kubernetesClient, istioClient, cfg.Namespace, cfg.AnnotationFilter, cfg.FQDNTemplate, cfg.CombineFQDNAndAnnotation, cfg.IgnoreHostnameAnnotation)
case "istio-virtualservice":
kubernetesClient, err := p.KubeClient()
if err != nil {
return nil, err
}
istioClient, err := p.IstioClient()
if err != nil {
return nil, err
}
return NewIstioVirtualServiceSource(kubernetesClient, istioClient, cfg.Namespace, cfg.AnnotationFilter, cfg.FQDNTemplate, cfg.CombineFQDNAndAnnotation, cfg.IgnoreHostnameAnnotation)
case "cloudfoundry":
cfClient, err := p.CloudFoundryClient(cfg.CFAPIEndpoint, cfg.CFUsername, cfg.CFPassword)
if err != nil {
Expand Down
Loading

0 comments on commit cfa76c1

Please sign in to comment.