api.realIPHeader
is not configured correctly. For more details, see the API section below.api.strings.usage_unknown_category_name
to api.strings.unknown_category_name
to reflect the fact that the string constant may now also be returned in alerts for recently installed apps.api.devices.appleMobileConfig.payloadContentIdentifier
and api.devices.appleMobileConfig.payloadIdentifier
have been removed in favor of api.devices.appleMobileConfig.identifiers.payload
and api.devices.appleMobileConfig.identifiers.dnsSettings
respectively.healthChecks
deployment now uses a dnsPolicy
of Default
by default, where before it was using ClusterFirst
. This is only a breaking change if you were health-checking anything inside the cluster using kubernetes DNS names, regular DNS should work as expected given DNS on the nodes working..mobileconfig
files are now set to apply to the whole system, not just the current user.api.enabled
is true, examine the logs of your API pods and ensure that the request logs show a valid source IP. If api.realIPHeader
is not configured correctly, an IP from one of the private ranges will be shown. If a private IP range is shown, configure api.realIPHeader
to match a header set by your ingress. Requesting the root of the API will dump the headers that the API can see.api.strings.usage_unknown_category_name
in your own values, change this to api.strings.unknown_category_name
.api.devices.appleMobileConfig.payloadContentIdentifier
or api.devices.appleMobileConfig.payloadIdentifier
in your values, change these to api.devices.appleMobileConfig.identifiers.payload
and api.devices.appleMobileConfig.identifiers.dnsSettings
respectively.healthChecks
to health-check DNS names inside the cluster, set healthChecks.dnsPolicy
back to ClusterFirst
in your values.helm repo update safesurfer
to get the latest chart version.api.extraQuotas
field to define arbitrary quotas. This was possible previously, but required replacing the entire api.quotas
object.dns.dot.service.isGCPNEG
to easily provision a Google Cloud Network Endpoint Group for DOT.dns.dns.sidecarContainers.lmdbManager.accountFullRebuildWindow
and dns.dns.sidecarContainers.lmdbManager.domainFullRebuildWindow
to add some randomness around when full rebuilds occur. This helps to reduce database load.api.devices.metadata
object to enable it..mobileconfig
files. These extra settings are off by default, but force browsers to use the DNS provisioned as part of the profile, so provide a better user experience. This can be configured in api.devices.appleMobileConfig.extraSettings
and api.devices.appleMobileConfig.identifiers
. To return these for a given request for a mobileconfig file, you must opt in by setting the enable-extra-settings
parameter.android
role to allow the app to set the app version, retreive its own metadata, and post its location.api.realIPHeader
to be configured correctly to find the user’s source IP, or they will fail and return 500: creating a user, signing in with a username/password, using remote authentication, adding a survey result, getting the user’s source IP, setting the IPv6 address for a device, setting the IPv4 address for a device, and chargebee subscription operations that require the user’s source IP. Source IP is required for estimating or creating a chargebee subscription, or getting a chargebee plan, when the full plan ID is not provided and the user’s source IP is used to determine the real plan or plan price ID.dnsPolicy
and dnsConfig
fields to healthChecks
. Using ClusterFirst
DNS can result in false positive health check failures if the cluster’s DNS setup can’t handle the amount of requests the health checks require. The new default value, Default
, uses the DNS of the nodes, which removes the overhead of matching all DNS names with in-cluster DNS.categorizer.adminApp.realIPHeader
was set, unless the realIPHeader
header was set manually on the request.categorizer.adminApp.authIpWhitelist
and categorizer.adminApp.realIPHeader
were both set and requests were made to the admin app from inside the cluster. Previously, this would crash the requested admin app pod unless the realIPHeader
header was set manually on the request to an allowed value.newDomainNotifierUser.user
may no longer be named Auto-Categorizer
, since this is also the default username for addFromDNS
, which could result in addFromDNS
not working./categories
and /sites
endpoints from the API, as they have not been used in a long time. Only /categories/names
is preserved, as it is still used in the default dashboard and lacks a suitable replacement at this stage.newDomainNotifierUser.user
to Auto-Categorizer
, rename it something else. A suggested replacement is New-Domain-Notifier
.Other than this, no special migration steps are necessary, unless the v1 /categories
or /sites
API endpoints were being used in some way to change blocking settings. However, no available implementation for any platform was using these.
dns.dns.debugging.categoryDomain
, which can be queried to view the current action for a particular category for the requesting device.dns.dns.debugging
can now be set to the empty string to disable them individually.GET /v2/blocking/this-device/categories/{id}/resolved
to get the resolved category model for a single category for the requesting device.GET /v2/blocking/by-category/{id}/plans
to get the blocking plans for a category across the whole account.api.blocking.maxPlanAheadDuration
in values.yaml
to decide the maximum amount of time users can request to see in the future when requesting blocking plans.10m
.dns.dns.sidecarContainers.lmdbManager.resources.domains
and dns.dns.sidecarContainers.lmdbManager.resources.accounts
have been removed in favor of just dns.dns.sidecarContainers.lmdbManager.resources
. Separate resource settings for the lmdb init container have been added under dns.dns.initContainers.initLmdb.resources
.clickhoused
has been updated to support both the UDP and HTTP frontends at the same time. This makes it easier to support DNS servers hosted both within the same cluster and externally.api.alerts.lookaheadMultiplier
in favor of api.alerts.lookaheadMultiplierStart
, api.alerts.lookaheadMultiplierEnd
, and api.alerts.lookaheadMultiplierFactor
. In the old version, there would be occasional timeouts when getting alerts if a large amount of summarizible alerts were found. In the new version, the lookahead increases exponentially according to the parameters above. This reduces resource usage of getting alerts in most cases while reducing the amount of timeouts.GET /categories/{id}/mirror
and DELETE /categories/{id}/mirror
API endpoints have been removed from the admin app. If you’re calling these externally, you’ll need to switch to using the alternatives GET /categories/mirrors
and DELETE /categories/mirrors
instead.dns.dns.sidecarContainers.lmdbManager.resources.domains
or dns.dns.sidecarContainers.lmdbManager.resources.accounts
, you will need to remove and combine (add together) the customized resources and place them directly under dns.dns.sidecarContainers.lmdbManager.resources
instead. For example, instead of:
dns:
dns:
sidecarContainers:
lmdbManager:
resources:
accounts:
requests:
memory: "1000Mi"
cpu: "100m"
limits:
memory: "1000Mi"
cpu: "750m"
domains:
requests:
memory: "2000Mi"
cpu: "200m"
limits:
memory: "2000Mi"
cpu: "500m"
You will now need:
dns:
dns:
sidecarContainers:
lmdbManager:
# Adding the previous resources together:
resources:
requests:
memory: "3000Mi"
cpu: "300m"
limits:
memory: "3000Mi"
cpu: "1250m"
You will also need to update the custom resources for the init container. This is generally the same as the sidecar. For example:
dns:
dns:
initContainers:
initLmdb:
# Same as the above is a good starting point
resources:
requests:
memory: "3000Mi"
cpu: "300m"
limits:
memory: "3000Mi"
cpu: "1250m"
Note that since this is a different implementation, the resource usage characteristics will vary slightly - it’s worth monitoring your new resource settings after deployment. The new version has more configuration options to achieve the desired performance characteristics, which you can see in the new values file.
clickhoused
, you will now need to enable it explicitly rather than just disabling the udp frontend since it now supports both. Instead of:
dns:
clickhoused:
internal:
frontend:
udp:
enabled: false
You will now need:
dns:
clickhoused:
internal:
frontend:
udp:
enabled: false
http:
enabled: true
monitoring.enabled
is true
, you may need to upgrade the grafana/loki/prometheus stack for the built-in grafana dashboards to work after upgrading the Safe Surfer chart. Here is an example (run within the monitoring stack repo), but if you are using custom values, make sure to include them instead:
git pull # Monitoring stack repo has been updated
helm repo update prometheus-community
helm repo update grafana
helm -n monitoring upgrade prometheus prometheus-community/prometheus -f prometheus/values.yaml
helm -n monitoring upgrade loki grafana/loki-stack -f values.yaml
helm -n monitoring upgrade grafana grafana/grafana -f values.yaml
api.alerts.lookaheadMultiplier
in your values, remove it. In most cases you will not need to edit its replacement values api.alerts.lookaheadMultiplierStart
, api.alerts.lookaheadMultiplierEnd
, and api.alerts.lookaheadMultiplierFactor
, but you can optimize by observing latency for GET /v2/alerts
and POST /v2/alerts/with-filter
and increasing the multipliers if necessary.healthChecks
deployment, which is an optional but useful way to generate prometheus metrics for the health of the services you enable in the rest of the chart. The metrics can be viewed in the new grafana dashboard for healthChecks
, or you can use prometheus alerting rules to create alerts for them.api.ingress.tls.secretName
field not working.blockpage.svcAnnotations
annotations to put arbitrary annotations on the block page service. The default makes the block page work on AWS EKS by default.dns.dns.debugging
.maxIdleConns
and maxOpenConns
parameters to most deployments that connect to the database. The defaults are the go defaults used previously.dns.dns.initContainers.iptablesProvisioner
, dns.dns.initContainers.ip6tablesProvisioner
, and dns.dns.initContainers.udpOverIpv6AddressRewrite
.levels
field of restrictions will now live-update rather than requiring a full rebuild.isGlobalWhitelist
, logging
, and excludeFromUsageData
fields of categories will now live-update rather than requiring a full rebuild.dns.dns.localAddress
, dns.dns.initContainers.ip6tablesProvisioner
, and dns.dns.initContainers.udpOverIpv6AddressRewrite
.dns.dns.queryLocalAddress
.dns.dns.sysctls
.dns.dns.logLevel
to 6
..dns.dns.anonymousLogging.allowOptOut
setting, which controls whether user requests will be logged anonymously instead when they opt out of logging. The default is true
, which does not change the current behavior of turning off logging completely when users turn it off.healthCheck.ignoreCert
option to dns.doh
and dns.dot
, which can be useful when deploying behind a load balancer that handles SSL.223
. The router or app integrations can use this to automatically provide more accurate information about why a certain site or app is blocked.customDomain
was not a valid domain, even if the custom domain was not being used, e.g. enabled
was false
. This prevented the reference dashboard from setting this setting back to the default.windows
auth token role.api.accounts.emailOtpRateLimit
, api.accounts.passwordResetRateLimit
, and api.accounts.twofactor.rateLimit
as separate limits to api.accounts.signonRateLimit
with a stricter default config. Before they were shared and it was difficult to find a good compromise between them.api.accounts.signonRateLimit.startDuration
and api.accounts.signonRateLimit.endDuration
, since they did not change the amount of requests that could potentially be spammed, but did make the user experience worse when enabled. The default value was to disable this system.api.accounts.twofactor.attempts
..host
as a reserved TLD, since this is a real TLD. Adding .host
domains previously resulted in an error.enabledForUsersByDefault
, which allows using nxdomain as a blocking response by default while allowing this to be changed by users individually still.ss-config
tool..dns.dnscrypt
..dns.dns.sidecarContainers.healthCheck.customTargets
not working.certSync
object from the values file.