@@ -403,6 +403,41 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
403403 Name : instance .Name + "-egress-dns-and-apiserver-access" ,
404404 Namespace : instance .Namespace ,
405405 }}
406+ apiServerNetworkPolicy .Spec .PodSelector = metav1.LabelSelector {
407+ MatchLabels : map [string ]string {
408+ OperatorAllowAPIServerAccessLabel : "true" ,
409+ },
410+ }
411+ rule := networkingv1.NetworkPolicyEgressRule {}
412+ if apiServerEndpoints , err := r .getKubeAPIServerEndpoints (); err == nil {
413+ // Define the port
414+ port := networkingv1.NetworkPolicyPort {}
415+ port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
416+ var portNumber intstr.IntOrString = intstr .FromInt ((int )(apiServerEndpoints .Subsets [0 ].Ports [0 ].Port ))
417+ port .Port = & portNumber
418+ rule .Ports = append (rule .Ports , port )
419+
420+ // Add the endpoint address as ipBlock entries
421+ for _ , endpoint := range apiServerEndpoints .Subsets {
422+ for _ , address := range endpoint .Addresses {
423+ peer := networkingv1.NetworkPolicyPeer {}
424+ ipBlock := networkingv1.IPBlock {}
425+ ipBlock .CIDR = address .IP + "/32"
426+
427+ peer .IPBlock = & ipBlock
428+ rule .To = append (rule .To , peer )
429+ }
430+ }
431+ reqLogger .Info ("Found endpoints for kubernetes service in the default namespace" )
432+ } else {
433+ peer := networkingv1.NetworkPolicyPeer {}
434+ peer .NamespaceSelector = & metav1.LabelSelector {
435+ MatchLabels : map [string ]string {},
436+ }
437+ rule .To = append (rule .To , peer )
438+ reqLogger .Info ("Failed to retrieve endpoints for kubernetes service in the default namespace. Using more permissive rule." )
439+ }
440+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , rule )
406441 err = r .CreateOrUpdate (apiServerNetworkPolicy , instance , func () error {
407442 apiServerNetworkPolicy .Spec .PodSelector = metav1.LabelSelector {
408443 MatchLabels : map [string ]string {
0 commit comments