diff --git a/nodeup/pkg/model/kubecontrollermanager.go b/nodeup/pkg/model/kubecontrollermanager.go index 269b9388c8..6c194e1a3e 100644 --- a/nodeup/pkg/model/kubecontrollermanager.go +++ b/nodeup/pkg/model/kubecontrollermanager.go @@ -112,8 +112,6 @@ func (b *KubeControllerManagerBuilder) buildPod() (*v1.Pod, error) { // Add kubeconfig flag flags += " --kubeconfig=" + "/var/lib/kube-controller-manager/kubeconfig" - // TODO: Set --use-service-account-credentials=true - unclear if we can/should set this without RBAC - redirectCommand := []string{ "/bin/sh", "-c", "/usr/local/bin/kube-controller-manager " + flags + " 1>>/var/log/kube-controller-manager.log 2>&1", } diff --git a/pkg/apis/kops/componentconfig.go b/pkg/apis/kops/componentconfig.go index 228cb00ca4..1c10bc8e68 100644 --- a/pkg/apis/kops/componentconfig.go +++ b/pkg/apis/kops/componentconfig.go @@ -613,6 +613,9 @@ type KubeControllerManagerConfig struct { // before the terminated pod garbage collector starts deleting terminated pods. // If <= 0, the terminated pod garbage collector is disabled. TerminatedPodGCThreshold *int32 `json:"terminatedPodGCThreshold,omitempty" flag:"terminated-pod-gc-threshold"` + + // UseServiceAccountCredentials controls whether we use individual service account credentials for each controller. + UseServiceAccountCredentials *bool `json:"useServiceAccountCredentials,omitempty" flag:"use-service-account-credentials"` } type KubeSchedulerConfig struct { diff --git a/pkg/apis/kops/v1alpha1/componentconfig.go b/pkg/apis/kops/v1alpha1/componentconfig.go index 92ce9b084a..3824505082 100644 --- a/pkg/apis/kops/v1alpha1/componentconfig.go +++ b/pkg/apis/kops/v1alpha1/componentconfig.go @@ -592,6 +592,9 @@ type KubeControllerManagerConfig struct { // before the terminated pod garbage collector starts deleting terminated pods. // If <= 0, the terminated pod garbage collector is disabled. TerminatedPodGCThreshold *int32 `json:"terminatedPodGCThreshold,omitempty" flag:"terminated-pod-gc-threshold"` + + // UseServiceAccountCredentials controls whether we use individual service account credentials for each controller. + UseServiceAccountCredentials *bool `json:"useServiceAccountCredentials,omitempty" flag:"use-service-account-credentials"` } type KubeSchedulerConfig struct { diff --git a/pkg/apis/kops/v1alpha1/zz_generated.conversion.go b/pkg/apis/kops/v1alpha1/zz_generated.conversion.go index cee3c6e6f8..05efd2c0d7 100644 --- a/pkg/apis/kops/v1alpha1/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha1/zz_generated.conversion.go @@ -1161,6 +1161,7 @@ func autoConvert_v1alpha1_KubeControllerManagerConfig_To_kops_KubeControllerMana } out.AttachDetachReconcileSyncPeriod = in.AttachDetachReconcileSyncPeriod out.TerminatedPodGCThreshold = in.TerminatedPodGCThreshold + out.UseServiceAccountCredentials = in.UseServiceAccountCredentials return nil } @@ -1191,6 +1192,7 @@ func autoConvert_kops_KubeControllerManagerConfig_To_v1alpha1_KubeControllerMana } out.AttachDetachReconcileSyncPeriod = in.AttachDetachReconcileSyncPeriod out.TerminatedPodGCThreshold = in.TerminatedPodGCThreshold + out.UseServiceAccountCredentials = in.UseServiceAccountCredentials return nil } diff --git a/pkg/apis/kops/v1alpha2/componentconfig.go b/pkg/apis/kops/v1alpha2/componentconfig.go index b1bd7d6d2d..9561fe164b 100644 --- a/pkg/apis/kops/v1alpha2/componentconfig.go +++ b/pkg/apis/kops/v1alpha2/componentconfig.go @@ -263,6 +263,9 @@ type KubeControllerManagerConfig struct { // before the terminated pod garbage collector starts deleting terminated pods. // If <= 0, the terminated pod garbage collector is disabled. TerminatedPodGCThreshold *int32 `json:"terminatedPodGCThreshold,omitempty" flag:"terminated-pod-gc-threshold"` + + // UseServiceAccountCredentials controls whether we use individual service account credentials for each controller. + UseServiceAccountCredentials *bool `json:"useServiceAccountCredentials,omitempty" flag:"use-service-account-credentials"` } type KubeSchedulerConfig struct { diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index 1d293b0260..c86d778c39 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -1259,6 +1259,7 @@ func autoConvert_v1alpha2_KubeControllerManagerConfig_To_kops_KubeControllerMana } out.AttachDetachReconcileSyncPeriod = in.AttachDetachReconcileSyncPeriod out.TerminatedPodGCThreshold = in.TerminatedPodGCThreshold + out.UseServiceAccountCredentials = in.UseServiceAccountCredentials return nil } @@ -1289,6 +1290,7 @@ func autoConvert_kops_KubeControllerManagerConfig_To_v1alpha2_KubeControllerMana } out.AttachDetachReconcileSyncPeriod = in.AttachDetachReconcileSyncPeriod out.TerminatedPodGCThreshold = in.TerminatedPodGCThreshold + out.UseServiceAccountCredentials = in.UseServiceAccountCredentials return nil } diff --git a/pkg/model/components/kubecontrollermanager.go b/pkg/model/components/kubecontrollermanager.go index 7c3a563796..dcf566b3ea 100644 --- a/pkg/model/components/kubecontrollermanager.go +++ b/pkg/model/components/kubecontrollermanager.go @@ -145,5 +145,11 @@ func (b *KubeControllerManagerOptionsBuilder) BuildOptions(o interface{}) error return fmt.Errorf("no networking mode set") } + if kcm.UseServiceAccountCredentials == nil { + if b.Context.IsKubernetesGTE("1.6") { + kcm.UseServiceAccountCredentials = fi.Bool(true) + } + } + return nil }