Water Temperature Sensor for Arduino

The usual way is to contain the water inside a tank / container which can transmit heat - usually metal. To the outside of this is then bonded the temperature sensor - be that a simple bi-metalic strip thermostat, or a more complex temperature sensing transducer.

Of course, this requires a metal tank, and that will radiate heat, which will be wasteful.

Ideally you would want some form of waterproof probe. You haven't mentioned the amount of water you're dealing with - how big is the tank? How deep especially.

There are thermocouples available in a rigid probe form - quite how waterproof these are I'm not sure, but these are never very long, so you won't be able to get it more than 6 inches or so into the water before you risk complete submersion.

You could always try waterproofing your own sensor - be it a thermocouple, thermistor, or solid-state sensor, but unless you have specialist equipment then you'll be using plastics (tubing, etc) which will insulate the sensor from the heat and may affect your accuracy somewhat. You'd really want the waterproofing to be as thin as possible so as to affect the readings as little as possible. You might get good enough results with a simple plastic bag. How long it would last in your system is anyone's guess without knowing more about your system.