I think it’s easiest to think of your kernels as analogous to (defined-where-declared) static/inline functions in C/C++, and the files that define them as headers. Therefore, it is incorrect to try to compile a header file (even if the compiler generates object code without errors). Your linker is complaining because ok.obj declares symbols with the same name as ones in ok_kernel.obj. That’s because you included ok_kernel.cu in the source of ok.cu.
You should only #include your *.kernel.cu and never include them as build targets. Search the forums, someone has included specific instructions for fixing Visual Studio projects that are incorrectly configured like this.