github.com/aporeto-inc/trireme-lib@v10.358.0+incompatible/controller/internal/enforcer/dnsproxy/common.go (about)

     1  package dnsproxy
     2  
     3  import (
     4  	"net"
     5  	"strconv"
     6  
     7  	"go.aporeto.io/enforcerd/trireme-lib/controller/internal/enforcer/applicationproxy/serviceregistry"
     8  	"go.aporeto.io/enforcerd/trireme-lib/controller/pkg/ipsetmanager"
     9  	"go.aporeto.io/enforcerd/trireme-lib/controller/pkg/pucontext"
    10  	"go.uber.org/zap"
    11  )
    12  
    13  func configureDependentServices(puCtx *pucontext.PUContext, fqdn string, ips []string) {
    14  
    15  	dependentServicesModified := false
    16  
    17  	for _, dependentService := range puCtx.DependentServices(fqdn) {
    18  		min, max := dependentService.NetworkInfo.Ports.Range()
    19  
    20  		for _, ipString := range ips {
    21  			if ip := net.ParseIP(ipString); ip.To4() != nil {
    22  				if _, exists := dependentService.NetworkInfo.Addresses[ipString+"/32"]; exists {
    23  					continue
    24  				}
    25  				_, ipNet, _ := net.ParseCIDR(ipString + "/32")
    26  				for i := int(min); i <= int(max); i++ {
    27  					if err := ipsetmanager.V4().AddIPPortToDependentService(puCtx.ID(), ipNet, strconv.Itoa(i)); err != nil {
    28  						zap.L().Debug("dnsproxy: error adding dependent service ip port to ipset", zap.Error(err))
    29  					}
    30  				}
    31  				dependentServicesModified = true
    32  				dependentService.NetworkInfo.Addresses[ipNet.String()] = struct{}{}
    33  			} else {
    34  				if _, exists := dependentService.NetworkInfo.Addresses[ipString+"/128"]; exists {
    35  					continue
    36  				}
    37  				_, ipNet, _ := net.ParseCIDR(ipString + "/128")
    38  				for i := int(min); i <= int(max); i++ {
    39  					if err := ipsetmanager.V6().AddIPPortToDependentService(puCtx.ID(), ipNet, strconv.Itoa(i)); err != nil {
    40  						zap.L().Debug("dnsproxy: error adding dependent service ip port to ipset", zap.Error(err))
    41  					}
    42  				}
    43  				dependentServicesModified = true
    44  				dependentService.NetworkInfo.Addresses[ipNet.String()] = struct{}{}
    45  			}
    46  		}
    47  	}
    48  
    49  	if dependentServicesModified {
    50  		if err := serviceregistry.Instance().UpdateDependentServicesByID(puCtx.ID()); err != nil {
    51  			zap.L().Error("dnsproxy: error updating dependent services", zap.Error(err))
    52  		}
    53  	}
    54  }