Yusuf Pathan took the game to the last over with his 37-ball 52 but got out in the first ball of the 20th over bowled by Kieron Pollard.
Mumbai Indians then got themselves back in the game with the wickets of Andre Russell and Suryakumar Yadav in quick succession.
Shakib Al Hasan and Yusuf Pathan threatened to take the game away from Mumbai Indians but Shakib departed for 23 to Vinay Kumar.
Mumbai Indians got the breakthrough in the sixth over when Harbhajan Singh removed Uthappa for 25 and one ball later Manish Pandey was run-out for one.
Jagadeesha Suchith then removed the skipper Gautam Gambhir for 38.
Pollard defended 12 runs in the final over as Mumbai Indians kept their play-off hopes alive by restricting KKR to 166 for 7 despite Yusuf Pathan's 37-ball 52
Pandya scored his maiden IPL fifty in just 25 balls and went unbeaten on 61 with Pollard (33*), as MI racked up 72 runs in the last five overs.
In chase of 172, Robin Uthappa and Gautam Gambhir had a promising start scoring 45 runs between them in 5.3 overs.
Kieron Pollard and Hardik Pandya combined for a 50-run stand for the fifth wicket to push MI to a competitive total.
Skipper Rohit Sharma and Kieron Pollard tried to revive MI innings but their 32-run stand was broken by Sunil Narine who cleaned up the skipper for 30.
After putting Mumbai Indians in to bat, Kolkata Knight Riders' bowlers did well to contain the opening pair and Shakib Al Hasan picked up up two wickets inside the first seven overs.
Sandwiched between Shakib's two scalps was the wicket of Lendl Simmons for 14 taken by Morne Morkel.