tldr; Despite being optional in Kubernetes, the Deployment containerPort is required for AKS Virtual Node Deployments.  Barbara Liskov's famed "Liskov Substitution Principle" (LSP) violated once again...

After upgrading an Azure Kubernetes Service (AKS) cluster to version 1.15.5, Virtual Nodes immediately became having networking issues.  After some investigation, I found that Pods on Virtual Nodes were not being assigned Cluster IP addresses.

Internet searches resulted in no apparent solution, so I went back to basics – Hello World.  Microsoft's ACI Hello World deployed and worked properly.  Having a "known good" solution, I compared the Hello World deployment yaml to my deployments and found one key difference: containerPort.  Deployment | spec | template | spec | ports | containerPort is an optional field in Kubernetes, but the Virtual Kubelet adapter requires it – a violation of the Liskov Substitution Principle at the center of SOLID.