kuma
99 строк · 3.1 Кб
1package k8s_api_bypass
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/envs/kubernetes"
13)
14
15func K8sApiBypass() {
16meshName := "k8s-api-bypass"
17namespace := "k8s-api-bypass"
18
19meshDefaultMtlsOn := `
20apiVersion: kuma.io/v1alpha1
21kind: Mesh
22metadata:
23name: k8s-api-bypass
24spec:
25mtls:
26enabledBackend: ca-1
27backends:
28- name: ca-1
29type: builtin
30networking:
31outbound:
32passthrough: %s
33`
34var clientPodName string
35
36BeforeAll(func() {
37err := NewClusterSetup().
38Install(YamlK8s(fmt.Sprintf(meshDefaultMtlsOn, "true"))).
39Install(MeshTrafficPermissionAllowAllKubernetes(meshName)).
40Install(NamespaceWithSidecarInjection(namespace)).
41Install(democlient.Install(democlient.WithNamespace(namespace), democlient.WithMesh(meshName))).
42Setup(kubernetes.Cluster)
43Expect(err).ToNot(HaveOccurred())
44
45clientPodName, err = PodNameOfApp(kubernetes.Cluster, "demo-client", namespace)
46Expect(err).ToNot(HaveOccurred())
47})
48
49E2EAfterAll(func() {
50Expect(kubernetes.Cluster.TriggerDeleteNamespace(namespace)).To(Succeed())
51Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())
52})
53
54It("should be able to communicate with API Server", func() {
55serviceAccount := "/var/run/secrets/kubernetes.io/serviceaccount"
56caCert := fmt.Sprintf("%s/ca.crt", serviceAccount)
57
58// read service account token
59var token string
60Eventually(func(g Gomega) {
61stdout, _, err := kubernetes.Cluster.Exec(
62namespace, clientPodName, "demo-client",
63"cat", fmt.Sprintf("%s/token", serviceAccount),
64)
65g.Expect(err).ToNot(HaveOccurred())
66token = stdout
67}).Should(Succeed())
68
69// given Mesh with passthrough enabled then communication with API Server works
70Eventually(func(g Gomega) {
71stdout, _, err := client.CollectResponse(
72kubernetes.Cluster, "demo-client", "https://kubernetes.default.svc/api",
73client.FromKubernetesPod(namespace, "demo-client"),
74client.WithCACert(caCert),
75client.WithHeader("Authorization", fmt.Sprintf("Bearer %s", token)),
76)
77g.Expect(err).ToNot(HaveOccurred())
78// we expect k8s resource 'meta/v1, Kind=APIVersions'
79g.Expect(stdout).To(ContainSubstring(`"kind": "APIVersions"`))
80}).Should(Succeed())
81
82// when passthrough is disabled on the Mesh
83err := kubernetes.Cluster.Install(YamlK8s(fmt.Sprintf(meshDefaultMtlsOn, "false")))
84Expect(err).ToNot(HaveOccurred())
85
86// then communication with API Server still works
87Eventually(func(g Gomega) {
88stdout, _, err := client.CollectResponse(
89kubernetes.Cluster, "demo-client", "https://kubernetes.default.svc/api",
90client.FromKubernetesPod(namespace, "demo-client"),
91client.WithCACert(caCert),
92client.WithHeader("Authorization", fmt.Sprintf("Bearer %s", token)),
93)
94g.Expect(err).ToNot(HaveOccurred())
95// we expect k8s resource 'meta/v1, Kind=APIVersions'
96g.Expect(stdout).To(ContainSubstring(`"kind": "APIVersions"`))
97}).Should(Succeed())
98})
99}
100