Skip to content

Commit c797074

Browse files
committed
Default on kube-dns in NetworkPolicy for non-OCP env
1 parent 0e3516a commit c797074

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 {
@@ -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

Comments
 (0)