Website settings and status
Administrators use a namespaced Kubernetes Website resource to manage a site.
Its API version is cms.tlspu.com/v1alpha1. The operator maintains site workloads,
services, ingress and storage claims from these settings. Start with the
installation procedure for a complete manifest and
ordered setup steps.
1. Custom Resource
Choose a short metadata.name beginning with a letter. Generated resource names
must fit Kubernetes Service naming limits, including their suffixes. Names
containing dots map to hyphens; avoid two names that produce the same base.
Setting under spec |
Meaning and default |
|---|---|
domain |
Required primary public hostname. |
description |
Optional display name for automatic Ipseity client setup. |
aliases |
Additional public hostnames. A dot-less alias such as www expands beneath the primary domain; an unrelated dotted hostname is absolute. |
cms.enabled |
Set false for a frontend-only site; omit CMS hostname/authentication in that case. |
cms.hostname |
Separate CMS hostname, defaulting to cms.<domain> when enabled. |
cms.authentication.secretRef.name |
Same-namespace Secret containing OAuth2/OIDC settings. An explicit reference takes precedence over automatic Ipseity setup. |
storage.published.size |
Published storage request, default 5Gi. |
storage.published.storageClassName |
RWX storage class; omission uses the cluster default. |
storage.private.size |
Private editable storage request, default 2Gi. |
storage.private.storageClassName |
RWX storage class; omission uses the cluster default. |
publishing.retainReleases |
Number of historical releases to retain after cleanup grace, default 0. |
frontend.replicas |
Public frontend replicas, default 2 when omitted; explicit 0 scales public serving to zero. |
ingress.className |
Ingress controller class for public and CMS routing. |
ingress.tls |
Include TLS configuration on both Ingresses, default true. |
ingress.issuer |
Optional namespaced cert-manager Issuer name. |
ingress.cluster_issuer |
Optional cluster-scoped cert-manager ClusterIssuer name; choose this or issuer. |
For aliases beneath your primary domain, use www for www.example.com rather
than the dotted spelling. Use individual hostnames and avoid duplicates. The
CMS hostname must differ from every public hostname; cms.example.com and
example.com are valid separate origins.
Register DNS records with your DNS provider. Supply TLS certificate Secrets or configure cert-manager and a working issuer. The CMS requires HTTPS for production sign-in and secure cookies, including when TLS terminates outside the Ingress.
Authentication Secret
Follow authentication
for the complete Secret keys and examples. Supply a client ID, the appropriate
provider endpoints, a random session key of at least 32 bytes and any required
client secret. Configure allowedRoles to restrict editing access and
publishRoles for an additional publish/rollback gate. Empty role gates admit
any otherwise authenticated user.
With automatic Ipseity setup, review the provider selection and initial administrator before creating the Website. Websites in a namespace share its Ipseity realm. Without automatic identity, request a CMS with an explicit authentication Secret. For frontend-only sites, supply published content through your own process.
Retention and replicas
Keep one CMS replica with Recreate updates. Scale public frontend replicas with
frontend.replicas. Set publishing.retainReleases to at least 1 if publishers
need rollback history. Retention keeps the active release plus the configured
number of other releases after a short safety grace period. Arrange storage
backups separately for editable-source recovery.
2. Resource naming
For a Website named example, look for these resources in its namespace:
| Resource | Name |
|---|---|
| Frontend Deployment, Service and ServiceAccount | example-frontend |
| Public Ingress / TLS Secret | example-public / example-public-tls |
| CMS Deployment, Service, ServiceAccount and Ingress | example-cms |
| CMS TLS Secret | example-cms-tls |
| CMS status Role and RoleBinding | example-cms-status |
| Published / private PVC | example-published / example-private |
Changing the domain preserves existing resource and volume names. Deleting a Website retains its PVCs; deleting a PVC separately can delete the backing volume according to its reclaim policy. Explicit authentication Secrets remain user-owned. Review Ipseity retention for automatically provisioned identities.
3. Container images
Set the controller image and its --frontend-image and --cms-image arguments
to compatible versions. The controller reconciles the two workload images onto
existing sites as well as new ones. Use immutable image digests or release tags,
and follow the upgrade procedure before changing a
shared controller. The CMS image includes the browser editor.
4. Ports and endpoints
| Component | Default port | Purpose |
|---|---|---|
| Frontend | 8080 | Public website. |
| Frontend | 8081 | Internal health, readiness and metrics. |
| CMS | 8080 | Sign-in, authenticated editor and API. |
| CMS | 8081 | Internal health, readiness and metrics. |
| Controller | 8080 | Internal health, readiness and metrics. |
Keep administrative endpoints within the trusted network. Use
monitoring to inspect /healthz, /readyz and
/metrics. Each HTTP listener identifies itself with
Server: Viking <Component> <version>, including redirects and errors. Preserve
that header through ingress and reverse proxies.
5. Website status
Inspect status with kubectl get website NAME -n NAMESPACE -o yaml.
status.observedGeneration identifies the processed specification generation;
status.currentRelease records the six-digit published release number.
| Condition | Meaning when true |
|---|---|
StorageReady |
Both PVCs are Bound. |
FrontendReady |
The frontend Deployment reports available replicas. |
CMSReady |
The enabled CMS is available, or intentionally unconfigured. |
Published |
Published storage is Bound, frontend is available and a valid current-release ID is recorded. |
Ready |
Storage, frontend, required CMS and publication checks pass. |
A new site normally needs its first publication before overall readiness. Open the CMS and create a homepage before waiting for public readiness. Status updates can follow publication asynchronously; verify the public site too. Conditions describe component checks. Test DNS, certificates and representative pages when handing a site over. Use troubleshooting for condition reasons, authentication failures or stale content.
