About 2,000 people marched through the city centre, waving flags and singing the Ukrainian national anthem.
They shouted patriotic slogans including “Russians go home” and “Kherson is Ukraine”.
Kherson, a key port on the Black Sea and the Dnieper River, fell to Russian troops earlier this week.
Videos of the protest on social media show Russian troops firing into the air to deter the approaching crowd.
One local resident, Yevhen, told the BBC the protest was a march for freedom and Ukrainian independence.
He added: “We are trying not to go outside because Russian troops are stopping cars, checking what is in the cars. They are even checking phones, searching for evidence of helping the Ukrainian army.”
Elsewhere in the country on the 10th day of the invasion, the Russian defence ministry said its units had opened humanitarian corridors to let civilians leave the cities of Mariupol and Volnovakha, which are under siege by its forces.
However, Ukrainian authorities said Russia was not observing the ceasefire and attacks were continuing, so mass evacuations had been postponed.
Russia later announced that its assault on Mariupol was under way again.
In other developments:
- President Vladimir Putin has said he will not impose martial law in Russia
- He also warned Western countries against imposing a no-fly zone over Ukraine. For his part, Ukrainian President Volodymyr Zelensky has condemned Nato for ruling out the no-fly zone. However, Western leaders say introducing the measure would be an escalation
Russian forces continued to shell Mariupol on Saturday, despite agreeing to a ceasefire just hours earlier, local residents told the BBC.
“I’m right now in Mariupol, I’m on the street, I can hear shelling every three to five minutes,” said Alexander, a 44-year-old engineer.
Mariupol, a port city of about 400,000 people, is a key strategic target for Russia because seizing it would allow Russian-backed separatist forces in eastern Ukraine to join forces with troops in Crimea, the southern peninsula annexed by Russia in 2014.