So, your program has dependencies, like tokio or openSSL. All of your dependencies are kind of like mini-programs that can be compiled by themselves. But to be useful, your program needs to be able to find and call the functions in your dependencies. To do this, a program called a linker exists - it effectively adds your program and all of your dependencies all together in one big file, and renames all the functions so that they call each other correctly.
You don't always want to include every dependency in your binary, though, so there are two sub-types of linking - static linking and dynamic linking. Static linking happens when you compile your program - by default, crates in Rust are statically linked. On the other hand, dynamic linking happens when the operating system tries to load your program. The system looks for all the libraries that your program says it needs, and links the versions it finds in.
Using a distroless base image gave you those errors because the dynamic linker couldn't find the lib