mirror of https://github.com/kubernetes/kops.git
Allow additional SGs to be added to API loadbalancer
This commit is contained in:
parent
21fa7f21d4
commit
1dbc6064a5
|
@ -113,6 +113,9 @@ type CreateClusterOptions struct {
|
|||
// Specify API loadbalancer as public or internal
|
||||
APILoadBalancerType string
|
||||
|
||||
// Add precreated additional security groups to the ELB
|
||||
APILoadBalancerSecurityGroups []string
|
||||
|
||||
// Allow custom public master name
|
||||
MasterPublicName string
|
||||
|
||||
|
@ -311,6 +314,8 @@ func NewCmdCreateCluster(f *util.Factory, out io.Writer) *cobra.Command {
|
|||
|
||||
cmd.Flags().StringVar(&options.APILoadBalancerType, "api-loadbalancer-type", options.APILoadBalancerType, "Sets the API loadbalancer type to either 'public' or 'internal'")
|
||||
|
||||
cmd.Flags().StringSliceVar(&options.APILoadBalancerSecurityGroups, "api-loadbalancer-security-groups", options.APILoadBalancerSecurityGroups, "Add precreated additional security groups to the API loadbalancer.")
|
||||
|
||||
// Allow custom public master name
|
||||
cmd.Flags().StringVar(&options.MasterPublicName, "master-public-name", options.MasterPublicName, "Sets the public master public name")
|
||||
|
||||
|
@ -942,6 +947,9 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e
|
|||
}
|
||||
}
|
||||
}
|
||||
if len(c.APILoadBalancerSecurityGroups) > 0 && cluster.Spec.API.LoadBalancer == nil {
|
||||
return fmt.Errorf("unable to add security groups to nonexistent API loadbalancer")
|
||||
}
|
||||
if cluster.Spec.API.LoadBalancer != nil && cluster.Spec.API.LoadBalancer.Type == "" {
|
||||
switch c.APILoadBalancerType {
|
||||
case "", "public":
|
||||
|
@ -951,6 +959,9 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e
|
|||
default:
|
||||
return fmt.Errorf("unknown api-loadbalancer-type: %q", c.APILoadBalancerType)
|
||||
}
|
||||
if len(c.APILoadBalancerSecurityGroups) > 0 {
|
||||
cluster.Spec.API.LoadBalancer.AdditionalSecurityGroups = c.APILoadBalancerSecurityGroups
|
||||
}
|
||||
}
|
||||
|
||||
// Use Strict IAM policy and allow AWS ECR by default when creating a new cluster
|
||||
|
|
|
@ -264,8 +264,9 @@ const (
|
|||
)
|
||||
|
||||
type LoadBalancerAccessSpec struct {
|
||||
Type LoadBalancerType `json:"type,omitempty"`
|
||||
IdleTimeoutSeconds *int64 `json:"idleTimeoutSeconds,omitempty"`
|
||||
Type LoadBalancerType `json:"type,omitempty"`
|
||||
IdleTimeoutSeconds *int64 `json:"idleTimeoutSeconds,omitempty"`
|
||||
AdditionalSecurityGroups []string `json:"additionalSecurityGroups,omitempty"`
|
||||
}
|
||||
|
||||
// KubeDNSConfig defines the kube dns configuration
|
||||
|
|
|
@ -263,8 +263,9 @@ const (
|
|||
)
|
||||
|
||||
type LoadBalancerAccessSpec struct {
|
||||
Type LoadBalancerType `json:"type,omitempty"`
|
||||
IdleTimeoutSeconds *int64 `json:"idleTimeoutSeconds,omitempty"`
|
||||
Type LoadBalancerType `json:"type,omitempty"`
|
||||
IdleTimeoutSeconds *int64 `json:"idleTimeoutSeconds,omitempty"`
|
||||
AdditionalSecurityGroups []string `json:"additionalSecurityGroups,omitempty"`
|
||||
}
|
||||
|
||||
// KubeDNSConfig defines the kube dns configuration
|
||||
|
|
|
@ -2281,6 +2281,7 @@ func Convert_kops_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfigur
|
|||
func autoConvert_v1alpha1_LoadBalancerAccessSpec_To_kops_LoadBalancerAccessSpec(in *LoadBalancerAccessSpec, out *kops.LoadBalancerAccessSpec, s conversion.Scope) error {
|
||||
out.Type = kops.LoadBalancerType(in.Type)
|
||||
out.IdleTimeoutSeconds = in.IdleTimeoutSeconds
|
||||
out.AdditionalSecurityGroups = in.AdditionalSecurityGroups
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -2292,6 +2293,7 @@ func Convert_v1alpha1_LoadBalancerAccessSpec_To_kops_LoadBalancerAccessSpec(in *
|
|||
func autoConvert_kops_LoadBalancerAccessSpec_To_v1alpha1_LoadBalancerAccessSpec(in *kops.LoadBalancerAccessSpec, out *LoadBalancerAccessSpec, s conversion.Scope) error {
|
||||
out.Type = LoadBalancerType(in.Type)
|
||||
out.IdleTimeoutSeconds = in.IdleTimeoutSeconds
|
||||
out.AdditionalSecurityGroups = in.AdditionalSecurityGroups
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -2616,6 +2616,11 @@ func (in *LoadBalancerAccessSpec) DeepCopyInto(out *LoadBalancerAccessSpec) {
|
|||
**out = **in
|
||||
}
|
||||
}
|
||||
if in.AdditionalSecurityGroups != nil {
|
||||
in, out := &in.AdditionalSecurityGroups, &out.AdditionalSecurityGroups
|
||||
*out = make([]string, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -264,8 +264,9 @@ const (
|
|||
)
|
||||
|
||||
type LoadBalancerAccessSpec struct {
|
||||
Type LoadBalancerType `json:"type,omitempty"`
|
||||
IdleTimeoutSeconds *int64 `json:"idleTimeoutSeconds,omitempty"`
|
||||
Type LoadBalancerType `json:"type,omitempty"`
|
||||
IdleTimeoutSeconds *int64 `json:"idleTimeoutSeconds,omitempty"`
|
||||
AdditionalSecurityGroups []string `json:"additionalSecurityGroups,omitempty"`
|
||||
}
|
||||
|
||||
type KubeDNSConfig struct {
|
||||
|
|
|
@ -2543,6 +2543,7 @@ func Convert_kops_LeaderElectionConfiguration_To_v1alpha2_LeaderElectionConfigur
|
|||
func autoConvert_v1alpha2_LoadBalancerAccessSpec_To_kops_LoadBalancerAccessSpec(in *LoadBalancerAccessSpec, out *kops.LoadBalancerAccessSpec, s conversion.Scope) error {
|
||||
out.Type = kops.LoadBalancerType(in.Type)
|
||||
out.IdleTimeoutSeconds = in.IdleTimeoutSeconds
|
||||
out.AdditionalSecurityGroups = in.AdditionalSecurityGroups
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -2554,6 +2555,7 @@ func Convert_v1alpha2_LoadBalancerAccessSpec_To_kops_LoadBalancerAccessSpec(in *
|
|||
func autoConvert_kops_LoadBalancerAccessSpec_To_v1alpha2_LoadBalancerAccessSpec(in *kops.LoadBalancerAccessSpec, out *LoadBalancerAccessSpec, s conversion.Scope) error {
|
||||
out.Type = LoadBalancerType(in.Type)
|
||||
out.IdleTimeoutSeconds = in.IdleTimeoutSeconds
|
||||
out.AdditionalSecurityGroups = in.AdditionalSecurityGroups
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -2742,6 +2742,11 @@ func (in *LoadBalancerAccessSpec) DeepCopyInto(out *LoadBalancerAccessSpec) {
|
|||
**out = **in
|
||||
}
|
||||
}
|
||||
if in.AdditionalSecurityGroups != nil {
|
||||
in, out := &in.AdditionalSecurityGroups, &out.AdditionalSecurityGroups
|
||||
*out = make([]string, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -2977,6 +2977,11 @@ func (in *LoadBalancerAccessSpec) DeepCopyInto(out *LoadBalancerAccessSpec) {
|
|||
**out = **in
|
||||
}
|
||||
}
|
||||
if in.AdditionalSecurityGroups != nil {
|
||||
in, out := &in.AdditionalSecurityGroups, &out.AdditionalSecurityGroups
|
||||
*out = make([]string, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -184,6 +184,21 @@ func (b *APILoadBalancerBuilder) Build(c *fi.ModelBuilderContext) error {
|
|||
}
|
||||
}
|
||||
|
||||
// Add precreated additional security groups to the ELB
|
||||
{
|
||||
for _, id := range b.Cluster.Spec.API.LoadBalancer.AdditionalSecurityGroups {
|
||||
t := &awstasks.SecurityGroup{
|
||||
Name: fi.String(id),
|
||||
ID: fi.String(id),
|
||||
Shared: fi.Bool(true),
|
||||
}
|
||||
if err := c.EnsureTask(t); err != nil {
|
||||
return err
|
||||
}
|
||||
elb.SecurityGroups = append(elb.SecurityGroups, t)
|
||||
}
|
||||
}
|
||||
|
||||
// Allow HTTPS to the master instances from the ELB
|
||||
{
|
||||
t := &awstasks.SecurityGroupRule{
|
||||
|
|
Loading…
Reference in New Issue