@@ -404,7 +404,7 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
404404
405405 // Kube API Server NetworkPolicy (based upon impl. by Martin Smithson)
406406 apiServerNetworkPolicy := & networkingv1.NetworkPolicy {ObjectMeta : metav1.ObjectMeta {
407- Name : instance .Name + "-egress-apiserver-access" ,
407+ Name : instance .Name + "-egress-dns-and- apiserver-access" ,
408408 Namespace : instance .Namespace ,
409409 }}
410410 err = r .CreateOrUpdate (apiServerNetworkPolicy , instance , func () error {
@@ -416,16 +416,20 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
416416 apiServerNetworkPolicy .Spec .Egress = make ([]networkingv1.NetworkPolicyEgressRule , 0 )
417417
418418 var dnsRule networkingv1.NetworkPolicyEgressRule
419- // Add OpenShift DNS NetworkPolicy (if applicable)
419+ var usingPermissiveRule bool
420+ // If allowed, add an Egress rule to access the OpenShift DNS or K8s CoreDNS. Otherwise, use a permissive cluster-wide Egress rule.
420421 if r .IsOpenShift () {
421- dnsRule = r .getDNSEgressRule (reqLogger , "dns-default" , "openshift-dns" )
422- } else { // Otherwise, support CoreDNS NetworkPolicy by default
423- dnsRule = r .getDNSEgressRule (reqLogger , "kube-dns" , "kube-system" )
422+ usingPermissiveRule , dnsRule = r .getDNSEgressRule (reqLogger , "dns-default" , "openshift-dns" )
423+ } else {
424+ usingPermissiveRule , dnsRule = r .getDNSEgressRule (reqLogger , "kube-dns" , "kube-system" )
424425 }
425426 apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , dnsRule )
426427
427- rule := networkingv1.NetworkPolicyEgressRule {}
428+ // If allowed, add an Egress rule to access the API server.
429+ // Otherwise, if the OpenShift DNS or K8s CoreDNS Egress rule does not provide permissive cluster-wide access
430+ // and the K8s API server could not be found, use a permissive cluster-wide Egress rule.
428431 if apiServerEndpoints , err := r .getEndpoints ("kubernetes" , "default" ); err == nil {
432+ rule := networkingv1.NetworkPolicyEgressRule {}
429433 // Define the port
430434 port := networkingv1.NetworkPolicyPort {}
431435 port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
@@ -444,19 +448,13 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
444448 rule .To = append (rule .To , peer )
445449 }
446450 }
451+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
452+ reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
453+ } else if ! usingPermissiveRule {
454+ rule := networkingv1.NetworkPolicyEgressRule {}
455+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
447456 reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
448- } else {
449- peer := networkingv1.NetworkPolicyPeer {}
450- peer .NamespaceSelector = & metav1.LabelSelector {
451- MatchLabels : map [string ]string {},
452- }
453- peer .PodSelector = & metav1.LabelSelector {
454- MatchLabels : map [string ]string {},
455- }
456- rule .To = append (rule .To , peer )
457- reqLogger .Info ("Failed to retrieve endpoints for kubernetes service in the default namespace. Using more permissive rule." )
458457 }
459- apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
460458 apiServerNetworkPolicy .Labels = ba .GetLabels ()
461459 apiServerNetworkPolicy .Annotations = oputils .MergeMaps (apiServerNetworkPolicy .Annotations , ba .GetAnnotations ())
462460 apiServerNetworkPolicy .Spec .PolicyTypes = []networkingv1.PolicyType {networkingv1 .PolicyTypeEgress }
@@ -968,7 +966,7 @@ func (r *ReconcileWebSphereLiberty) getEndpoints(serviceName string, namespace s
968966 }
969967}
970968
971- func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) networkingv1.NetworkPolicyEgressRule {
969+ func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) ( bool , networkingv1.NetworkPolicyEgressRule ) {
972970 dnsRule := networkingv1.NetworkPolicyEgressRule {}
973971 if dnsEndpoints , err := r .getEndpoints (endpointsName , endpointsNamespace ); err == nil {
974972 if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
@@ -985,16 +983,11 @@ func (r *ReconcileWebSphereLiberty) getDNSEgressRule(reqLogger logr.Logger, endp
985983 }
986984 dnsRule .To = append (dnsRule .To , peer )
987985 reqLogger .Info ("Found endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace" )
988- } else {
989- peer := networkingv1.NetworkPolicyPeer {}
990- peer .NamespaceSelector = & metav1.LabelSelector {
991- MatchLabels : map [string ]string {},
992- }
993- peer .PodSelector = & metav1.LabelSelector {
994- MatchLabels : map [string ]string {},
995- }
996- dnsRule .To = append (dnsRule .To , peer )
997- reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
986+ return false , dnsRule
998987 }
999- return dnsRule
988+ // use permissive rule
989+ // egress:
990+ // - {}
991+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
992+ return true , dnsRule
1000993}
0 commit comments