@@ -6,12 +6,10 @@ import (
6
6
"io"
7
7
"io/ioutil"
8
8
"net"
9
- "net/http"
10
9
"os"
11
10
"path"
12
11
"path/filepath"
13
12
"strings"
14
- "time"
15
13
16
14
"github.com/coreos/go-systemd/daemon"
17
15
"github.com/golang/glog"
@@ -21,7 +19,6 @@ import (
21
19
22
20
kerrors "k8s.io/apimachinery/pkg/api/errors"
23
21
"k8s.io/apimachinery/pkg/util/sets"
24
- "k8s.io/apimachinery/pkg/util/wait"
25
22
utilwait "k8s.io/apimachinery/pkg/util/wait"
26
23
clientgoclientset "k8s.io/client-go/kubernetes"
27
24
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -431,19 +428,34 @@ func (m *Master) Start() error {
431
428
go runEmbeddedScheduler (m .config .MasterClients .OpenShiftLoopbackKubeConfig , m .config .KubernetesMasterConfig .SchedulerConfigFile , m .config .KubernetesMasterConfig .SchedulerArguments )
432
429
433
430
go func () {
434
- kubeControllerConfigBytes , err := configapilatest .WriteYAML (m .config )
431
+ kubeControllerConfigShallowCopy := * m .config
432
+ // this creates using 0700
433
+ kubeControllerConfigDir , err := ioutil .TempDir ("" , "openshift-kube-controller-manager-config-" )
435
434
if err != nil {
436
435
glog .Fatal (err )
437
436
}
438
- // this creates using 0600
439
- kubeControllerConfigFile , err := ioutil .TempFile ("" , "openshift-kube-controler-manager-config.yaml" )
437
+ defer func () {
438
+ os .RemoveAll (kubeControllerConfigDir )
439
+ }()
440
+ if m .config .ControllerConfig .ServiceServingCert .Signer != nil && len (m .config .ControllerConfig .ServiceServingCert .Signer .CertFile ) > 0 {
441
+ caBytes , err := ioutil .ReadFile (m .config .ControllerConfig .ServiceServingCert .Signer .CertFile )
442
+ if err != nil {
443
+ glog .Fatal (err )
444
+ }
445
+ serviceServingCertSignerCAFile := path .Join (kubeControllerConfigDir , "service-signer.crt" )
446
+ if err := ioutil .WriteFile (serviceServingCertSignerCAFile , caBytes , 0644 ); err != nil {
447
+ glog .Fatal (err )
448
+ }
449
+
450
+ // we need to tweak the master config file with a relative ref, but to do that we need to copy it
451
+ kubeControllerConfigShallowCopy .ControllerConfig .ServiceServingCert .Signer = & configapi.CertInfo {CertFile : "service-signer.crt" }
452
+ }
453
+ kubeControllerConfigBytes , err := configapilatest .WriteYAML (& kubeControllerConfigShallowCopy )
440
454
if err != nil {
441
455
glog .Fatal (err )
442
456
}
443
- defer func () {
444
- os .Remove (kubeControllerConfigFile .Name ())
445
- }()
446
- if err := ioutil .WriteFile (kubeControllerConfigFile .Name (), kubeControllerConfigBytes , 0644 ); err != nil {
457
+ masterConfigFile := path .Join (kubeControllerConfigDir , "master-config.yaml" )
458
+ if err := ioutil .WriteFile (masterConfigFile , kubeControllerConfigBytes , 0644 ); err != nil {
447
459
glog .Fatal (err )
448
460
}
449
461
@@ -452,7 +464,7 @@ func (m *Master) Start() error {
452
464
m .config .ServiceAccountConfig .PrivateKeyFile ,
453
465
m .config .ServiceAccountConfig .MasterCA ,
454
466
m .config .KubernetesMasterConfig .PodEvictionTimeout ,
455
- kubeControllerConfigFile . Name () ,
467
+ masterConfigFile ,
456
468
m .config .VolumeConfig .DynamicProvisioningEnabled ,
457
469
)
458
470
}()
@@ -602,40 +614,6 @@ func startControllers(options configapi.MasterConfig, allocationController origi
602
614
return err
603
615
}
604
616
605
- // We need to start the serviceaccount-tokens controller first as it provides token
606
- // generation for other controllers.
607
- startSATokenController := openshiftControllerConfig .ServiceAccountContentControllerInit ()
608
- if enabled , err := startSATokenController (controllerContext ); err != nil {
609
- return fmt .Errorf ("Error starting serviceaccount-token controller: %v" , err )
610
- } else if ! enabled {
611
- glog .Warningf ("Skipping serviceaccount-token controller" )
612
- } else {
613
- glog .Infof ("Started serviceaccount-token controller" )
614
- }
615
-
616
- // The service account controllers require informers in order to create service account tokens
617
- // for other controllers, which means we need to start their informers (which use the privileged
618
- // loopback client) before the other controllers will run.
619
- controllerContext .ExternalKubeInformers .Start (controllerContext .Stop )
620
-
621
- // right now we have controllers which are relying on the ability to make requests before the bootstrap policy is in place
622
- // In 3.7, we will be fixed by the post start hook that prevents readiness unless policy is in place
623
- // for 3.6, just make sure we don't proceed until the garbage collector can hit discovery
624
- // wait for bootstrap permissions to be established. This check isn't perfect, but it ensures that at least the controllers checking discovery can succeed
625
- gcClientset := controllerContext .ClientBuilder .ClientOrDie ("generic-garbage-collector" )
626
- err = wait .PollImmediate (500 * time .Millisecond , 30 * time .Second , func () (bool , error ) {
627
- result := gcClientset .Discovery ().RESTClient ().Get ().AbsPath ("/apis" ).Do ()
628
- var statusCode int
629
- result .StatusCode (& statusCode )
630
- if statusCode >= http .StatusOK && statusCode < http .StatusMultipleChoices {
631
- return true , nil
632
- }
633
- return false , nil
634
- })
635
- if err != nil {
636
- return err
637
- }
638
-
639
617
// the service account passed for the recyclable volume plugins needs to exist. We want to do this via the init function, but its a kube init function
640
618
// for the rebase, create that service account here
641
619
// TODO make this a lot cleaner
0 commit comments