web_fetch download) are fetched by the linked-url-proxy service inside every Ayakaleaf Pro pod. It refuses addresses that are not public, so users cannot read internal services through it. The feature and its settings are described in External URL.
Configuration
30-config.yaml (additions)
What is blocked on Kubernetes
The proxy refuses every address that is not a public unicast address: loopback, link-local (including the cloud metadata address169.254.169.254), the private ranges 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16, the carrier-grade NAT range 100.64.0.0/10, and their IPv6 counterparts. Pod and Service networks in these ranges, which is the default for kubeadm, flannel, Calico and most managed clusters, are therefore blocked without any setting, and so are the in-cluster names such as redis or git-bridge that resolve to them.
Public addresses are allowed. If your nodes or load balancer have public addresses, add them to OVERLEAF_LINKED_URL_BLOCKED_NETWORKS (separated by spaces or commas), so that users cannot fetch the NodePorts or a status page through them.
With OVERLEAF_LINKED_URL_OUTBOUND_PROXY set, host names are resolved by the proxy, so only URLs that contain an IP address are checked: the proxy must block your internal networks itself.
Several replicas
Nothing extra: each pod fetches with its own linked-url-proxy and the same settings.Tested on Kubernetes
On Kubernetes 1.37 with three replicas, flannel’s pod network10.244.0.0/16 and kubeadm’s service network 10.96.0.0/12, the proxy refused downloads from a Service’s ClusterIP, from the in-cluster names redis, garage and overleaf-1.overleaf-hl.overleaf.svc.cluster.local, and from a node’s address, without any OVERLEAF_LINKED_URL_BLOCKED_NETWORKS. Our end-to-end tests also pass for refusing loopback and the cloud metadata address through the Import API, and for the AI assistant reading only the pages that OVERLEAF_LINKED_URL_ALLOWED_RESOURCES allows.
