code: func (proxier *Proxier) deleteEndpointConnections(connectionMap []proxy.ServiceEndpoint) {
  	for _, epSvcPair := range connectionMap {
  		if svcInfo, ok := proxier.serviceMap[epSvcPair.ServicePortName]; ok && svcInfo.GetProtocol() == v1.ProtocolUDP {
  			endpointIP := utilproxy.IPPart(epSvcPair.Endpoint)
  			nodePort := svcInfo.GetNodePort()
  			var err error
  			if nodePort != 0 {
  				err = conntrack.ClearEntriesForPortNAT(proxier.exec, endpointIP, nodePort, v1.ProtocolUDP)
  			} else {
  				err = conntrack.ClearEntriesForNAT(proxier.exec, svcInfo.ClusterIPString(), endpointIP, v1.ProtocolUDP)
  			}
  			if err != nil {
  				klog.Errorf("Failed to delete %s endpoint connections, error: %v", epSvcPair.ServicePortName.String(), err)
  			}
  			for _, extIP := range svcInfo.ExternalIPStrings() {
  				err := conntrack.ClearEntriesForNAT(proxier.exec, extIP, endpointIP, v1.ProtocolUDP)
  				if err != nil {
  					klog.Errorf("Failed to delete %s endpoint connections for externalIP %s, error: %v", epSvcPair.ServicePortName.String(), extIP, err)
  				}
  			}
  			for _, lbIP := range svcInfo.LoadBalancerIPStrings() {
  				err := conntrack.ClearEntriesForNAT(proxier.exec, lbIP, endpointIP, v1.ProtocolUDP)
  				if err != nil {
  					klog.Errorf("Failed to delete %s endpoint connections for LoabBalancerIP %s, error: %v", epSvcPair.ServicePortName.String(), lbIP, err)
  				}
  			}
  		}
  	}
  }
docs: // After a UDP endpoint has been removed, we must flush any pending conntrack entries to it, or else we
  // risk sending more traffic to it, all of which will be lost (because UDP).
  // This assumes the proxier mutex is held
  // TODO: move it to util