Skip to content

Commit 6830dcb

Browse files
authored
Merge pull request #1674 from tomerlange/istio-gateway
Istio: add gateway-virtualservice link
2 parents c0dfd6e + 1069b41 commit 6830dcb

File tree

4 files changed

+75
-0
lines changed

4 files changed

+75
-0
lines changed

Diff for: tests/istio/gateway-virtualservice.yaml

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
apiVersion: networking.istio.io/v1alpha3
2+
kind: Gateway
3+
metadata:
4+
name: skydive-test-gateway-virtualservice
5+
spec:
6+
selector:
7+
istio: ingressgateway
8+
servers:
9+
- port:
10+
number: 80
11+
name: http
12+
protocol: HTTP
13+
hosts:
14+
- "*"
15+
---
16+
apiVersion: networking.istio.io/v1alpha3
17+
kind: VirtualService
18+
metadata:
19+
name: skydive-test-gateway-virtualservice
20+
spec:
21+
hosts:
22+
- reviews.prod.svc.cluster.local
23+
gateways:
24+
- skydive-test-gateway-virtualservice
25+
http:
26+
- route:
27+
- destination:
28+
host: reviews.prod.svc.cluster.local
29+
subset: v1

Diff for: tests/istio_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,32 @@ func TestIstioDestinationRuleServiceScenario(t *testing.T) {
104104
)
105105
}
106106

107+
func TestIstioGatewayVirtualServiceScenario(t *testing.T) {
108+
file := "gateway-virtualservice"
109+
name := objName + "-" + file
110+
testRunner(
111+
t,
112+
setupFromConfigFile(istio.Manager, file),
113+
tearDownFromConfigFile(istio.Manager, file),
114+
[]CheckFunction{
115+
func(c *CheckContext) error {
116+
gateway, err := checkNodeCreation(t, c, istio.Manager, "gateway", name)
117+
if err != nil {
118+
return err
119+
}
120+
virtualservice, err := checkNodeCreation(t, c, istio.Manager, "virtualservice", name)
121+
if err != nil {
122+
return err
123+
}
124+
if err = checkEdge(t, c, gateway, virtualservice, "gateway"); err != nil {
125+
return err
126+
}
127+
return nil
128+
},
129+
},
130+
)
131+
}
132+
107133
func TestBookInfoScenario(t *testing.T) {
108134
bookinfo := "WITH_ISTIO=true ./bookinfo/bookinfo.sh"
109135
testRunner(

Diff for: topology/probes/istio/gateway.go

+19
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
kiali "github.com/kiali/kiali/kubernetes"
2424
"github.com/skydive-project/skydive/graffiti/graph"
25+
"github.com/skydive-project/skydive/probe"
2526
"github.com/skydive-project/skydive/topology/probes/k8s"
2627
)
2728

@@ -44,3 +45,21 @@ func (h *gatewayHandler) Dump(obj interface{}) string {
4445
func newGatewayProbe(client interface{}, g *graph.Graph) k8s.Subprobe {
4546
return k8s.NewResourceCache(client.(*kiali.IstioClient).GetIstioNetworkingApi(), &kiali.Gateway{}, "gateways", g, &gatewayHandler{})
4647
}
48+
49+
func gatewayVirtualServiceAreLinked(a, b interface{}) bool {
50+
gateway := a.(*kiali.Gateway)
51+
vs := b.(*kiali.VirtualService)
52+
if gateways, ok := vs.Spec["gateways"]; ok {
53+
gatewaysList := gateways.([]interface{})
54+
for _, g := range gatewaysList {
55+
if g.(string) == gateway.Name {
56+
return true
57+
}
58+
}
59+
}
60+
return false
61+
}
62+
63+
func newGatewayVirtualServiceLinker(g *graph.Graph) probe.Probe {
64+
return k8s.NewABLinker(g, Manager, "gateway", Manager, "virtualservice", gatewayVirtualServiceAreLinked)
65+
}

Diff for: topology/probes/istio/istio.go

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func NewIstioProbe(g *graph.Graph) (*k8s.Probe, error) {
6161
linkerHandlers := []k8s.LinkHandler{
6262
newVirtualServicePodLinker,
6363
newDestinationRuleServiceLinker,
64+
newGatewayVirtualServiceLinker,
6465
}
6566

6667
linkers := k8s.InitLinkers(linkerHandlers, g)

0 commit comments

Comments
 (0)