Skip to content

Commit 227c312

Browse files
committed
add network policy towards gitserver in gitops tests
1 parent 98732d9 commit 227c312

File tree

4 files changed

+108
-19
lines changed

4 files changed

+108
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package app
2+
3+
import (
4+
"context"
5+
6+
"github.com/kyma-project/serverless/tests/serverless/internal/utils"
7+
"github.com/pkg/errors"
8+
"github.com/sirupsen/logrus"
9+
networkingv1 "k8s.io/api/networking/v1"
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
networkingclient "k8s.io/client-go/kubernetes/typed/networking/v1"
12+
)
13+
14+
type NetworkPolicy struct {
15+
name string
16+
namespace string
17+
networkingCli networkingclient.NetworkPolicyInterface
18+
log *logrus.Entry
19+
}
20+
21+
func NewNetworkPolicy(name, namespace string, networkpolicies networkingclient.NetworkPolicyInterface, log *logrus.Entry) NetworkPolicy {
22+
return NetworkPolicy{
23+
name: name,
24+
namespace: namespace,
25+
networkingCli: networkpolicies,
26+
log: log,
27+
}
28+
}
29+
30+
func (n NetworkPolicy) Create() error {
31+
//this will ensure a network policy allowing incomming trafic towards gitserver pod
32+
networkpolicy := &networkingv1.NetworkPolicy{
33+
ObjectMeta: metav1.ObjectMeta{
34+
Name: n.name,
35+
Labels: map[string]string{
36+
componentLabel: n.name,
37+
},
38+
},
39+
Spec: networkingv1.NetworkPolicySpec{
40+
PodSelector: metav1.LabelSelector{
41+
MatchLabels: map[string]string{
42+
"component": "gitserver",
43+
},
44+
},
45+
PolicyTypes: []networkingv1.PolicyType{
46+
networkingv1.PolicyTypeIngress,
47+
},
48+
Ingress: []networkingv1.NetworkPolicyIngressRule{
49+
networkingv1.NetworkPolicyIngressRule{},
50+
},
51+
},
52+
}
53+
_, err := n.networkingCli.Create(context.Background(), networkpolicy, metav1.CreateOptions{})
54+
return errors.Wrapf(err, "while creating NetworkPolicy %s in namespace %s", n.name, n.namespace)
55+
}
56+
57+
func (n NetworkPolicy) Delete(ctx context.Context, options metav1.DeleteOptions) error {
58+
return n.networkingCli.Delete(ctx, n.name, options)
59+
}
60+
61+
func (n NetworkPolicy) Get(ctx context.Context, options metav1.GetOptions) (*networkingv1.NetworkPolicy, error) {
62+
networkpolicy, err := n.networkingCli.Get(ctx, n.name, options)
63+
if err != nil {
64+
return nil, errors.Wrapf(err, "while getting network policy %s in namespace %s", n.name, n.namespace)
65+
}
66+
return networkpolicy, nil
67+
}
68+
func (n NetworkPolicy) LogResource() error {
69+
networkpolicy, err := n.Get(context.TODO(), metav1.GetOptions{})
70+
if err != nil {
71+
return errors.Wrap(err, "while getting network policy")
72+
}
73+
out, err := utils.PrettyMarshall(networkpolicy)
74+
if err != nil {
75+
return errors.Wrap(err, "while marshalling network policy")
76+
}
77+
n.log.Info(out)
78+
return nil
79+
}

tests/serverless/internal/resources/git/gitserver.go

+20-16
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package git
33
import (
44
"context"
55
"fmt"
6+
67
"github.com/kyma-project/serverless/tests/serverless/internal/resources"
78
"github.com/kyma-project/serverless/tests/serverless/internal/resources/app"
89
"github.com/kyma-project/serverless/tests/serverless/internal/utils"
@@ -16,34 +17,37 @@ import (
1617
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1718
appsclient "k8s.io/client-go/kubernetes/typed/apps/v1"
1819
coreclient "k8s.io/client-go/kubernetes/typed/core/v1"
20+
networkingclient "k8s.io/client-go/kubernetes/typed/networking/v1"
1921
)
2022

2123
type GitServer struct {
22-
deployment app.Deployment
23-
services app.Service
24-
resCli *resources.Resource
25-
istioEnabled bool
26-
name string
27-
namespace string
28-
image string
29-
port int32
30-
log *logrus.Entry
24+
deployment app.Deployment
25+
services app.Service
26+
networkPolicy app.NetworkPolicy
27+
resCli *resources.Resource
28+
istioEnabled bool
29+
name string
30+
namespace string
31+
image string
32+
port int32
33+
log *logrus.Entry
3134
}
3235

33-
func New(c utils.Container, name string, image string, port int32, deployments appsclient.DeploymentInterface, services coreclient.ServiceInterface, istioEnabled bool) *GitServer {
36+
func New(c utils.Container, name string, image string, port int32, deployments appsclient.DeploymentInterface, services coreclient.ServiceInterface, networkPolicies networkingclient.NetworkPolicyInterface, istioEnabled bool) *GitServer {
3437
return &GitServer{
3538
deployment: app.NewDeployment(name, c.Namespace, image, port, deployments, c.Log),
3639
services: app.NewService(name, c.Namespace, port, services, c.Log),
3740
resCli: resources.New(c.DynamicCli, schema.GroupVersionResource{
3841
Group: "networking.istio.io",
3942
Version: "v1alpha3",
4043
Resource: "destinationrules"}, c.Namespace, c.Log, c.Verbose),
41-
name: name,
42-
image: image,
43-
port: port,
44-
namespace: c.Namespace,
45-
log: c.Log,
46-
istioEnabled: istioEnabled,
44+
networkPolicy: app.NewNetworkPolicy(name, c.Namespace, networkPolicies, c.Log),
45+
name: name,
46+
image: image,
47+
port: port,
48+
namespace: c.Namespace,
49+
log: c.Log,
50+
istioEnabled: istioEnabled,
4751
}
4852
}
4953

tests/serverless/internal/resources/git/step.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/sirupsen/logrus"
99
appsCli "k8s.io/client-go/kubernetes/typed/apps/v1"
1010
coreclient "k8s.io/client-go/kubernetes/typed/core/v1"
11+
networkingclient "k8s.io/client-go/kubernetes/typed/networking/v1"
1112
)
1213

1314
type newGitServer struct {
@@ -19,14 +20,14 @@ type newGitServer struct {
1920

2021
var _ executor.Step = newGitServer{}
2122

22-
func NewGitServer(cfg GitopsConfig, stepName string, deployments appsCli.DeploymentInterface, services coreclient.ServiceInterface, useProxy, istioEnabled bool) executor.Step {
23+
func NewGitServer(cfg GitopsConfig, stepName string, deployments appsCli.DeploymentInterface, services coreclient.ServiceInterface, networkPolicies networkingclient.NetworkPolicyInterface, useProxy, istioEnabled bool) executor.Step {
2324
repoURL, err := utils.GetGitURL(cfg.GitServerServiceName, cfg.Toolbox.Namespace, cfg.GitServerRepoName, useProxy)
2425
if err != nil {
2526
panic(err)
2627
}
2728
return newGitServer{
2829
name: stepName,
29-
gs: New(cfg.Toolbox, cfg.GitServerServiceName, cfg.GitServerImage, cfg.GitServerServicePort, deployments, services, istioEnabled),
30+
gs: New(cfg.Toolbox, cfg.GitServerServiceName, cfg.GitServerImage, cfg.GitServerServicePort, deployments, services, networkPolicies, istioEnabled),
3031
gitClient: NewGitClient(repoURL.String()),
3132
log: cfg.Toolbox.Log.WithField(executor.LogStepKey, stepName),
3233
}

tests/serverless/internal/testsuite/gitops.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"k8s.io/client-go/dynamic"
2121
typedappsv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
2222
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
23+
typednetworkingv1 "k8s.io/client-go/kubernetes/typed/networking/v1"
2324
"k8s.io/client-go/rest"
2425
)
2526

@@ -39,6 +40,10 @@ func GitopsSteps(restConfig *rest.Config, cfg internal.Config, logf *logrus.Entr
3940
if err != nil {
4041
return nil, errors.Wrapf(err, "while creating k8s apps client")
4142
}
43+
networkingCli, err := typednetworkingv1.NewForConfig(restConfig)
44+
if err != nil {
45+
return nil, errors.Wrapf(err, "while creating k8s networking client")
46+
}
4247

4348
genericContainer := utils.Container{
4449
DynamicCli: dynamicCli,
@@ -65,7 +70,7 @@ func GitopsSteps(restConfig *rest.Config, cfg internal.Config, logf *logrus.Entr
6570
}
6671
return executor.NewSerialTestRunner(logf, "Create git func",
6772
namespace.NewNamespaceStep(logf, fmt.Sprintf("Create %s namespace", genericContainer.Namespace), genericContainer.Namespace, coreCli),
68-
git.NewGitServer(gitCfg, "Start in-cluster Git Server", appsCli.Deployments(genericContainer.Namespace), coreCli.Services(genericContainer.Namespace), cfg.KubectlProxyEnabled, cfg.IstioEnabled),
73+
git.NewGitServer(gitCfg, "Start in-cluster Git Server", appsCli.Deployments(genericContainer.Namespace), coreCli.Services(genericContainer.Namespace), networkingCli.NetworkPolicies(genericContainer.Namespace), cfg.KubectlProxyEnabled, cfg.IstioEnabled),
6974
function.CreateFunction(logf, gitFn, "Create Git Function", runtimes.GitopsFunction(gitCfg.GetGitServerInClusterURL(), "/", "master", serverlessv1alpha2.NodeJs22, nil)),
7075
assertion.NewHTTPCheck(logf, "Git Function pre update simple check through service", gitFn.FunctionURL, poll, "GITOPS 1"),
7176
git.NewCommitChanges(logf, "Commit changes to Git Function", gitCfg.GetGitServerURL(cfg.KubectlProxyEnabled)),

0 commit comments

Comments
 (0)