@@ -410,34 +410,15 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
410410 },
411411 }
412412 apiServerNetworkPolicy .Spec .Egress = make ([]networkingv1.NetworkPolicyEgressRule , 0 )
413+
414+ var dnsRule networkingv1.NetworkPolicyEgressRule
413415 // Add OpenShift DNS NetworkPolicy (if applicable)
414416 if r .IsOpenShift () {
415- dnsRule := networkingv1.NetworkPolicyEgressRule {}
416- if dnsEndpoints , err := r .getEndpoints ("dns-default" , "openshift-dns" ); err == nil {
417- if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
418- dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
419- }
420- if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
421- dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
422- }
423- peer := networkingv1.NetworkPolicyPeer {}
424- peer .NamespaceSelector = & metav1.LabelSelector {
425- MatchLabels : map [string ]string {
426- "kubernetes.io/metadata.name" : "openshift-dns" ,
427- },
428- }
429- dnsRule .To = append (dnsRule .To , peer )
430- reqLogger .Info ("Found endpoints for dns-default service in the openshift-dns namespace" )
431- } else {
432- peer := networkingv1.NetworkPolicyPeer {}
433- peer .NamespaceSelector = & metav1.LabelSelector {
434- MatchLabels : map [string ]string {},
435- }
436- dnsRule .To = append (dnsRule .To , peer )
437- reqLogger .Info ("Failed to retrieve endpoints for dns-default service in the openshift-dns namespace. Using more permissive rule." )
438- }
439- apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , dnsRule )
417+ dnsRule = r .getDNSEgressRule (reqLogger , "dns-default" , "openshift-dns" )
418+ } else { // Otherwise, support CoreDNS NetworkPolicy by default
419+ dnsRule = r .getDNSEgressRule (reqLogger , "kube-dns" , "kube-system" )
440420 }
421+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , dnsRule )
441422
442423 rule := networkingv1.NetworkPolicyEgressRule {}
443424 if apiServerEndpoints , err := r .getEndpoints ("kubernetes" , "default" ); err == nil {
@@ -978,3 +959,52 @@ func (r *ReconcileWebSphereLiberty) getEndpoints(serviceName string, namespace s
978959 return endpoints , nil
979960 }
980961}
962+
963+ func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) networkingv1.NetworkPolicyEgressRule {
964+ dnsRule := networkingv1.NetworkPolicyEgressRule {}
965+ if dnsEndpoints , err := r .getEndpoints (endpointsName , endpointsNamespace ); err == nil {
966+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
967+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
968+ }
969+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
970+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
971+ }
972+ peer := networkingv1.NetworkPolicyPeer {}
973+ peer .NamespaceSelector = & metav1.LabelSelector {
974+ MatchLabels : map [string ]string {
975+ "kubernetes.io/metadata.name" : endpointsNamespace ,
976+ },
977+ }
978+ dnsRule .To = append (dnsRule .To , peer )
979+ reqLogger .Info ("Found endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace" )
980+ } else if endpointsNamespace == "kube-system" { // For non-OCP, assume CoreDNS as the default
981+ peer := networkingv1.NetworkPolicyPeer {}
982+ peer .NamespaceSelector = & metav1.LabelSelector {
983+ MatchLabels : map [string ]string {
984+ "kubernetes.io/metadata.name" : endpointsNamespace ,
985+ },
986+ }
987+ portUDP := networkingv1.NetworkPolicyPort {}
988+ udp := corev1 .ProtocolUDP
989+ portUDP .Protocol = & udp
990+ var portNumberUDP intstr.IntOrString = intstr .FromInt ((int )(53 ))
991+ portUDP .Port = & portNumberUDP
992+ dnsRule .Ports = append (dnsRule .Ports , portUDP )
993+
994+ portTCP := networkingv1.NetworkPolicyPort {}
995+ tcp := corev1 .ProtocolUDP
996+ portTCP .Protocol = & tcp
997+ var portNumberTCP intstr.IntOrString = intstr .FromInt ((int )(53 ))
998+ portTCP .Port = & portNumberTCP
999+ dnsRule .Ports = append (dnsRule .Ports , portTCP )
1000+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Defaulting to using " + endpointsName + " on port 53 for DNS access." )
1001+ } else {
1002+ peer := networkingv1.NetworkPolicyPeer {}
1003+ peer .NamespaceSelector = & metav1.LabelSelector {
1004+ MatchLabels : map [string ]string {},
1005+ }
1006+ dnsRule .To = append (dnsRule .To , peer )
1007+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
1008+ }
1009+ return dnsRule
1010+ }
0 commit comments