Combine milk, sugar, canela, cardamom, nutmeg, and ginger in a large saucepan. Stir to dissolve sugar.
Place over medium heat and bring to a boil, careful the milk will try to boil over, just remove from the heat for a moment, let it bubble back down, then return to heat and continue to boil gently.
Let cook, untouched, until it reduces to about 2½-3 cups, about 30 minutes.
Meanwhile, whisk egg yolks in a medium bowl until smooth and fill another large bowl halfway with ice and water (in other words, make an ice bath).
Slowly whisk hot milk into egg yolks then place bowl over a small pot of simmering water, making sure the bottom of the bowl doesn’t touch the water. Stir constantly until mixture is slightly thickened and the temperature reaches 175°F, about 5 minutes.
Strain mixture into a clean bowl and place bowl in the ice bath. Let cool, stirring occasionally.
Transfer to a tightly-sealed container and refrigerate until cold.