Skip to content
Temporal UI on AKS via Application Gateway (AGIC)

Temporal UI on AKS via Application Gateway (AGIC)

Exposes the Temporal Web UI through the Azure Application Gateway Ingress Controller (AGIC).

Prerequisites

  • An AKS cluster with the AGIC add-on enabled (az aks enable-addons --addons ingress-appgw ...) or AGIC installed via Helm.
  • A DNS record pointing temporal.example.com at the Application Gateway public IP.
  • A working persistence backend — combine this with cluster-azure-postgres-flexible.

Apply

kubectl apply -f temporalcluster.yaml

The ingressClassName: azure-application-gateway selects AGIC; the appgw.ingress.kubernetes.io/* annotations tune the Application Gateway backend. Add TLS via an appgw.ingress.kubernetes.io/appgw-ssl-certificate annotation or the UI ingress tlsSecretName field once you have a certificate provisioned.

Manifests

temporalcluster.yaml

# Temporal UI exposed on AKS via the Application Gateway Ingress Controller (AGIC).
# Persistence is shown inline; see cluster-azure-postgres-flexible for the
# Flexible Server setup details (databases, max_connections, TLS).
apiVersion: temporal.bmor10.com/v1alpha1
kind: TemporalCluster
metadata:
  name: azure-ui
spec:
  version: "1.31.1"
  numHistoryShards: 512
  ui:
    enabled: true
    ingress:
      enabled: true
      ingressClassName: azure-application-gateway
      host: temporal.example.com
      annotations:
        appgw.ingress.kubernetes.io/backend-protocol: "http"
        appgw.ingress.kubernetes.io/request-timeout: "300"
  persistence:
    defaultStore:
      sql:
        pluginName: postgres12
        host: REPLACE_ME.postgres.database.azure.com
        port: 5432
        database: temporal
        user: temporaladmin
        passwordSecretRef: { name: temporal-flexible-store, key: password }
        tls: { enabled: true }
    visibilityStore:
      sql:
        pluginName: postgres12
        host: REPLACE_ME.postgres.database.azure.com
        port: 5432
        database: temporal_visibility
        user: temporaladmin
        passwordSecretRef: { name: temporal-flexible-store, key: password }
        tls: { enabled: true }