package admin import ( "fmt" "path" "time" "k8s.io/kubernetes/pkg/util/sets" configapi "github.com/openshift/origin/pkg/cmd/server/api" "github.com/openshift/origin/pkg/cmd/server/bootstrappolicy" ) const ( CAFilePrefix = "ca" CABundlePrefix = "ca-bundle" MasterFilePrefix = "master" ) type ClientCertInfo struct { CertLocation configapi.CertInfo UnqualifiedUser string User string Groups sets.String } func DefaultSignerName() string { return fmt.Sprintf("%s@%d", "openshift-signer", time.Now().Unix()) } func DefaultCABundleFile(certDir string) string { return DefaultCertFilename(certDir, CABundlePrefix) } func DefaultServiceServingCertSignerName() string { return fmt.Sprintf("%s@%d", "openshift-service-serving-signer", time.Now().Unix()) } func DefaultRootCAFile(certDir string) string { return DefaultCertFilename(certDir, CAFilePrefix) } func DefaultKubeletClientCAFile(certDir string) string { return DefaultRootCAFile(certDir) } func DefaultKubeletClientCerts(certDir string) []ClientCertInfo { return []ClientCertInfo{ DefaultMasterKubeletClientCertInfo(certDir), } } func DefaultMasterKubeletClientCertInfo(certDir string) ClientCertInfo { return ClientCertInfo{ CertLocation: configapi.CertInfo{ CertFile: path.Join(certDir, MasterFilePrefix+".kubelet-client.crt"), KeyFile: path.Join(certDir, MasterFilePrefix+".kubelet-client.key"), }, User: bootstrappolicy.MasterKubeletAdminClientUsername, Groups: sets.NewString(bootstrappolicy.NodeAdminsGroup), } } func DefaultEtcdClientCAFile(certDir string) string { return DefaultRootCAFile(certDir) } func DefaultEtcdClientCerts(certDir string) []ClientCertInfo { return []ClientCertInfo{ DefaultMasterEtcdClientCertInfo(certDir), } } func DefaultMasterEtcdClientCertInfo(certDir string) ClientCertInfo { return ClientCertInfo{ CertLocation: configapi.CertInfo{ CertFile: path.Join(certDir, MasterFilePrefix+".etcd-client.crt"), KeyFile: path.Join(certDir, MasterFilePrefix+".etcd-client.key"), }, User: "system:master", } } func DefaultProxyClientCerts(certDir string) []ClientCertInfo { return []ClientCertInfo{ DefaultProxyClientCertInfo(certDir), } } func DefaultProxyClientCertInfo(certDir string) ClientCertInfo { return ClientCertInfo{ CertLocation: configapi.CertInfo{ CertFile: path.Join(certDir, MasterFilePrefix+".proxy-client.crt"), KeyFile: path.Join(certDir, MasterFilePrefix+".proxy-client.key"), }, User: bootstrappolicy.MasterProxyUsername, } } func DefaultAPIClientCAFile(certDir string) string { return DefaultRootCAFile(certDir) } func DefaultAPIClientCerts(certDir string) []ClientCertInfo { return []ClientCertInfo{ DefaultOpenshiftLoopbackClientCertInfo(certDir), DefaultClusterAdminClientCertInfo(certDir), DefaultRouterClientCertInfo(certDir), DefaultRegistryClientCertInfo(certDir), } } func DefaultRouterClientCertInfo(certDir string) ClientCertInfo { return ClientCertInfo{ CertLocation: configapi.CertInfo{ CertFile: DefaultCertFilename(certDir, bootstrappolicy.RouterUnqualifiedUsername), KeyFile: DefaultKeyFilename(certDir, bootstrappolicy.RouterUnqualifiedUsername), }, UnqualifiedUser: bootstrappolicy.RouterUnqualifiedUsername, User: bootstrappolicy.RouterUsername, Groups: sets.NewString(bootstrappolicy.RouterGroup), } } func DefaultRegistryClientCertInfo(certDir string) ClientCertInfo { return ClientCertInfo{ CertLocation: configapi.CertInfo{ CertFile: DefaultCertFilename(certDir, bootstrappolicy.RegistryUnqualifiedUsername), KeyFile: DefaultKeyFilename(certDir, bootstrappolicy.RegistryUnqualifiedUsername), }, UnqualifiedUser: bootstrappolicy.RegistryUnqualifiedUsername, User: bootstrappolicy.RegistryUsername, Groups: sets.NewString(bootstrappolicy.RegistryGroup), } } func DefaultOpenshiftLoopbackClientCertInfo(certDir string) ClientCertInfo { return ClientCertInfo{ CertLocation: configapi.CertInfo{ CertFile: DefaultCertFilename(certDir, bootstrappolicy.MasterUnqualifiedUsername), KeyFile: DefaultKeyFilename(certDir, bootstrappolicy.MasterUnqualifiedUsername), }, UnqualifiedUser: bootstrappolicy.MasterUnqualifiedUsername, User: bootstrappolicy.MasterUsername, Groups: sets.NewString(bootstrappolicy.MastersGroup), } } func DefaultClusterAdminClientCertInfo(certDir string) ClientCertInfo { return ClientCertInfo{ CertLocation: configapi.CertInfo{ CertFile: DefaultCertFilename(certDir, "admin"), KeyFile: DefaultKeyFilename(certDir, "admin"), }, UnqualifiedUser: "admin", User: "system:admin", Groups: sets.NewString(bootstrappolicy.ClusterAdminGroup), } } func DefaultServerCerts(certDir string) []configapi.CertInfo { return []configapi.CertInfo{ DefaultMasterServingCertInfo(certDir), DefaultAssetServingCertInfo(certDir), DefaultEtcdServingCertInfo(certDir), } } func DefaultMasterServingCertInfo(certDir string) configapi.CertInfo { return configapi.CertInfo{ CertFile: path.Join(certDir, MasterFilePrefix+".server.crt"), KeyFile: path.Join(certDir, MasterFilePrefix+".server.key"), } } func DefaultAssetServingCertInfo(certDir string) configapi.CertInfo { // Use master certs for assets also return DefaultMasterServingCertInfo(certDir) } func DefaultEtcdServingCertInfo(certDir string) configapi.CertInfo { return configapi.CertInfo{ CertFile: path.Join(certDir, "etcd.server.crt"), KeyFile: path.Join(certDir, "etcd.server.key"), } } func DefaultServiceAccountPrivateKeyFile(certDir string) string { return path.Join(certDir, "serviceaccounts.private.key") } func DefaultServiceAccountPublicKeyFile(certDir string) string { return path.Join(certDir, "serviceaccounts.public.key") } func DefaultNodeDir(nodeName string) string { return "node-" + nodeName } func DefaultNodeServingCertInfo(nodeDir string) configapi.CertInfo { return configapi.CertInfo{ CertFile: path.Join(nodeDir, "server.crt"), KeyFile: path.Join(nodeDir, "server.key"), } } func DefaultNodeClientCertInfo(nodeDir string) configapi.CertInfo { return configapi.CertInfo{ CertFile: path.Join(nodeDir, "master-client.crt"), KeyFile: path.Join(nodeDir, "master-client.key"), } } func DefaultNodeKubeConfigFile(nodeDir string) string { return path.Join(nodeDir, "node.kubeconfig") } func DefaultServiceSignerCAInfo(certDir string) configapi.CertInfo { caInfo := configapi.CertInfo{} caInfo.CertFile = DefaultCAFilename(certDir, "service-signer") caInfo.KeyFile = DefaultKeyFilename(certDir, "service-signer") return caInfo } func DefaultCAFilename(certDir, prefix string) string { return path.Join(certDir, prefix+".crt") } func DefaultCertFilename(certDir, prefix string) string { return path.Join(certDir, prefix+".crt") } func DefaultKeyFilename(certDir, prefix string) string { return path.Join(certDir, prefix+".key") } func DefaultSerialFilename(certDir, prefix string) string { return path.Join(certDir, prefix+".serial.txt") } func DefaultKubeConfigFilename(certDir, prefix string) string { return path.Join(certDir, prefix+".kubeconfig") }