The world champion, who won all three titles from the Russian by a controversial points decision in their first bout, is unbeaten in 32 fights.
The American wobbled Kovalev with a right hand in the eighth and finished him off with a series of body shots.
Kovalev said he was hit by a low blow, adding that he wanted another rematch.
"He's a great fighter, not a lot of people are going to beat him," said 33-year-old Ward, who has 16 knockouts from his 32 bouts.
"But when you are facing a great fighter you have to raise your game to the next level.
"I hurt him with a head shot and I just had to get the right shot in to finish him."
Kovalev started strongly before Ward came back into the fight at the Mandalay Bay Hotel.
Referee Tony Weeks then stopped the fight with 31 seconds in the eighth with Kovalev, 34, kneeling down.
"It was a low blow, again another one," said Kovalev.
"We are boxers. I could still continue. Why stop the fight?"
Andre Ward stopped Sergey Kovalev in the eighth round to win their light-heavyweight rematch in Las Vegas and retain his WBO, WBA and IBF belts.