@@ -934,3 +934,79 @@ func (r *ReconcileWebSphereLiberty) deletePVC(reqLogger logr.Logger, pvcName str
934934 }
935935 }
936936}
937+
938+ // If a custome hostname was previously set, but is now not set, any previous
939+ // route needs to be deleted, as the host in a route cannot be unset
940+ // and the default generated hostname is difficult to manually recreate
941+ func shouldDeleteRoute (ba common.BaseComponent ) bool {
942+ rh := ba .GetStatus ().GetReferences ()[common .StatusReferenceRouteHost ]
943+ if rh != "" {
944+ // The host was previously set.
945+ // If the host is now empty, delete the old route
946+ rt := ba .GetRoute ()
947+ if rt == nil || (rt .GetHost () == "" && common .Config [common .OpConfigDefaultHostname ] == "" ) {
948+ return true
949+ }
950+ }
951+ return false
952+ }
953+
954+ func (r * ReconcileWebSphereLiberty ) getEndpoints (serviceName string , namespace string ) (* corev1.Endpoints , error ) {
955+ endpoints := & corev1.Endpoints {}
956+ if err := r .GetClient ().Get (context .TODO (), types.NamespacedName {Name : serviceName , Namespace : namespace }, endpoints ); err != nil {
957+ return nil , err
958+ } else {
959+ return endpoints , nil
960+ }
961+ }
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+ dnsRule .To = append (dnsRule .To , peer )
988+
989+ portUDP := networkingv1.NetworkPolicyPort {}
990+ udp := corev1 .ProtocolUDP
991+ portUDP .Protocol = & udp
992+ var portNumberUDP intstr.IntOrString = intstr .FromInt ((int )(53 ))
993+ portUDP .Port = & portNumberUDP
994+ dnsRule .Ports = append (dnsRule .Ports , portUDP )
995+
996+ portTCP := networkingv1.NetworkPolicyPort {}
997+ tcp := corev1 .ProtocolTCP
998+ portTCP .Protocol = & tcp
999+ var portNumberTCP intstr.IntOrString = intstr .FromInt ((int )(53 ))
1000+ portTCP .Port = & portNumberTCP
1001+ dnsRule .Ports = append (dnsRule .Ports , portTCP )
1002+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Defaulting to using " + endpointsName + " on port 53 for DNS access." )
1003+ } else {
1004+ peer := networkingv1.NetworkPolicyPeer {}
1005+ peer .NamespaceSelector = & metav1.LabelSelector {
1006+ MatchLabels : map [string ]string {},
1007+ }
1008+ dnsRule .To = append (dnsRule .To , peer )
1009+ reqLogger .Info ("Failed to retrieve endpoints for " + endpointsName + " service in the " + endpointsNamespace + " namespace. Using more permissive rule." )
1010+ }
1011+ return dnsRule
1012+ }
0 commit comments