The hosts took an unassailable 2-0 series lead, with the third match to be played on Sunday in Thiruvananthapuram.
Debutant Nuwanidu Fernando stood out for Sri Lanka with his 50 but they lost wickets regularly after electing to bat first.
Siraj struck first as he bowled Avishka Fernando for 20 with an in-swinging delivery that took the inside edge of the bat to crash against middle stump.
Nuwanidu put on 73 runs for the second wicket with Kusal Mendis before Kuldeep, replacing Yuzvendra Chahal as the only change in the team, broke through.
Kuldeep trapped Mendis lbw for 34 with the final delivery of his opening over and two balls later left-arm spinner Axar Patel bowled Dhananjaya de Silva for a duck.
Nuwanidu raised his 50 but was soon run out after his 63-ball knock.
Kuldeep struck twice in two overs, including captain and previous match centurion Dasun Shanaka, bowled for two.
Sri Lanka slipped to 152-7 when tearaway quick Umran Malik cut short Wanindu Hasaranga's breezy knock on 21.
Number eight Dunith Wellalage made 32 and resisted along with the other lower-order batters to take the total past 200 before Siraj struck twice in three balls to wrap up the innings.
In reply, India lost Rohit for 17 off Chamika Karunaratne after a brisk start and fellow opener Shubman Gill, who hit 21 off 12 balls, soon followed his captain three balls later.
Fast bowler Lahiru Kumara bowled Kohli, who scored a match-winning 113 in the opening ODI, for four and the home side were wobbling when Shreyas Iyer departed on 28.
Rahul, who hit just six boundaries in his 103-ball stay, put on 75 with Hardik Pandya to steady the innings in a watchful partnership.
Karunaratne broke through with the wicket of Hardik, for 36, and Axar was dismissed for 21 to increase the tension.
But Rahul stood firm with Kuldeep, 10 not out, for company to steer the team home.