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