Azure Kubernetes Service does not currently have a way to automatically assign Public IPs to worker nodes/virtual machines. This project aims to solve this problem by utilizing a custom Kubernetes controller (based on sample-controller) and using Azure SDK for Go. The ID for the new Public IPs is always "ipconfig-" + name of the Node/Virtual Machine. It also assigns a Kubernetes Label to the Node, with name "HasPublicIP" and value "true".
If you have an RBAC enabled cluster, just run:
kubectl create -n kube-system -f https://raw.githubusercontent.com/dgkanatsios/AksNodePublicIPController/master/deploy.yaml
# this gets created into *kube-system* namespace, feel free to change it on the deploy.yaml
else, run:
kubectl create -f https://raw.githubusercontent.com/dgkanatsios/AksNodePublicIPController/master/deploy-no-rbac.yaml
If you're looking for a non-Kubernetes native solution, you should check out the AksNodePublicIP project, it uses Azure Functions and Azure Event Grid technologies.