Alvaro Vazquez (62nd) and substitute Prasanth Karuthadathkuni (85th) scored second-half goals to hand the yellow shirts their first victory in 11 months. For Odisha, Nikhil Raj -- in for Javi Hernandez -- pulled one back in second-half stoppage time.
Attacking Adrian Luna was brilliant throughout the game and was instrumental in both the goals.
Courtesy the result, Kerala rise to sixth in the points table with five points from four games. Odisha, meanwhile, remain on third having six points from three outings.
Kerala boss Ivan Vukomanovic went for a 4-4-2 formation while Odisha counterpart Kiko Ramirez opted for a 4-2-3-1 formation.
Kerala started on the front foot, Sahal Abdul Samad warming Odisha keeper Kamaljit Singh's gloves early on.
Minutes later, skipper Jessel Carneiro swung in a delightful ball into the box which was cleared for a corner.
Adrian Luna tried his luck from a free kick in the seventh minute, forcing Kamaljit to dive to his left and deny the Uruguayan.
Odisha got their first real chance in the 12th minute when Aridai Cabrera bombed down the left flank and set Javi Hernandez up, but the Spaniard's effort fizzed over the bar.
Kerala continued to have the upper hand as Thoiba Singh was booked for a challenge on Luna. Against the run of play, Javi almost scored with a long-range effort after spotting Albino Gomes standing well outside his line.
Moments after the water break, Vincy Barreto was marginally offside after being through on goal.
For Odisha, who were kept under the cosh by Kerala, full back Hendry Antonay attempted an audacious long-ranger which dipped at the top right corner but Albino was on hand to parry the ball over the bar.
At halftime, both teams were level but the men in yellow bossed proceedings. The second half started in the same vein with Kerala ruling the roost. Sahal looked in great touch from the off, dancing his way past defenders inside the box only to be thwarted, but the ball fell kindly for Luna whose effort went wide of the bar.
Luna was in the thick of things again just after the hour mark, and this time his through ball found Vazquez who timed his run to perfection. The Spaniard ran 30 yards, rounded the keeper and put the ball in the back of the net.
Three minutes after the goal, Kerala replaced Barretto with Nishu Kumar while Odisha threw in Gaurav Bora for Thoiba.
Vazquez could have doubled his and the team's tally in the 67th minute after being set up beautifully by Sahal, but his low effort was blocked by Kamaljit.
Daniel Lalhlimpuia replaced Jerry Mawihmingthanga as Odisha looked for an equaliser. Kerala suffered a setback when Albino went down after taking the goal kick and had to be taken off. India U-23 custodian Prabhsukhan Gill replaced him as Sahal also went off after a stellar show, with Prasanth Karuthadathkuni replacing the national team midfielder.
Midfielder Prasanth's moment to saviour came five minutes to the final whistle when he dinked a perfectly weighed Luna ball past the keeper after a lovely run off the Uruguayan.
Raj scored a late goal for Odisha but it did not matter in the end. (ANI)