Documentation ¶
Index ¶
- type Backend
- func (b *Backend) AttachContainer(ctx context.Context, appID string, stdin io.Reader, stdout, stderr io.Writer) error
- func (b *Backend) AvailableDomains() domain.AvailableDomainSlice
- func (b *Backend) AvailablePorts() domain.AvailablePortSlice
- func (b *Backend) Dispose(_ context.Context) error
- func (b *Backend) ExecContainer(ctx context.Context, appID string, cmd []string, stdin io.Reader, ...) error
- func (b *Backend) GetContainer(ctx context.Context, appID string) (*domain.Container, error)
- func (b *Backend) ListContainers(ctx context.Context) ([]*domain.Container, error)
- func (b *Backend) ListenContainerEvents() (sub <-chan *domain.ContainerEvent, unsub func())
- func (b *Backend) Start(_ context.Context) error
- func (b *Backend) Synchronize(ctx context.Context, s *domain.DesiredState) error
- type Config
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Backend ¶ added in v0.18.0
type Backend struct {
// contains filtered or unexported fields
}
func NewK8SBackend ¶
func NewK8SBackend( restConfig *rest.Config, k8sCSet *kubernetes.Clientset, traefikClient *traefikv1alpha1.TraefikV1alpha1Client, certManagerClient *certmanagerv1.Clientset, config Config, ) (*Backend, error)
func (*Backend) AttachContainer ¶ added in v0.18.0
func (*Backend) AvailableDomains ¶ added in v0.18.0
func (b *Backend) AvailableDomains() domain.AvailableDomainSlice
func (*Backend) AvailablePorts ¶ added in v0.18.0
func (b *Backend) AvailablePorts() domain.AvailablePortSlice
func (*Backend) ExecContainer ¶ added in v0.18.0
func (*Backend) GetContainer ¶ added in v0.18.0
func (*Backend) ListContainers ¶ added in v0.18.0
func (*Backend) ListenContainerEvents ¶ added in v0.18.0
func (b *Backend) ListenContainerEvents() (sub <-chan *domain.ContainerEvent, unsub func())
func (*Backend) Synchronize ¶ added in v0.18.0
type Config ¶
type Config struct { // Domains define available domains to be used by user apps. Domains []*domainConf `mapstructure:"domains" yaml:"domains"` // Ports define available port-forward ports to be used by user apps. Ports []*portConf `mapstructure:"ports" yaml:"ports"` // SS defines static-site server endpoint. SS struct { Namespace string `mapstructure:"namespace" yaml:"namespace"` Kind string `mapstructure:"kind" yaml:"kind"` Name string `mapstructure:"name" yaml:"name"` Port int `mapstructure:"port" yaml:"port"` Scheme string `mapstructure:"scheme" yaml:"scheme"` } `mapstructure:"ss" yaml:"ss"` // Routing section defines ingress controller settings. Routing struct { // Type defines which ingress controller to use. // Possible values: // "traefik": Uses traefik ingress controller. Type string `mapstructure:"type" yaml:"type"` Traefik struct { // PriorityOffset defines HTTP routes' priority offset for user apps. // This is optionally used to optimize routing performance. PriorityOffset int `mapstructure:"priorityOffset" yaml:"priorityOffset"` } `mapstructure:"traefik" yaml:"traefik"` } `mapstructure:"routing" yaml:"routing"` // Service section defines Service (L4) routing settings. Service struct { // IPFamilies defines ipFamilies field for the service objects. // Allowed values: IPv4, IPv6 IPFamilies []v1.IPFamily `mapstructure:"ipFamilies" yaml:"ipFamilies"` // IPFamilyPolicy defines ipFamilyPolicy field for the service objects. // Allowed values: "", "SingleStack", "PreferDualStack", "RequireDualStack" IPFamilyPolicy v1.IPFamilyPolicy `mapstructure:"ipFamilyPolicy" yaml:"ipFamilyPolicy"` } `mapstructure:"service" yaml:"service"` // Middleware section defines middleware settings. Middleware struct { // Sablier (https://github.com/acouvreur/sablier) starts user apps on demand and shuts them down after a certain time. Sablier struct { Enable bool `mapstructure:"enable" yaml:"enable"` SablierURL string `mapstructure:"url" yaml:"url"` // SessionDuration defines how long the session should last. // // Example: "10m" SessionDuration string `mapstructure:"sessionDuration" yaml:"sessionDuration"` Dynamic struct { Theme string `mapstructure:"theme" yaml:"theme"` } `mapstructure:"dynamic" yaml:"dynamic"` Blocking struct { // Timeout defines how long the blocking should last. Timeout string `mapstructure:"timeout" yaml:"timeout"` } `mapstructure:"blocking" yaml:"blocking"` } `mapstructure:"sablier" yaml:"sablier"` } // TLS section defines tls setting for user app ingress. TLS struct { // Type defines which provider is responsible for obtaining http certificates. // Possible values: // "traefik: Uses traefik internal Lets Encrypt resolver. // "cert-manager": Delegates to cert-resolver with its own CRD. // // NOTE: If using multiple instances of traefik, the traefik internal Lets Encrypt resolver is not supported. // https://doc.traefik.io/traefik/providers/kubernetes-crd/#letsencrypt-support-with-the-custom-resource-definition-provider Type string `mapstructure:"type" yaml:"type"` // Traefik section defines options for type "traefik". Traefik struct { CertResolver string `mapstructure:"certResolver" yaml:"certResolver"` Wildcard struct { Domains domain.WildcardDomains `mapstructure:"domains" yaml:"domains"` } `mapstructure:"wildcard" yaml:"wildcard"` } `mapstructure:"traefik" yaml:"traefik"` // CertManager section defines options for type "cert-manager". CertManager struct { // Issuer defines cert-manager Issuer object reference to be used with CRD. Issuer struct { Name string `mapstructure:"name" yaml:"name"` Kind string `mapstructure:"kind" yaml:"kind"` } `mapstructure:"issuer" yaml:"issuer"` Wildcard struct { // Domains define for which (wildcard) domains cert-manager supports configuring DNS records. Domains domain.WildcardDomains `mapstructure:"domains" yaml:"domains"` } `mapstructure:"wildcard" yaml:"wildcard"` } `mapstructure:"certManager" yaml:"certManager"` } `mapstructure:"tls" yaml:"tls"` // Namespace defines in which namespace to deploy user apps. Namespace string `mapstructure:"namespace" yaml:"namespace"` // ImagePullSecret defines secret name to pull user app images with. Required if registry is private. ImagePullSecret string `mapstructure:"imagePullSecret" yaml:"imagePullSecret"` // Labels define common labels put to all NeoShowcase-managed Kubernetes objects. Labels []*labelConf `mapstructure:"labels" yaml:"labels"` // Scheduling defines user app pod scheduling constraints. Scheduling struct { NodeSelector []*nodeSelector `mapstructure:"nodeSelector" yaml:"nodeSelector"` Tolerations []*toleration `mapstructure:"tolerations" yaml:"tolerations"` SpreadConstraints []*spreadConstraint `mapstructure:"spreadConstraints" yaml:"spreadConstraints"` ForceHosts []string `mapstructure:"forceHosts" yaml:"forceHosts"` } `mapstructure:"scheduling" yaml:"scheduling"` // Resources define user app pod resource constraints. Resources struct { Requests struct { CPU string `mapstructure:"cpu" yaml:"cpu"` Memory string `mapstructure:"memory" yaml:"memory"` } `mapstructure:"requests" yaml:"requests"` Limits struct { CPU string `mapstructure:"cpu" yaml:"cpu"` Memory string `mapstructure:"memory" yaml:"memory"` } `mapstructure:"limits" yaml:"limits"` } `mapstructure:"resources" yaml:"resources"` }
Click to show internal directories.
Click to hide internal directories.