@@ -398,8 +398,7 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
398398 common .StatusConditionTypeReconciled , instance )
399399 }
400400
401- // Kube API Server NetworkPolicy (credit to Martin Smithson)
402- reqLogger .Info ("Start API Server Network Policy Reconcile" )
401+ // Kube API Server NetworkPolicy (based upon impl. by Martin Smithson)
403402 apiServerNetworkPolicy := & networkingv1.NetworkPolicy {ObjectMeta : metav1.ObjectMeta {
404403 Name : instance .Name + "-egress-apiserver-access" ,
405404 Namespace : instance .Namespace ,
@@ -409,8 +408,30 @@ func (r *ReconcileWebSphereLiberty) Reconcile(ctx context.Context, request ctrl.
409408 OperatorAllowAPIServerAccessLabel : "true" ,
410409 },
411410 }
411+ // Add OpenShift DNS NetworkPolicy (if applicable)
412+ if r .IsOpenShift () {
413+ dnsRule := networkingv1.NetworkPolicyEgressRule {}
414+ if dnsEndpoints , err := r .getEndpoints ("dns-default" , "openshift-dns" ); err == nil {
415+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns" ); endpointPort != nil {
416+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
417+ }
418+ if endpointPort := lutils .GetEndpointPortByName (& dnsEndpoints .Subsets [0 ].Ports , "dns-tcp" ); endpointPort != nil {
419+ dnsRule .Ports = append (dnsRule .Ports , lutils .CreateNetworkPolicyPortFromEndpointPort (endpointPort ))
420+ }
421+ reqLogger .Info ("Found endpoints for dns-default service in the openshift-dns namespace" )
422+ } else {
423+ peer := networkingv1.NetworkPolicyPeer {}
424+ peer .NamespaceSelector = & metav1.LabelSelector {
425+ MatchLabels : map [string ]string {},
426+ }
427+ dnsRule .To = append (dnsRule .To , peer )
428+ reqLogger .Info ("Failed to retrieve endpoints for dns-default service in the openshift-dns namespace. Using more permissive rule." )
429+ }
430+ apiServerNetworkPolicy .Spec .Egress = append (apiServerNetworkPolicy .Spec .Egress , dnsRule )
431+ }
432+
412433 rule := networkingv1.NetworkPolicyEgressRule {}
413- if apiServerEndpoints , err := r .getKubeAPIServerEndpoints ( ); err == nil {
434+ if apiServerEndpoints , err := r .getEndpoints ( "kubernetes" , "default" ); err == nil {
414435 // Define the port
415436 port := networkingv1.NetworkPolicyPort {}
416437 port .Protocol = & apiServerEndpoints .Subsets [0 ].Ports [0 ].Protocol
@@ -941,9 +962,7 @@ func shouldDeleteRoute(ba common.BaseComponent) bool {
941962 return false
942963}
943964
944- func (r * ReconcileWebSphereLiberty ) getKubeAPIServerEndpoints () (* corev1.Endpoints , error ) {
945- serviceName := "kubernetes"
946- namespace := "default"
965+ func (r * ReconcileWebSphereLiberty ) getEndpoints (serviceName string , namespace string ) (* corev1.Endpoints , error ) {
947966 endpoints := & corev1.Endpoints {}
948967 if err := r .GetClient ().Get (context .TODO (), types.NamespacedName {Name : serviceName , Namespace : namespace }, endpoints ); err != nil {
949968 return nil , err
0 commit comments