@@ -939,3 +939,79 @@ func (r *ReconcileWebSphereLiberty) deletePVC(reqLogger logr.Logger, pvcName str
939939 }
940940 }
941941}
942+
943+ // If a custome hostname was previously set, but is now not set, any previous
944+ // route needs to be deleted, as the host in a route cannot be unset
945+ // and the default generated hostname is difficult to manually recreate
946+ func shouldDeleteRoute (ba common.BaseComponent ) bool {
947+ rh := ba .GetStatus ().GetReferences ()[common .StatusReferenceRouteHost ]
948+ if rh != "" {
949+ // The host was previously set.
950+ // If the host is now empty, delete the old route
951+ rt := ba .GetRoute ()
952+ if rt == nil || (rt .GetHost () == "" && common .Config [common .OpConfigDefaultHostname ] == "" ) {
953+ return true
954+ }
955+ }
956+ return false
957+ }
958+
959+ func (r * ReconcileWebSphereLiberty ) getEndpoints (serviceName string , namespace string ) (* corev1.Endpoints , error ) {
960+ endpoints := & corev1.Endpoints {}
961+ if err := r .GetClient ().Get (context .TODO (), types.NamespacedName {Name : serviceName , Namespace : namespace }, endpoints ); err != nil {
962+ return nil , err
963+ } else {
964+ return endpoints , nil
965+ }
966+ }
967+
968+ func (r * ReconcileWebSphereLiberty ) getDNSEgressRule (reqLogger logr.Logger , endpointsName string , endpointsNamespace string ) networkingv1.NetworkPolicyEgressRule {
969+ dnsRule := networkingv1.NetworkPolicyEgressRule {}
970+ if dnsEndpoints , err := r .getEndpoints (endpointsName , endpointsNamespace ); err == nil {
971+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
972+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
973+ }
974+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
975+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
976+ }
977+ peer := networkingv1.NetworkPolicyPeer {}
978+ peer .NamespaceSelector = & metav1.LabelSelector {
979+ MatchLabels : map [string ]string {
980+ "kubernetes.io/metadata.name" : endpointsNamespace ,
981+ },
982+ }
983+ dnsRule .To = append (dnsRule .To , peer )
984+ reqLogger .Info ("Found endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace" )
985+ } else if endpointsNamespace == "kube-system" { // For non-OCP, assume CoreDNS as the default
986+ peer := networkingv1.NetworkPolicyPeer {}
987+ peer .NamespaceSelector = & metav1.LabelSelector {
988+ MatchLabels : map [string ]string {
989+ "kubernetes.io/metadata.name" : endpointsNamespace ,
990+ },
991+ }
992+ dnsRule .To = append (dnsRule .To , peer )
993+
994+ portUDP := networkingv1.NetworkPolicyPort {}
995+ udp := corev1 .ProtocolUDP
996+ portUDP .Protocol = & udp
997+ var portNumberUDP intstr.IntOrString = intstr .FromInt ((int )(53 ))
998+ portUDP .Port = & portNumberUDP
999+ dnsRule .Ports = append (dnsRule .Ports , portUDP )
1000+
1001+ portTCP := networkingv1.NetworkPolicyPort {}
1002+ tcp := corev1 .ProtocolTCP
1003+ portTCP .Protocol = & tcp
1004+ var portNumberTCP intstr.IntOrString = intstr .FromInt ((int )(53 ))
1005+ portTCP .Port = & portNumberTCP
1006+ dnsRule .Ports = append (dnsRule .Ports , portTCP )
1007+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Defaulting to using " + endpointsName + " on port 53 for DNS access." )
1008+ } else {
1009+ peer := networkingv1.NetworkPolicyPeer {}
1010+ peer .NamespaceSelector = & metav1.LabelSelector {
1011+ MatchLabels : map [string ]string {},
1012+ }
1013+ dnsRule .To = append (dnsRule .To , peer )
1014+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
1015+ }
1016+ return dnsRule
1017+ }
0 commit comments