Skip to content

Commit 40076a6

Browse files
committed
Default on kube-dns in NetworkPolicy for non-OCP env
1 parent 9e38606 commit 40076a6

File tree

1 file changed

+55
-25
lines changed

1 file changed

+55
-25
lines changed

controllers/webspherelibertyapplication_controller.go

Lines changed: 55 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)