@@ -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 {
@@ -962,3 +943,52 @@ func (r *ReconcileWebSphereLiberty) getEndpoints(serviceName string, namespace s
962943 return endpoints , nil
963944 }
964945}
946+
947+ func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) networkingv1.NetworkPolicyEgressRule {
948+ dnsRule := networkingv1.NetworkPolicyEgressRule {}
949+ if dnsEndpoints , err := r .getEndpoints (endpointsName , endpointsNamespace ); err == nil {
950+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
951+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
952+ }
953+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
954+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
955+ }
956+ peer := networkingv1.NetworkPolicyPeer {}
957+ peer .NamespaceSelector = & metav1.LabelSelector {
958+ MatchLabels : map [string ]string {
959+ "kubernetes.io/metadata.name" : endpointsNamespace ,
960+ },
961+ }
962+ dnsRule .To = append (dnsRule .To , peer )
963+ reqLogger .Info ("Found endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace" )
964+ } else if endpointsNamespace == "kube-system" { // For non-OCP, assume CoreDNS as the default
965+ peer := networkingv1.NetworkPolicyPeer {}
966+ peer .NamespaceSelector = & metav1.LabelSelector {
967+ MatchLabels : map [string ]string {
968+ "kubernetes.io/metadata.name" : endpointsNamespace ,
969+ },
970+ }
971+ portUDP := networkingv1.NetworkPolicyPort {}
972+ udp := corev1 .ProtocolUDP
973+ portUDP .Protocol = & udp
974+ var portNumberUDP intstr.IntOrString = intstr .FromInt ((int )(53 ))
975+ portUDP .Port = & portNumberUDP
976+ dnsRule .Ports = append (dnsRule .Ports , portUDP )
977+
978+ portTCP := networkingv1.NetworkPolicyPort {}
979+ tcp := corev1 .ProtocolUDP
980+ portTCP .Protocol = & tcp
981+ var portNumberTCP intstr.IntOrString = intstr .FromInt ((int )(53 ))
982+ portTCP .Port = & portNumberTCP
983+ dnsRule .Ports = append (dnsRule .Ports , portTCP )
984+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Defaulting to using " + endpointsName + " on port 53 for DNS access." )
985+ } else {
986+ peer := networkingv1.NetworkPolicyPeer {}
987+ peer .NamespaceSelector = & metav1.LabelSelector {
988+ MatchLabels : map [string ]string {},
989+ }
990+ dnsRule .To = append (dnsRule .To , peer )
991+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
992+ }
993+ return dnsRule
994+ }
0 commit comments