@@ -400,7 +400,7 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
400400
401401 // Kube API Server NetworkPolicy (based upon impl. by Martin Smithson)
402402 apiServerNetworkPolicy := & networkingv1.NetworkPolicy {ObjectMeta : metav1.ObjectMeta {
403- Name : instance .Name + "-egress-apiserver-access" ,
403+ Name : instance .Name + "-egress-dns-and- apiserver-access" ,
404404 Namespace : instance .Namespace ,
405405 }}
406406 err = r .CreateOrUpdate (apiServerNetworkPolicy , instance , func () error {
@@ -412,16 +412,20 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
412412 apiServerNetworkPolicy .Spec .Egress = make ([]networkingv1.NetworkPolicyEgressRule , 0 )
413413
414414 var dnsRule networkingv1.NetworkPolicyEgressRule
415- // Add OpenShift DNS NetworkPolicy (if applicable)
415+ var usingPermissiveRule bool
416+ // If allowed, add an Egress rule to access the OpenShift DNS or K8s CoreDNS. Otherwise, use a permissive cluster-wide Egress rule.
416417 if r .IsOpenShift () {
417- dnsRule = r .getDNSEgressRule (reqLogger , "dns-default" , "openshift-dns" )
418- } else { // Otherwise, support CoreDNS NetworkPolicy by default
419- dnsRule = r .getDNSEgressRule (reqLogger , "kube-dns" , "kube-system" )
418+ usingPermissiveRule , dnsRule = r .getDNSEgressRule (reqLogger , "dns-default" , "openshift-dns" )
419+ } else {
420+ usingPermissiveRule , dnsRule = r .getDNSEgressRule (reqLogger , "kube-dns" , "kube-system" )
420421 }
421422 apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , dnsRule )
422423
423- rule := networkingv1.NetworkPolicyEgressRule {}
424+ // If allowed, add an Egress rule to access the API server.
425+ // Otherwise, if the OpenShift DNS or K8s CoreDNS Egress rule does not provide permissive cluster-wide access
426+ // and the K8s API server could not be found, use a permissive cluster-wide Egress rule.
424427 if apiServerEndpoints , err := r .getEndpoints ("kubernetes" , "default" ); err == nil {
428+ rule := networkingv1.NetworkPolicyEgressRule {}
425429 // Define the port
426430 port := networkingv1.NetworkPolicyPort {}
427431 port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
@@ -440,19 +444,13 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
440444 rule .To = append (rule .To , peer )
441445 }
442446 }
447+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
448+ reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
449+ } else if ! usingPermissiveRule {
450+ rule := networkingv1.NetworkPolicyEgressRule {}
451+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
443452 reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
444- } else {
445- peer := networkingv1.NetworkPolicyPeer {}
446- peer .NamespaceSelector = & metav1.LabelSelector {
447- MatchLabels : map [string ]string {},
448- }
449- peer .PodSelector = & metav1.LabelSelector {
450- MatchLabels : map [string ]string {},
451- }
452- rule .To = append (rule .To , peer )
453- reqLogger .Info ("Failed to retrieve endpoints for kubernetes service in the default namespace. Using more permissive rule." )
454453 }
455- apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
456454 apiServerNetworkPolicy .Labels = ba .GetLabels ()
457455 apiServerNetworkPolicy .Annotations = oputils .MergeMaps (apiServerNetworkPolicy .Annotations , ba .GetAnnotations ())
458456 apiServerNetworkPolicy .Spec .PolicyTypes = []networkingv1.PolicyType {networkingv1 .PolicyTypeEgress }
@@ -963,7 +961,7 @@ func (r *ReconcileWebSphereLiberty) getEndpoints(serviceName string, namespace s
963961 }
964962}
965963
966- func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) networkingv1.NetworkPolicyEgressRule {
964+ func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) ( bool , networkingv1.NetworkPolicyEgressRule ) {
967965 dnsRule := networkingv1.NetworkPolicyEgressRule {}
968966 if dnsEndpoints , err := r .getEndpoints (endpointsName , endpointsNamespace ); err == nil {
969967 if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
@@ -980,16 +978,11 @@ func (r *ReconcileWebSphereLiberty) getDNSEgressRule(reqLogger logr.Logger, endp
980978 }
981979 dnsRule .To = append (dnsRule .To , peer )
982980 reqLogger .Info ("Found endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace" )
983- } else {
984- peer := networkingv1.NetworkPolicyPeer {}
985- peer .NamespaceSelector = & metav1.LabelSelector {
986- MatchLabels : map [string ]string {},
987- }
988- peer .PodSelector = & metav1.LabelSelector {
989- MatchLabels : map [string ]string {},
990- }
991- dnsRule .To = append (dnsRule .To , peer )
992- reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
981+ return false , dnsRule
993982 }
994- return dnsRule
983+ // use permissive rule
984+ // egress:
985+ // - {}
986+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
987+ return true , dnsRule
995988}
0 commit comments