<p>I spun a two node cluster in AWS and installed traefik using helm. I see that the service external IP is stuck at pending status. Checked several sources but couldn't find anything to resolve the issue. ANy help is appreciated</p>

<pre><code>helm install stable/traefik



ubuntu@ip-172-31-34-78:~$ kubectl get pods -n default
NAME                                      READY   STATUS    RESTARTS   AGE
unhinged-prawn-traefik-67b67f55f4-tnz5w   1/1     Running   0          18m
ubuntu@ip-172-31-34-78:~$ kubectl get services -n default
NAME                     TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
kubernetes               ClusterIP      10.96.0.1       &lt;none&gt;        443/TCP                      55m
unhinged-prawn-traefik   LoadBalancer   10.102.38.210   &lt;pending&gt;     80:30680/TCP,443:32404/TCP   18m
ubuntu@ip-172-31-34-78:~$ kubectl describe service unhinged-prawn-traefik
Name:                     unhinged-prawn-traefik
Namespace:                default
Labels:                   app=traefik
                          chart=traefik-1.52.6
                          heritage=Tiller
                          release=unhinged-prawn
Annotations:              &lt;none&gt;
Selector:                 app=traefik,release=unhinged-prawn
Type:                     LoadBalancer
IP:                       10.102.38.210
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  30680/TCP
Endpoints:                10.32.0.6:80
Port:                     https  443/TCP
TargetPort:               httpn/TCP
NodePort:                 https  32404/TCP
Endpoints:                10.32.0.6:8880
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   &lt;none&gt;

ubuntu@ip-172-31-34-78:~$ kubectl get svc unhinged-prawn-traefik --namespace default -w
NAME                     TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
unhinged-prawn-traefik   LoadBalancer   10.102.38.210   &lt;pending&gt;     80:30680/TCP,443:32404/TCP   24m
</code></pre>

<p>I'm not sure how you installed your cluster, but basically, the <code>kube-controller-manager/kubelet/kube-apiserver</code> cannot talk to the AWS API to create a load balancer to serve traffic for your <a href="https://kubernetes.io/docs/concepts/services-networking/service/" rel="nofollow noreferrer">Service</a>. </p>

<ul>
<li><p>It could be just as simple as your instance missing the required <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html" rel="nofollow noreferrer">instance profile</a> with the permissions to create a load balancer and routes.</p></li>
<li><p>It could also that you need to add this flag to all your kubelets, your kube-apiserver, and your kube-controller-manager:</p>

<pre><code>--cloud-provider=aws
</code></pre></li>
<li><p>It could also be that you are missing these <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html" rel="nofollow noreferrer">EC2 tags</a> on your instances:</p>

<pre><code>KubernetesCluster=&lt;yourclustername&gt;
kubernetes.io/cluster/kubernetes=owned
k8s.io/role/node=1
</code></pre></li>
</ul>

<p>Note that you might also need the <code>KubernetesCluster=&lt;yourclustername&gt;</code> tag on the subnet where your nodes are on.</p>

<ul>
<li><p>It could also be that your K8s nodes don't have a <code>ProviderID:</code> spec that looks like this:</p>

<pre><code>ProviderID: aws:///&lt;aws-region&gt;/&lt;instance-id&gt;
# You can add it with kubectl edit &lt;node-name&gt;
</code></pre></li>
</ul>

<p>Note that the <code>--cloud-provider</code> flag is being deprecated in favor of the <a href="https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/" rel="nofollow noreferrer">Cloud Providers</a> controller.</p>
