Inter, the last Italian side to win the Champions League in 2010, fell behind to a spectacular strike from Pablo Rosario.
Rosario stunned Inter with the opener after 27 minutes when he unleashed a 25-yard screamer into the top corner.
The velocity and accuracy left Inter goalkeeper Samir Handanovic rooted to the spot as the ball flew past him.
Just moments earlier Inter had their best opportunity. Captain Icardi found Matias Vecino but the Uruguayan midfielder could only half-volley the ball over the top.
PSV goalkeeper Jeroen Zoet then pulled off the best save of the opening period to keep his side in front.
Marcelo Brozovic swung over a corner where Icardi powered a header goalbound and Zoet dived to his left to save on the line.
Handanovic was fortunate to stay on the field when he was only yellow-carded for handling the ball outside of the area.
Angry PSV's mood darkened even further just before the break when Inter levelled.
Zoet could only parry a fierce Kwadwo Asamoah drive before Icardi's follow-up was blocked.
But Belgian midfielder Nainggolan was quickest to the loose ball and buried his shot into the corner.
Icardi then put Inter ahead on the hour mark.
A long punt forward from Danilo D'Ambrosio fell into the path of the Argentine who nudged the ball forward, causing Zoet to collide with a defender and leaving Icardi with a simple tap-in for the lead.
It was Icardi's second goal in two Champions League matches this season after he also scored in the come-from-behind 2-1 win over Tottenham.
Icardi should have had a third when his free header in front of goal was pushed away by Zoet before Handanovic pulled off an even more impressive stop from a spectacular bicycle kick by substitute Donyell Malen.