in pkg/controller/ingress/ingress_controller.go [169:213]
func (r *ReconcileIngress) fetchNetworkingInfo(instance *extensionsv1beta1.Ingress) (*network.Network, error) {
// TODO: We probably want to add some way of specifying which worker nodes we want to use. (security group ingress rules etc...)
r.log.Info("fetching worker nodes")
nodes := corev1.NodeList{
Items: []corev1.Node{},
}
if err := r.Client.List(context.TODO(), &client.ListOptions{
LabelSelector: getNodeSelector(instance),
}, &nodes); err != nil {
return nil, err
}
if len(nodes.Items) == 0 {
return nil, fmt.Errorf("no worker nodes found")
}
nodeInstanceIds := []string{}
for _, node := range nodes.Items {
nodeInstanceIds = append(nodeInstanceIds, node.Spec.ProviderID[strings.LastIndex(node.Spec.ProviderID, "/")+1:])
}
r.log.Info("getting vpcID, securityGroups, subnetIds, asgNames for worker nodes")
vpcIDs, subnetIds, securityGroups, asgNames, err := network.GetNetworkInfoForEC2Instances(r.ec2Svc, r.autoscalingSvc, nodeInstanceIds)
if err != nil {
return nil, err
}
r.log.Info("describing VPCs", zap.String("VPCs", strings.Join(vpcIDs, ",")))
describeVPCResponse, err := r.ec2Svc.DescribeVpcs(&ec2.DescribeVpcsInput{
VpcIds: aws.StringSlice(vpcIDs),
})
if err != nil || len(describeVPCResponse.Vpcs) == 0 {
return nil, fmt.Errorf("unable to find vpc %s", strings.Join(vpcIDs, ", "))
}
return &network.Network{
InstanceIDs: nodeInstanceIds,
SecurityGroupIDs: securityGroups,
SubnetIDs: subnetIds,
ASGNames: asgNames,
Vpc: describeVPCResponse.Vpcs[0],
}, nil
}