@@ -421,36 +421,39 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
421421 }
422422 apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , dnsRule )
423423
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.
427- if apiServerEndpoints , err := r .getEndpoints ("kubernetes" , "default" ); err == nil {
428- rule := networkingv1.NetworkPolicyEgressRule {}
429- // Define the port
430- port := networkingv1.NetworkPolicyPort {}
431- port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
432- var portNumber intstr.IntOrString = intstr .FromInt ((int )(apiServerEndpoints .Subsets [0 ].Ports [0 ].Port ))
433- port .Port = & portNumber
434- rule .Ports = append (rule .Ports , port )
435-
436- // Add the endpoint address as ipBlock entries
437- for _ , endpoint := range apiServerEndpoints .Subsets {
438- for _ , address := range endpoint .Addresses {
439- peer := networkingv1.NetworkPolicyPeer {}
440- ipBlock := networkingv1.IPBlock {}
441- ipBlock .CIDR = address .IP + "/32"
442-
443- peer .IPBlock = & ipBlock
444- rule .To = append (rule .To , peer )
424+ // If the DNS rule is a specific Egress rule also check if another Egress rule can be created for the API server.
425+ // Otherwise, fallback to a permissive cluster-wide Egress rule.
426+ if ! usingPermissiveRule {
427+ if apiServerEndpoints , err := r .getEndpoints ("kubernetes" , "default" ); err == nil {
428+ rule := networkingv1.NetworkPolicyEgressRule {}
429+ // Define the port
430+ port := networkingv1.NetworkPolicyPort {}
431+ port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
432+ var portNumber intstr.IntOrString = intstr .FromInt ((int )(apiServerEndpoints .Subsets [0 ].Ports [0 ].Port ))
433+ port .Port = & portNumber
434+ rule .Ports = append (rule .Ports , port )
435+
436+ // Add the endpoint address as ipBlock entries
437+ for _ , endpoint := range apiServerEndpoints .Subsets {
438+ for _ , address := range endpoint .Addresses {
439+ peer := networkingv1.NetworkPolicyPeer {}
440+ ipBlock := networkingv1.IPBlock {}
441+ ipBlock .CIDR = address .IP + "/32"
442+
443+ peer .IPBlock = & ipBlock
444+ rule .To = append (rule .To , peer )
445+ }
445446 }
447+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
448+ reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
449+ } else {
450+ // The operator couldn't create a rule for the K8s API server so add a permissive Egress rule
451+ rule := networkingv1.NetworkPolicyEgressRule {}
452+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
453+ reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
446454 }
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 )
452- reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
453455 }
456+
454457 apiServerNetworkPolicy .Labels = ba .GetLabels ()
455458 apiServerNetworkPolicy .Annotations = oputils .MergeMaps (apiServerNetworkPolicy .Annotations , ba .GetAnnotations ())
456459 apiServerNetworkPolicy .Spec .PolicyTypes = []networkingv1.PolicyType {networkingv1 .PolicyTypeEgress }
@@ -948,11 +951,13 @@ func (r *ReconcileWebSphereLiberty) getEndpoints(serviceName string, namespace s
948951func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) (bool , networkingv1.NetworkPolicyEgressRule ) {
949952 dnsRule := networkingv1.NetworkPolicyEgressRule {}
950953 if dnsEndpoints , err := r .getEndpoints (endpointsName , endpointsNamespace ); err == nil {
951- if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
952- dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
953- }
954- if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
955- dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
954+ if len (dnsEndpoints .Subsets ) > 0 {
955+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
956+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
957+ }
958+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
959+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
960+ }
956961 }
957962 peer := networkingv1.NetworkPolicyPeer {}
958963 peer .NamespaceSelector = & metav1.LabelSelector {
0 commit comments