Royal Challengers, looking for their third win on the trot, put Knight Riders into bat and they scored 150 for seven in 20 overs with Chris Lynn (45) and Jacques Kallis (43) doing the bulk of the scoring.
Royal Challengers were in control throughout the run chase after a flying start provided by Yogesh Takawale (40 off 28 balls). Virat Kohli (31) and Yuvraj Singh (31) then took over and it seemed they would canter to victory.
Sunil Narine (1/17) removed Kohli in the 16th over but needing 29 runs off 25 balls, Royal Challengers were still the favourites.
Even when Yuvraj was dismissed, they needed just 10 off eight balls.
However, it all turned sour for Royal Challengers in the final over. Requiring six off three balls, A.B. de Villiers tried to hoick Vinay Kumar over the deep mid-wicket boundary but after initially slipping, Lynn regained balance and pulled off a match winning catch.
Albie Morkel (6 not out) still had a chance to give his team the victory but failed to bring out the big shots.
Earlier, captain Gautam Gambhir recorded his third consecutive duck as Knight Riders slumped to 10 for two in the second over.
A circumspect Kallis and a marauding Lynn combined brilliantly to take their team to 90 for two in 11.2 overs.
The Knight Riders were once again pegged back, losing three wickets for just 17 runs. Yusuf Pathan’s (0) dismal run continued and the former Royals smasher looked a shadow of his earlier self.
Some lusty blows from Robin Uthappa (22) and Suryakumar Yadav (24 not out) saw Knight Riders reach a fighting total of 150 runs.
Varun Aaron was the pick of RCB bowlers picking up three wickets for just 16 runs.
Kolkata Knight Riders: 150 for seven in 20 overs (Chris Lynn 45, Jacques Kallis 43; Varun Aaron 3-16, Mitchell Starc 2-33)
Royal Challengers Bangalore: 148 for five in 20 overs (Yogesh Takawale 40, Virat Kohli 31; Vinay Kumar 2-26, Sunil Narine 1-17)