The Ukrainian military said its air defenses shot down two cruise missiles but two more hit the port, threatening the landmark agreement hammered out July 22 after months of negotiations aimed at relieving a global food crisis.
Odessa is one of three export hubs designated in the food export agreement. Ukrainian officials said grain was being stored in the port at the time of the strike although the food stocks did not appear to have been hit.
Ukrainian President Volodymyr Zelensky claimed the strikes on Odessa showed Moscow could not keep its promises.
"This proves only one thing: no matter what Russia says and promises, it will find ways not to implement it," he said during a meeting with US lawmakers, according to a statement from the presidency.
There was no official comment from Moscow but Turkish Defense Minister Hulusi Akar said Russia denied carrying out the attack.
"The Russians told us that they had absolutely nothing to do with this attack and they were looking into the issue very closely," Akar said in comments to state news agency Anadolu.
UN Secretary-General Antonio Guterres - who presided over the signing ceremony on Friday - "unequivocally" condemned the attack, his deputy spokesman said, and urged all sides stick to the deal.
"These products are desperately needed to address the global food crisis and ease the suffering of millions of people in need around the globe," he said.
The EU's foreign policy chief Josep Borrell directly blamed Russia for the strikes.
"Striking a target crucial for grain export a day after the signature of (the) Istanbul agreements is particularly reprehensible and again demonstrates Russia's total disregard for international law and commitments," he said.
UK Foreign Secretary Liz Truss said the attack was "absolutely appalling" and "completely unwarranted."