// NewConstraint creates a new SCC constraint admission plugin. func NewConstraint(kclient client.Interface) kadmission.Interface { store := cache.NewStore(cache.MetaNamespaceKeyFunc) reflector := cache.NewReflector( &cache.ListWatch{ ListFunc: func() (runtime.Object, error) { return kclient.SecurityContextConstraints().List(labels.Everything(), fields.Everything()) }, WatchFunc: func(resourceVersion string) (watch.Interface, error) { return kclient.SecurityContextConstraints().Watch(labels.Everything(), fields.Everything(), resourceVersion) }, }, &kapi.SecurityContextConstraints{}, store, 0, ) reflector.Run() return &constraint{ Handler: kadmission.NewHandler(kadmission.Create), client: kclient, store: store, } }
// NewConstraint creates a new SCC constraint admission plugin. func NewConstraint(kclient client.Interface) *constraint { store := cache.NewStore(cache.MetaNamespaceKeyFunc) reflector := cache.NewReflector( &cache.ListWatch{ ListFunc: func(options kapi.ListOptions) (runtime.Object, error) { return kclient.SecurityContextConstraints().List(options) }, WatchFunc: func(options kapi.ListOptions) (watch.Interface, error) { return kclient.SecurityContextConstraints().Watch(options) }, }, &kapi.SecurityContextConstraints{}, store, 0, ) return &constraint{ Handler: kadmission.NewHandler(kadmission.Create), client: kclient, store: store, reflector: reflector, } }
// InstallRouter installs a default router on the OpenShift server func (h *Helper) InstallRouter(kubeClient kclient.Interface, f *clientcmd.Factory, configDir, images, hostIP string, portForwarding bool, out io.Writer) error { _, err := kubeClient.Services(DefaultNamespace).Get(SvcRouter) if err == nil { // Router service already exists, nothing to do return nil } if !apierrors.IsNotFound(err) { return errors.NewError("error retrieving router service").WithCause(err).WithDetails(h.OriginLog()) } masterDir := filepath.Join(configDir, "master") // Create service account for router routerSA := &kapi.ServiceAccount{} routerSA.Name = "router" _, err = kubeClient.ServiceAccounts("default").Create(routerSA) if err != nil { return errors.NewError("cannot create router service account").WithCause(err).WithDetails(h.OriginLog()) } // Add router SA to privileged SCC privilegedSCC, err := kubeClient.SecurityContextConstraints().Get("privileged") if err != nil { return errors.NewError("cannot retrieve privileged SCC").WithCause(err).WithDetails(h.OriginLog()) } privilegedSCC.Users = append(privilegedSCC.Users, serviceaccount.MakeUsername("default", "router")) _, err = kubeClient.SecurityContextConstraints().Update(privilegedSCC) if err != nil { return errors.NewError("cannot update privileged SCC").WithCause(err).WithDetails(h.OriginLog()) } // Create router cert cmdOutput := &bytes.Buffer{} createCertOptions := &admin.CreateServerCertOptions{ SignerCertOptions: &admin.SignerCertOptions{ CertFile: filepath.Join(masterDir, "ca.crt"), KeyFile: filepath.Join(masterDir, "ca.key"), SerialFile: filepath.Join(masterDir, "ca.serial.txt"), }, Overwrite: true, Hostnames: []string{fmt.Sprintf("%s.xip.io", hostIP)}, CertFile: filepath.Join(masterDir, "router.crt"), KeyFile: filepath.Join(masterDir, "router.key"), Output: cmdOutput, } _, err = createCertOptions.CreateServerCert() if err != nil { return errors.NewError("cannot create router cert").WithCause(err) } err = catFiles(filepath.Join(masterDir, "router.pem"), filepath.Join(masterDir, "router.crt"), filepath.Join(masterDir, "router.key"), filepath.Join(masterDir, "ca.crt")) if err != nil { return err } imageTemplate := variable.NewDefaultImageTemplate() imageTemplate.Format = images cfg := &router.RouterConfig{ Name: "router", Type: "haproxy-router", ImageTemplate: imageTemplate, Ports: "80:80,443:443", Replicas: 1, Labels: "router=<name>", Credentials: filepath.Join(masterDir, "admin.kubeconfig"), DefaultCertificate: filepath.Join(masterDir, "router.pem"), StatsPort: 1936, StatsUsername: "******", HostNetwork: !portForwarding, HostPorts: true, ServiceAccount: "router", } output := &bytes.Buffer{} cmd := router.NewCmdRouter(f, "", "router", out) cmd.SetOutput(output) err = router.RunCmdRouter(f, cmd, output, cfg, []string{}) glog.V(4).Infof("Router command output:\n%s", output.String()) if err != nil { return errors.NewError("cannot install router").WithCause(err).WithDetails(h.OriginLog()) } return nil }