The Proteas trail India's first innings total of 334 by 153 runs but have steadied the ship after a mini-collapse saw them lose three wickets for 10 runs.
De Villiers (39) and Kallis (26), who is playing his 166th and final test, will resume after the interval hoping to propel the Proteas to a first innings lead that could be crucial on a turning wicket at Kingsmead.
The home side had started day three well with skipper Graeme Smith (47) and Alviro Peterson (62) adding 21 runs before the former was excellently caught by Shikhar Dhawan running towards the boundary at cover off the bowling of spinner Ravindra Jadeja.
Hashim Amla had a wretched time in the drawn first test in Johannesburg, out twice leaving deliveries that crashed onto his stumps, and he failed with the bat again.
This time he played a shot but the result was the same, the excellent Mohammed Shami getting the ball to move away slightly and clip the off-stump and dismiss him for three.
That brought Kallis to the crease and the Indians gave the veteran all-rounder a guard of honour as he walked to middle, with Australian umpires Steve David and Rod Tucker joining in.
It was excellent sportsmanship from the tourists, whose respect for one of the greats of the game was obvious.
Petersen appeared to have lost his concentration and was out to the very next delivery, gloving the ball to Murali Vijay at slip off the bowling of Jadeja.
Jadeja, who replaced Ravichandran Ashwin in the Indian line-up for the second test, has found moderate turn and good bounce from the pitch and looked dangerous.
There has also been a hint of reverse-swing for the pace bowlers, aided by the abrasive Kingsmead surface, but de Villiers and Kallis played negotiated any movement.