Skip to main content

Kubernetes / Helm

iCal Filter Proxy can be installed with the published Helm chart:

helm repo add yungwood https://yungwood.github.io/helm-charts/
helm install ical-filter-proxy yungwood/ical-filter-proxy

The source chart lives in the main repository under chart/. Tagged releases publish chart updates to the yungwood/helm-charts repository.

iCal Filter Proxy serves plain HTTP. Use an ingress controller or load balancer for HTTPS when needed. See HTTP Behavior.

Calendar Config

The chart can generate config.yaml from values:

In this chart, config.calendars is written into the generated application config.yaml; other top-level keys configure Kubernetes resources.

values.yaml
config:
enabled: true
calendars:
- name: example
publish_name: "Example Calendar"
public: true
feed_url: "https://example.com/calendar.ics"
filters:
- description: "Remove cancelled events"
remove: true
match:
summary:
prefix: "Canceled: "

Install with the values file:

helm install ical-filter-proxy yungwood/ical-filter-proxy -f values.yaml

Metrics

The chart enables the management listener by default. Health and readiness probes use that listener, and the management service defaults to port 9090.

note

The examples below rely on the default management listener settings.

Enable Prometheus metrics and, if the Prometheus Operator is installed, create a ServiceMonitor:

values.yaml
metrics:
enabled: true
serviceMonitor:
enabled: true
labels:
release: prometheus
interval: 30s
scrapeTimeout: 10s

This exposes /metrics on the management service. The ServiceMonitor also targets the management service.

Runtime Values

The chart maps common runtime settings to application flags:

ValueDescription
app.addressPublic listener address. Defaults to :<service.port>.
management.enabledEnables a separate management listener. Defaults to true.
management.addressManagement listener address. Defaults to :<management.service.port>.
metrics.enabledAdds -metrics and exposes /metrics.
metrics.calendarLabelsAdds -metrics-calendar-labels.

Use env and envFrom to pass application environment variables, including ICAL_FILTER_PROXY_TRUSTED_PROXY_CIDRS or config value substitutions:

values.yaml
env:
- name: ICAL_FILTER_PROXY_TRUSTED_PROXY_CIDRS
value: 10.0.0.0/8
envFrom:
- secretRef:
name: ical-filter-proxy-env

Set revisionHistoryLimit when you need to keep more or fewer old ReplicaSets:

values.yaml
revisionHistoryLimit: 5

Secret-Backed Config Values

Use mounted secret files when upstream feed URLs or tokens should not be stored directly in Helm values.

First create a Secret, or create an equivalent Secret with your usual secret manager:

kubectl create secret generic calendar-secrets \
--from-literal=calendar-token='changeme' \
--from-literal=calendar-feed-url='https://example.com/private.ics'

Then mount that Secret and point the app config at the mounted file paths:

values.yaml
config:
calendars:
- name: private
token_file: /run/secrets/calendar-token
feed_url_file: /run/secrets/calendar-feed-url

volumes:
- name: calendar-secrets
secret:
secretName: calendar-secrets

volumeMounts:
- name: calendar-secrets
mountPath: /run/secrets
readOnly: true
info

The Secret keys are mounted as files, so this example creates:

/run/secrets/calendar-token
/run/secrets/calendar-feed-url

Those paths are read by iCal Filter Proxy at startup.

If you prefer environment variables, see Environment Substitution.

Next Steps