A goal from Kai Havertz just before the break was enough to give the London side a 1-0 in Porto.
It was a nervy start for City who gave away possession repeatedly in the opening exchanges as well as getting caught on the counter-attack several times.
Chelsea then created two guilt-edged chances within the space of four minutes – both fluffed by Timo Werner – and we were fortunate not to fall at least a goal behind.
Whether it was the occasion that was getting to the players or Chelsea’s high press and defensive formation that was the issue was hard to tell – but it wasn’t the usual easy-on-the-eye City style.
It would be our best chance of the game.
Chelsea’s threat on the break finally led to the opening goal when Mason Mount played Kai Havertz clear through the middle and the German rounded the onrushing Ederson before rolling the ball into the empty net.
It was a hammer blow but the warning signs had been there.
As the teams went in at the break, it was the Chelsea fans singing and waving their flags – City needed to rediscover their swagger and had 45 minutes to do it.
City were better after the break without really dominating, but when Rudiger clattered into De Bruyne just before the hour-mark, it was the Belgian who came off far worse, with his eye swelling up immediately.
He left the pitch in tears, utterly devastated.
City just couldn’t penetrate the Chelsea defence or the defensive midfield wall in front of it, with N'Golo Kante outstanding.
And Chelsea were mighty close to doubling that lead as Havertz put Pulisic in on goal but the American dinked his shot inches wide on 73 minutes.
That was enough for Pep who sent on Sergio Aguero for Sterling with 15 minutes left.
City will come again
City will learn from this crushing disappointment.
To reach the Champions League final is a magnificent achievement and one we have waited many years for.
There can only be one winner in these contests and one side has to go home feeling crushed.
But the hoodoo and psychological barriers that may have been there previously for the players will have dissipated – and as frustrating as tonight was, that can also be the fuel that drives the team on again next season.
We will return and we will win this competition.
"The decisions I made, the players did everything, the decision is always to try to win the game.
"I think the game was exceptional being the first time we were here. I know the opponents.
"The way we kept going second half, they made one counter attack with Pulisic, the long balls to Havertz were so strong, the second balls they win and they run, they are a really good team but we competed perfectly.
"It was a tight game, in the second half we deserved to score one goal, we couldn’t do it. Congratulations to Chelsea."
Chelsea: James, Chilwell, Thiago Silva (Christensen 39),, Rüdiger, Azpilicueta, Kanté, Jorginho, Mount (Kovacic 80), Havertz, Werner (Pulisic 66)
Subs: Kepa, Alonso, Caballero, Zouma, Giroud, Hudson-Odoi, Ziyech, Gilmour, Emerson
News about Man City v Chelsea
City 0-1 Chelsea: UCL final highlights
Short highlights from the Champions League final in Porto. Watch more
City 0-1 Chelsea: Full-match replay
Watch the full 90 minutes of City's Champions League final against Chelsea on CITY+ Watch more
Guardiola: The players gave everything
Pep Guardiola couldn’t fault the efforts of the team despite falling at the final hurdle in the Champions League. Read more
Goater and Taylor: ‘Phenomenal’ City have come so far
Shaun Goater and Gareth Taylor say the pain of City’s Champions League Final heartbreak must not quash the achievements of another ‘phenomenal’ and record-breaking campaign for the Club. Read more
Pep Guardiola: We'll be back stronger
Pep Guardiola vowed Manchester City will come back stronger after our Champions League final defeat to Chelsea. Watch more