Kolkata: Virat Kohli struck a masterly hundred to put Nitish Rana and Andre Russell's magnificent fightback in a shade as Royal Challengers Bangalore (RCB) beat Kolkata Knight Riders by 10 runs in a thrilling Indian Premier League (IPL) clash at the Eden Gardens here on Friday.

In desperate need of a win to keep their slim playoff chances alive, Kohli took 58 balls to bring up his fifth ton of the IPL and first this season with the help of nine fours and four sixes after Moeen Ali gave the much needed oxygen to their innings with a whirlwind 28-ball 66 (4x5, 6x6).

This was Kohli's first hundred since 2016 when he had dragged the team out of a hole with four centuries in a record-shattering performance which yielded 973 runs from 16 matches as RCB finished as runners-up.

Kohli and Ali added 90 runs for the third wicket off just 43 balls as RCB posted 213/4 after being only 70/2 at the halfway stage.

Chasing a stiff 214 for victory, Rana (79 off 45 not out; 9x4, 4x6) and Russell (65 off 25 balls; 2x4; 9x6) stitched together a 118-run partnership off 48 balls to take the match till the last over.

Ali was handed the final over with 24 needed. Rana could manage just one run off the first two balls but brought back Russell to the strike. The West Indies allrounder then smashed a six but was run out in the penultimate ball to end KKR's hopes. Rana hit a six in the last ball but it was too late.

KKR were reduced to 79/4 with comeback man Dale Steyn -- playing for RCB after nine years -- accounting for Chris Lynn (1) and Shubman Gill (9). Navdeep Saini removed Sunil Narine (18) while Robin Uthappa (9) got out to Marcus Stoinis.

Russell, braving a shoulder injury, then kept KKR in the game with Rana also giving him able company as KKR posted 203/5 in 20 overs.

The pair took the likes of Steyn (2/40), Saini 1/31) and Yuzvendra Chahal 0/450 to the cleaners but in the end, fell just short.

The result saw rock-bottom RCB move to four points from nine matches while KKR slumped to their fourth successive defeat to further dent their playoff chances.

Put into bat, Kohli paced his innings to perfection, and got out on the last ball of the innings off Harry Gurney.

The India skipper, facing flak for his captaincy and the team's woeful performance, took 40 balls to reach his first 50 to then change gears and score the next 50 off just 17 deliveries.

The match swung in the 16th over when Kuldeep Yadav bled 27 runs with Ali going berserk, smashing the star India leggie for three sixes and two boundaries. The chinaman ended with figures of 1/59 in four overs. In the last five overs, RCB scored 91 runs to record their highest total of the season.

Brief scores: Royal Challengers Bangalore: 213/4 in 20 overs (Virat Kohli 100; Andre Russell 1/17); Kolkata Knight Riders: 203/5 in 20 overs (Nitish Rana 85 not out; Dale Steyn 2/40)