Spaniard Rodriguez attacked from the day's escape group to claim the victory on the race's final day in the Pyrenees. Dane Jakob Fuglsang (Astana) placed second, with Frenchman Romain Bardet (Ag2r) in third.
Despite attempts at attacks from Nairo Quintana (Movistar), Alberto Contador (Tinkoff-Saxo) and Vincenzo Nibali (Astana), the overall contenders remained closely in contact right up until the finish line, with Froome safely retaining the overall race lead.
A large 22-rider escape group formed early on in the stage, which included Rodriguez, world champion Michal Kwiatkowski (Etixx-QuickStep), Romain Bardet (Ag2r), Georg Preidler (Giant-Alpecin), Jakob Fuglsang (Astana) and Sep Vanmarcke (LottoNL-Jumbo).
The group built up a lead of over 10 minutes as Sky led the pace of the peloton behind. Several riders were put into trouble very early on, including British Tour debutant Alex Dowsett (Movistar), who after struggling with injury and fatigue decided to call it a day and abandon the race.
After the 22 riders worked together to tackle the first two categorised climbs of the day - the Col de Portet-d'Aspet and Col de la Core - Kwiatkowski, Preidler and Vanmarcke decided to break free from the escape group as the first category Port de Lers loomed.
Preidler was dropped by Kwiatkowski and Vanmarcke, leaving the two riders to crest the Port de Lers out front. Eight riders - Rodriguez, Bardet, Fuglsang, Romain Sicard (Europcar), Gorka Izagirre (Movistar), Mikel Cherel (Ag2r), Jan Barta (Bora-Argon 18) and Luis Mentjes (MTN-Qhubeka) - started to chase them. Mentjes crashed on the descent, but remounted quickly and managed to catch back up with the chase group.
The lead duo created a gap of nearly two minutes on the chasers as they headed towards the final climb of Plateau de Beille - 15.8km at average of 7.9 per cent. Meanwhile, a huge hailstorm erupted.
Kwiatkowski attacked Vanmarcke with 14km to go as the gradient of the climb ramped up to 10 per cent. Fuglsang, Bardet, Rodriguez and Mentjes accelerated away from the rest of the chase group, quickly passing Vanmarcke in their pursuit of Kwiatkowski.
Rodriguez started to set the pace and close the gap on Kwiatkowski, and dropping Bardet, Mentjes and Fuglsang.
Behind them, Tinkoff-Saxo joined Sky at the front of the remnants of the peloton, which was starting to get whittled down to the main players and their key mountain helpers. Contador was the first to try an attack, but was quickly caught. Then Nibali had a go, and was reeled in as Richie Porte and Geraint Thomas led the chase for Froome.
Inside 5km to go, a flurry of attacks came from the contenders group, with Alejandro Valverde (Movistar), Quintana and Froome all having a dig to see who they could get rid of. Meanwhile, Rodriguez crossed the finish line to take the stage win, soaking wet but with a broad grin on his face.
Back in the contenders' group, the fast pace maintained by Thomas inside the final kilometre appeared to prevent any last-minute attacks, and aside from a small gap opened up by Valverde as he sprinted to the line, the contenders all finished together.
Froome retains his 2-52 lead over Tejay van Garderen (BMC Racing), with Quintana in third at 3-09. Thomas is fifth at 4-03. Nibali re-enters the top 10 in ninth, 7-47 adrift of Froome.
>>> Five talking points from Tour de France stage 12
Peter Sagan (Tinkoff-Saxo) retains the green jersey by a slim two-point lead after André Greipel won the intermediate sprint. Froome also retained the King of the Mountains jersey, which will be worn by Rodriguez on stage 13 as Froome is in yellow.
Tomorrow, the 2015 Tour heads away from the Pyrenees on stage 13, for a comparatively flat stage from Muret to Rodez over 198.5km.
>>> Tour de France 2015 stage 13 full preview
Tour de France 2015, stage 12: Lannemezan to Plateau de Beille, 195km
1. Joaquim Rodriguez (Spa) Katusha
2. Jakob Fuglsang (Den) Astana at 1-12
3. Romain Bardet (Fra) Ag2r at 1-49
4. Gorka Izagirre (Spa) Movistar at 4-34
5. Louis Mentjes (RSA) MTN-Qhubeka at 4-38
6. Jan Barta (Cze) Bora-Argon 18 at 5-47
7. Romain Sicard (Fra) Europcar at 6-03
8. Mikael Cherel (Fra) Ag2r at 6-28
9. Alejandro Valverde (Spa) Movistar at 6-46
10. Chris Froome (GBr) Team Sky at 6-47
11. Nairo Quintana (Col) Movistar
13. Tejay van Garderen (USA) BMC Racing
14. Alberto Contador (Spa) Tinkoff-Saxo
16. Vincenzo Nibali (Ita) Astana
17. Geraint Thomas (GBr) Team Sky all same time
Overall classification after stage 12
1. Chris Froome (GBr) Team Sky
2. Tejay van Garderen (USA) BMC Racing at 2-52
3. Nairo Quintana (Col) Movistar at 3-09
4. Alejandro Valverde (Spa) Movistar at 3-58
5. Geraint Thomas (GBr) Team Sky at 4-03
6. Alberto Contador (Spa) Tinkoff-Saxo at 4-04
7. Robert Gesink (Ned) LottoNL-Jumbo at 5-32
8. Tony Gallopin (Fra) Lotto-Soudal at 7-32
9. Vincenzo Nibali (Ita) Astana at 7-47
10. Bauke Mollema (Ned) Trek Factory Racing at 8-02
Thank you for reading 20 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1