pub struct KubernetesIngressWatcher { /* private fields */ }Expand description
Watches a Kubernetes API server for Ingress resources and maintains a live routing table.
Implementations§
Source§impl KubernetesIngressWatcher
impl KubernetesIngressWatcher
Sourcepub fn new(api_server: impl Into<String>, token: impl Into<String>) -> Self
pub fn new(api_server: impl Into<String>, token: impl Into<String>) -> Self
Create a watcher from explicit values.
api_server should be a plain-HTTP URL such as http://localhost:8001.
The default namespace is "default".
Sourcepub fn from_service_account() -> Result<Self, String>
pub fn from_service_account() -> Result<Self, String>
Configure from the Kubernetes service account files mounted at
/var/run/secrets/kubernetes.io/serviceaccount/ and the
KUBERNETES_SERVICE_HOST/KUBERNETES_SERVICE_PORT environment
variables Kubernetes injects into every pod, connecting to the
in-cluster API server directly over TLS — no kubectl proxy
sidecar needed.
Requires the http-client or http2 feature (both already pull in
rustls); trusts only the cluster’s own CA certificate
(.../ca.crt), not the public root store crate::http_client uses,
since the API server’s certificate is signed by that private CA.
Sourcepub fn from_env() -> Result<Self, String>
pub fn from_env() -> Result<Self, String>
Configure from environment variables RWS_K8S_API_SERVER, RWS_K8S_TOKEN,
and (optionally) RWS_K8S_NAMESPACE.
Returns Err if RWS_K8S_API_SERVER is not set.
Sourcepub fn namespace(self, ns: impl Into<String>) -> Self
pub fn namespace(self, ns: impl Into<String>) -> Self
Override the namespace filter. Use "all" or empty string for all namespaces.
Sourcepub fn ingress_class(self, class: impl Into<String>) -> Self
pub fn ingress_class(self, class: impl Into<String>) -> Self
Restrict watched Ingress objects to those whose
spec.ingressClassName equals class exactly. Unset (the default)
accepts every Ingress cluster- or namespace-wide regardless of
class — fine for a single-controller cluster, but on a
multi-controller cluster (e.g. running alongside nginx-ingress)
leaves this watcher picking up Ingress objects meant for the other
controller too, so set this explicitly in that case.
Sourcepub fn poll_interval_secs(self, secs: u64) -> Self
pub fn poll_interval_secs(self, secs: u64) -> Self
Override the polling interval in seconds (default: 30).
This remains a periodic full resync even when the watch connection (always attempted alongside it — see the module docs) is healthy, the same “trust but verify” pattern real Kubernetes controllers use: the watch stream delivers low-latency updates, and this interval is the safety net against a missed or silently swallowed event.
Sourcepub fn start(&self)
pub fn start(&self)
Spawn background threads that keep the rule table up to date: a
periodic full resync every poll_interval_secs, and (best-effort) a
long-lived watch connection that triggers an immediate resync on any
change instead of waiting for the next interval. Call once at
startup.
Sourcepub fn rules(&self) -> Vec<IngressRule>
pub fn rules(&self) -> Vec<IngressRule>
Return a snapshot of the current rule list.