@@ -30,6 +30,7 @@ import (
30
30
31
31
appsv1beta1 "k8s.io/api/apps/v1beta1"
32
32
"k8s.io/api/core/v1"
33
+ networkingv1 "k8s.io/api/networking/v1"
33
34
apierrors "k8s.io/apimachinery/pkg/api/errors"
34
35
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
35
36
"k8s.io/apimachinery/pkg/labels"
@@ -346,6 +347,130 @@ func addOwnerRefToObject(o metav1.Object, r metav1.OwnerReference) {
346
347
o .SetOwnerReferences (append (o .GetOwnerReferences (), r ))
347
348
}
348
349
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
+
349
474
// NewSeedMemberPod returns a Pod manifest for a seed member.
350
475
// It's special that it has new token, and might need recovery init containers
351
476
func NewSeedMemberPod (clusterName string , ms etcdutil.MemberSet , m * etcdutil.Member , cs api.ClusterSpec , owner metav1.OwnerReference , backupURL * url.URL ) * v1.Pod {
0 commit comments