@@ -425,36 +425,39 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
425425 }
426426 apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , dnsRule )
427427
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.
431- if apiServerEndpoints , err := r .getEndpoints ("kubernetes" , "default" ); err == nil {
432- rule := networkingv1.NetworkPolicyEgressRule {}
433- // Define the port
434- port := networkingv1.NetworkPolicyPort {}
435- port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
436- var portNumber intstr.IntOrString = intstr .FromInt ((int )(apiServerEndpoints .Subsets [0 ].Ports [0 ].Port ))
437- port .Port = & portNumber
438- rule .Ports = append (rule .Ports , port )
439-
440- // Add the endpoint address as ipBlock entries
441- for _ , endpoint := range apiServerEndpoints .Subsets {
442- for _ , address := range endpoint .Addresses {
443- peer := networkingv1.NetworkPolicyPeer {}
444- ipBlock := networkingv1.IPBlock {}
445- ipBlock .CIDR = address .IP + "/32"
446-
447- peer .IPBlock = & ipBlock
448- rule .To = append (rule .To , peer )
428+ // If the DNS rule is a specific Egress rule also check if another Egress rule can be created for the API server.
429+ // Otherwise, fallback to a permissive cluster-wide Egress rule.
430+ if ! usingPermissiveRule {
431+ if apiServerEndpoints , err := r .getEndpoints ("kubernetes" , "default" ); err == nil {
432+ rule := networkingv1.NetworkPolicyEgressRule {}
433+ // Define the port
434+ port := networkingv1.NetworkPolicyPort {}
435+ port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
436+ var portNumber intstr.IntOrString = intstr .FromInt ((int )(apiServerEndpoints .Subsets [0 ].Ports [0 ].Port ))
437+ port .Port = & portNumber
438+ rule .Ports = append (rule .Ports , port )
439+
440+ // Add the endpoint address as ipBlock entries
441+ for _ , endpoint := range apiServerEndpoints .Subsets {
442+ for _ , address := range endpoint .Addresses {
443+ peer := networkingv1.NetworkPolicyPeer {}
444+ ipBlock := networkingv1.IPBlock {}
445+ ipBlock .CIDR = address .IP + "/32"
446+
447+ peer .IPBlock = & ipBlock
448+ rule .To = append (rule .To , peer )
449+ }
449450 }
451+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
452+ reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
453+ } else {
454+ // The operator couldn't create a rule for the K8s API server so add a permissive Egress rule
455+ rule := networkingv1.NetworkPolicyEgressRule {}
456+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
457+ reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
450458 }
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 )
456- reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
457459 }
460+
458461 apiServerNetworkPolicy .Labels = ba .GetLabels ()
459462 apiServerNetworkPolicy .Annotations = oputils .MergeMaps (apiServerNetworkPolicy .Annotations , ba .GetAnnotations ())
460463 apiServerNetworkPolicy .Spec .PolicyTypes = []networkingv1.PolicyType {networkingv1 .PolicyTypeEgress }
@@ -953,11 +956,13 @@ func (r *ReconcileWebSphereLiberty) getEndpoints(serviceName string, namespace s
953956func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) (bool , networkingv1.NetworkPolicyEgressRule ) {
954957 dnsRule := networkingv1.NetworkPolicyEgressRule {}
955958 if dnsEndpoints , err := r .getEndpoints (endpointsName , endpointsNamespace ); err == nil {
956- if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
957- dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
958- }
959- if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
960- dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
959+ if len (dnsEndpoints .Subsets ) > 0 {
960+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
961+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
962+ }
963+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
964+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
965+ }
961966 }
962967 peer := networkingv1.NetworkPolicyPeer {}
963968 peer .NamespaceSelector = & metav1.LabelSelector {
0 commit comments