From 1c1f02fde3a206e002b4957c9a0018b53aac6a13 Mon Sep 17 00:00:00 2001 From: Henrik Schmidt Date: Fri, 7 Apr 2017 16:04:52 +0200 Subject: [PATCH] Specify subnetid and routetableid via cloud provider config --- pkg/cloudprovider/providers/aws/aws.go | 9 ++++-- pkg/cloudprovider/providers/aws/aws_routes.go | 30 ++++++++++++------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/pkg/cloudprovider/providers/aws/aws.go b/pkg/cloudprovider/providers/aws/aws.go index 3e26e355488..151938d6730 100644 --- a/pkg/cloudprovider/providers/aws/aws.go +++ b/pkg/cloudprovider/providers/aws/aws.go @@ -392,6 +392,10 @@ type CloudConfig struct { // on a different aws account, on a different cloud provider or on-premise. // If the flag is set also the KubernetesClusterTag must be provided VPC string + // SubnetID enables using a specific subnet to use for ELB's + SubnetID string + // RouteTableID enables using a specific RouteTable + RouteTableID string // KubernetesClusterTag is the legacy cluster id we'll use to identify our cluster resources KubernetesClusterTag string @@ -817,13 +821,14 @@ func newAWSCloud(config io.Reader, awsServices Services) (*Cloud, error) { deviceAllocators: make(map[types.NodeName]DeviceAllocator), } - if cfg.Global.VPC != "" && (cfg.Global.KubernetesClusterTag != "" || cfg.Global.KubernetesClusterID != "") { + if cfg.Global.VPC != "" && cfg.Global.SubnetID != "" && (cfg.Global.KubernetesClusterTag != "" || cfg.Global.KubernetesClusterID != "") { // When the master is running on a different AWS account, cloud provider or on-premise // build up a dummy instance and use the VPC from the nodes account - glog.Info("Master is configured to run on a AWS account, different cloud provider or on-premise") + glog.Info("Master is configured to run on a different AWS account, different cloud provider or on-premise") awsCloud.selfAWSInstance = &awsInstance{ nodeName: "master-dummy", vpcID: cfg.Global.VPC, + subnetID: cfg.Global.SubnetID, } awsCloud.vpcID = cfg.Global.VPC } else { diff --git a/pkg/cloudprovider/providers/aws/aws_routes.go b/pkg/cloudprovider/providers/aws/aws_routes.go index 4246849e8c4..fffcdf42c12 100644 --- a/pkg/cloudprovider/providers/aws/aws_routes.go +++ b/pkg/cloudprovider/providers/aws/aws_routes.go @@ -29,17 +29,27 @@ func (c *Cloud) findRouteTable(clusterName string) (*ec2.RouteTable, error) { // This should be unnecessary (we already filter on TagNameKubernetesCluster, // and something is broken if cluster name doesn't match, but anyway... // TODO: All clouds should be cluster-aware by default - request := &ec2.DescribeRouteTablesInput{Filters: c.tagging.addFilters(nil)} - - response, err := c.ec2.DescribeRouteTables(request) - if err != nil { - return nil, err - } - var tables []*ec2.RouteTable - for _, table := range response { - if c.tagging.hasClusterTag(table.Tags) { - tables = append(tables, table) + + if c.cfg.Global.RouteTableID != "" { + request := &ec2.DescribeRouteTablesInput{Filters: []*ec2.Filter{newEc2Filter("route-table-id", c.cfg.Global.RouteTableID)}} + response, err := c.ec2.DescribeRouteTables(request) + if err != nil { + return nil, err + } + + tables = response + } else { + request := &ec2.DescribeRouteTablesInput{Filters: c.tagging.addFilters(nil)} + response, err := c.ec2.DescribeRouteTables(request) + if err != nil { + return nil, err + } + + for _, table := range response { + if c.tagging.hasClusterTag(table.Tags) { + tables = append(tables, table) + } } }