Skip to content

Commit 84da173

Browse files
author
Ashijeet Acharya
committed
pkg/cluster: create multiple networkpolicies for sensu cluster
Signed-off-by: Ashijeet Acharya <[email protected]>
1 parent 2b85303 commit 84da173

File tree

2 files changed

+129
-0
lines changed

2 files changed

+129
-0
lines changed

pkg/cluster/cluster.go

+4
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ func New(config Config, cl *api.SensuCluster) *Cluster {
9999
}
100100

101101
go func() {
102+
c.logger.Infof("creating NetworkPolicy for cluster %s", c.cluster.Name)
103+
if err := k8sutil.CreateNetPolicy(c.config.KubeCli, c.cluster.Name, c.cluster.Namespace, c.cluster.AsOwner()); err != nil {
104+
c.logger.Warningf("failed to create network policies for cluster %s: %v", c.cluster.Name, err)
105+
}
102106
if err := c.setup(); err != nil {
103107
c.logger.Errorf("cluster failed to setup: %v", err)
104108
if c.status.Phase != api.ClusterPhaseFailed {

pkg/util/k8sutil/k8sutil.go

+125
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030

3131
appsv1beta1 "k8s.io/api/apps/v1beta1"
3232
"k8s.io/api/core/v1"
33+
networkingv1 "k8s.io/api/networking/v1"
3334
apierrors "k8s.io/apimachinery/pkg/api/errors"
3435
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3536
"k8s.io/apimachinery/pkg/labels"
@@ -346,6 +347,130 @@ func addOwnerRefToObject(o metav1.Object, r metav1.OwnerReference) {
346347
o.SetOwnerReferences(append(o.GetOwnerReferences(), r))
347348
}
348349

350+
// CreateNetPolicy creates a NetworkPolicy for a Sensu cluster
351+
func CreateNetPolicy(kubecli kubernetes.Interface, clusterName, namespace string, owner metav1.OwnerReference) error {
352+
labels := map[string]string{
353+
"app": "sensu",
354+
"sensu_cluster": clusterName,
355+
}
356+
357+
netCases := []networkingv1.NetworkPolicy{
358+
{
359+
ObjectMeta: metav1.ObjectMeta{
360+
GenerateName: "sensu-block-all-",
361+
Labels: labels,
362+
Namespace: metav1.NamespaceDefault,
363+
},
364+
Spec: networkingv1.NetworkPolicySpec{
365+
PodSelector: metav1.LabelSelector{
366+
MatchLabels: labels,
367+
},
368+
Ingress: []networkingv1.NetworkPolicyIngressRule{},
369+
},
370+
},
371+
{
372+
ObjectMeta: metav1.ObjectMeta{
373+
GenerateName: "sensu-api-pods-",
374+
Labels: labels,
375+
Namespace: metav1.NamespaceDefault,
376+
},
377+
Spec: networkingv1.NetworkPolicySpec{
378+
PodSelector: metav1.LabelSelector{
379+
MatchLabels: labels,
380+
},
381+
Ingress: []networkingv1.NetworkPolicyIngressRule{
382+
{
383+
Ports: []networkingv1.NetworkPolicyPort{
384+
{
385+
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 3000},
386+
},
387+
{
388+
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 8080},
389+
},
390+
{
391+
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 8081},
392+
},
393+
},
394+
From: []networkingv1.NetworkPolicyPeer{},
395+
},
396+
},
397+
},
398+
},
399+
{
400+
ObjectMeta: metav1.ObjectMeta{
401+
GenerateName: "sensu-operator-pods-",
402+
Labels: labels,
403+
Namespace: metav1.NamespaceDefault,
404+
},
405+
Spec: networkingv1.NetworkPolicySpec{
406+
PodSelector: metav1.LabelSelector{
407+
MatchLabels: labels,
408+
},
409+
Ingress: []networkingv1.NetworkPolicyIngressRule{
410+
{
411+
Ports: []networkingv1.NetworkPolicyPort{
412+
{
413+
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 2379},
414+
},
415+
{
416+
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 2380},
417+
},
418+
},
419+
From: []networkingv1.NetworkPolicyPeer{
420+
{
421+
PodSelector: &metav1.LabelSelector{
422+
MatchLabels: map[string]string{
423+
"name": "sensu-operator",
424+
},
425+
},
426+
},
427+
},
428+
},
429+
},
430+
},
431+
},
432+
{
433+
ObjectMeta: metav1.ObjectMeta{
434+
GenerateName: "sensu-cluster-pods-",
435+
Labels: labels,
436+
Namespace: metav1.NamespaceDefault,
437+
},
438+
Spec: networkingv1.NetworkPolicySpec{
439+
PodSelector: metav1.LabelSelector{
440+
MatchLabels: labels,
441+
},
442+
Ingress: []networkingv1.NetworkPolicyIngressRule{
443+
{
444+
Ports: []networkingv1.NetworkPolicyPort{
445+
{
446+
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 2379},
447+
},
448+
{
449+
Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 2380},
450+
},
451+
},
452+
From: []networkingv1.NetworkPolicyPeer{
453+
{
454+
PodSelector: &metav1.LabelSelector{
455+
MatchLabels: labels,
456+
},
457+
},
458+
},
459+
},
460+
},
461+
},
462+
},
463+
}
464+
465+
for _, net := range netCases {
466+
addOwnerRefToObject(net.GetObjectMeta(), owner)
467+
if _, err := kubecli.NetworkingV1().NetworkPolicies(namespace).Create(&net); err != nil {
468+
return err
469+
}
470+
}
471+
return nil
472+
}
473+
349474
// NewSeedMemberPod returns a Pod manifest for a seed member.
350475
// It's special that it has new token, and might need recovery init containers
351476
func NewSeedMemberPod(clusterName string, ms etcdutil.MemberSet, m *etcdutil.Member, cs api.ClusterSpec, owner metav1.OwnerReference, backupURL *url.URL) *v1.Pod {

0 commit comments

Comments
 (0)