Vijay was on 76 and Pujara on 55 at tea, in an unbroken 122-run stand for the second wicket, with rain clouds forming overhead after a sunny start to the match.
Earlier, Morne Morkel had struck in the morning session to disrupt India’s momentum.
Shikhar Dhawan seemed determined to put the hosts on the back foot early in the game, giving the tourists a bright start to the deciding match of the two-Test series.
He was removed, however, with Morkel’s first ball after the drinks break when the opener got a thick outside edge to Alviro Petersen in the slips, after facing 49 balls for his 29 runs.
Morkel, who injured his ankle in the first Test at the Wanderers, which ended in a thrilling draw, was cleared to play at Kingsmead but turned out with strapping on both his lower legs.
Dhawan’s dismissal put the brakes on India’s quick run rate, but Vijay and Pujara regained control for the tourists as they frustrated the South African bowling attack.