The way I got my HUD to follow the camera was by putting the HUD elements into a Control with MarginContainer. My UI scene has the following layout:
LevelUI (CanvasLayer - layer is above everything else and has "Follow Viewport" off)
----Label (Label - just to control gap from the edge of the screen)
----TextureRect (TextureRect - spinning coin)
----VBoxContainer (VBoxContainer - so I could adjust the height of the Coin text)
-----CoinLabel(label - which I control via script)
I worked the settings until I had an animated coin that would spin in the upper left corner of the screen with a label to the right of it that would update as coins were collected out of total coins in the level (ie. 1/20 coins).