@@ -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 }
@@ -947,7 +945,7 @@ func (r *ReconcileWebSphereLiberty) getEndpoints(serviceName string, namespace s
947945	}
948946}
949947
950- func  (r  * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger  logr.Logger , endpointsName  string , endpointsNamespace  string ) networkingv1.NetworkPolicyEgressRule  {
948+ func  (r  * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger  logr.Logger , endpointsName  string , endpointsNamespace  string ) ( bool ,  networkingv1.NetworkPolicyEgressRule )  {
951949	dnsRule  :=  networkingv1.NetworkPolicyEgressRule {}
952950	if  dnsEndpoints , err  :=  r .getEndpoints (endpointsName , endpointsNamespace ); err  ==  nil  {
953951		if  endpointPort  :=  lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort  !=  nil  {
@@ -964,16 +962,11 @@ func (r *ReconcileWebSphereLiberty) getDNSEgressRule(reqLogger logr.Logger, endp
964962		}
965963		dnsRule .To  =  append (dnsRule .To , peer )
966964		reqLogger .Info ("Found endpoints for "  +  endpointsName  +  " service in the "  +  endpointsNamespace  +  " namespace" )
967- 	} else  {
968- 		peer  :=  networkingv1.NetworkPolicyPeer {}
969- 		peer .NamespaceSelector  =  & metav1.LabelSelector {
970- 			MatchLabels : map [string ]string {},
971- 		}
972- 		peer .PodSelector  =  & metav1.LabelSelector {
973- 			MatchLabels : map [string ]string {},
974- 		}
975- 		dnsRule .To  =  append (dnsRule .To , peer )
976- 		reqLogger .Info ("Failed to retrieve endpoints for "  +  endpointsName  +  " service in the "  +  endpointsNamespace  +  "  namespace. Using more permissive rule." )
965+ 		return  false , dnsRule 
977966	}
978- 	return  dnsRule 
967+ 	// use permissive rule 
968+ 	// egress: 
969+ 	//   - {} 
970+ 	reqLogger .Info ("Failed to retrieve endpoints for "  +  endpointsName  +  " service in the "  +  endpointsNamespace  +  "  namespace. Using more permissive rule." )
971+ 	return  true , dnsRule 
979972}
0 commit comments