kuma
193 строки · 4.6 Кб
1package kic
2
3import (
4"fmt"
5
6. "github.com/onsi/ginkgo/v2"
7. "github.com/onsi/gomega"
8
9. "github.com/kumahq/kuma/test/framework"
10"github.com/kumahq/kuma/test/framework/client"
11"github.com/kumahq/kuma/test/framework/deployments/democlient"
12"github.com/kumahq/kuma/test/framework/deployments/kic"
13"github.com/kumahq/kuma/test/framework/deployments/testserver"
14"github.com/kumahq/kuma/test/framework/envs/kubernetes"
15)
16
17func KICKubernetes() {
18// IPv6 currently not supported by Kong Ingress Controller
19// https://github.com/Kong/kubernetes-ingress-controller/issues/1017
20if Config.IPV6 {
21fmt.Println("Test not supported on IPv6")
22return
23}
24if Config.K8sType == KindK8sType {
25// KIC 2.0 when started with service type LoadBalancer requires external IP to be provisioned before it's healthy.
26// KIND cannot provision external IP, K3D can.
27fmt.Println("Test not supported on KIND")
28return
29}
30
31namespace := "kic"
32mesh := "kic"
33namespaceOutsideMesh := "kic-external"
34
35var kicIP string
36
37BeforeAll(func() {
38Expect(NewClusterSetup().
39Install(MTLSMeshKubernetes(mesh)).
40Install(MeshTrafficPermissionAllowAllKubernetes(mesh)).
41Install(NamespaceWithSidecarInjection(namespace)).
42Install(Namespace(namespaceOutsideMesh)).
43Install(democlient.Install(democlient.WithNamespace(namespaceOutsideMesh))). // this will not be in the mesh
44Install(kic.KongIngressController(
45kic.WithNamespace(namespace),
46kic.WithName("kic"),
47kic.WithMesh(mesh),
48)).
49Install(kic.KongIngressService(
50kic.WithNamespace(namespace),
51kic.WithName("kic"),
52)).
53Install(testserver.Install(
54testserver.WithNamespace(namespace),
55testserver.WithMesh(mesh),
56testserver.WithName("test-server"),
57)).
58Setup(kubernetes.Cluster)).To(Succeed())
59
60ip, err := kic.From(kubernetes.Cluster).IP(namespace)
61Expect(err).To(Succeed())
62
63kicIP = ip
64})
65
66E2EAfterAll(func() {
67Expect(kubernetes.Cluster.TriggerDeleteNamespace(namespace)).To(Succeed())
68Expect(kubernetes.Cluster.TriggerDeleteNamespace(namespaceOutsideMesh)).To(Succeed())
69Expect(kubernetes.Cluster.DeleteMesh(mesh)).To(Succeed())
70})
71
72It("should route to service using Kube DNS", func() {
73ingress := `
74---
75apiVersion: gateway.networking.k8s.io/v1
76kind: GatewayClass
77metadata:
78name: kic
79annotations:
80konghq.com/gatewayclass-unmanaged: 'true'
81spec:
82controllerName: konghq.com/kic-gateway-controller
83---
84apiVersion: gateway.networking.k8s.io/v1
85kind: Gateway
86metadata:
87name: kong
88namespace: kic
89spec:
90gatewayClassName: kic
91listeners:
92- name: proxy
93port: 80
94protocol: HTTP
95---
96apiVersion: gateway.networking.k8s.io/v1
97kind: HTTPRoute
98metadata:
99name: echo
100namespace: kic
101annotations:
102konghq.com/strip-path: 'true'
103spec:
104parentRefs:
105- name: kong
106namespace: kic
107rules:
108- matches:
109- path:
110type: PathPrefix
111value: /test-server
112backendRefs:
113- name: test-server
114kind: Service
115port: 80
116`
117Expect(kubernetes.Cluster.Install(YamlK8s(ingress))).To(Succeed())
118
119Eventually(func(g Gomega) {
120_, err := client.CollectEchoResponse(
121kubernetes.Cluster, "demo-client", fmt.Sprintf("http://%s/test-server", kicIP),
122client.FromKubernetesPod(namespaceOutsideMesh, "demo-client"),
123)
124g.Expect(err).ToNot(HaveOccurred())
125}, "30s", "1s").Should(Succeed())
126})
127
128It("should route to service using Kuma DNS", func() {
129const ingressMeshDNS = `
130---
131apiVersion: gateway.networking.k8s.io/v1
132kind: HTTPRoute
133metadata:
134name: echo
135namespace: kic
136annotations:
137konghq.com/strip-path: 'true'
138spec:
139parentRefs:
140- name: kong
141namespace: kic
142rules:
143- matches:
144- path:
145type: PathPrefix
146value: /test-server
147backendRefs:
148- name: test-server
149kind: Service
150port: 80
151---
152apiVersion: v1
153kind: Service
154metadata:
155name: test-server-externalname
156namespace: kic
157spec:
158type: ExternalName
159externalName: test-server.kic.svc.80.mesh
160---
161apiVersion: gateway.networking.k8s.io/v1
162kind: HTTPRoute
163metadata:
164name: k8s-ingress-dot-mesh
165namespace: kic
166annotations:
167konghq.com/strip-path: 'true'
168spec:
169parentRefs:
170- name: kong
171namespace: kic
172rules:
173- matches:
174- path:
175type: PathPrefix
176value: /dot-mesh
177backendRefs:
178- name: test-server-externalname
179kind: Service
180port: 80
181`
182
183Expect(kubernetes.Cluster.Install(YamlK8s(ingressMeshDNS))).To(Succeed())
184
185Eventually(func(g Gomega) {
186_, err := client.CollectEchoResponse(
187kubernetes.Cluster, "demo-client", fmt.Sprintf("http://%s/dot-mesh", kicIP),
188client.FromKubernetesPod(namespaceOutsideMesh, "demo-client"),
189)
190g.Expect(err).ToNot(HaveOccurred())
191}, "30s", "1s").Should(Succeed())
192})
193}
194