Announcing kube-oidc-gateway v1.0.0: OIDC Discovery Proxy for Secure Kubernetes Clusters
Introduction
We’re excited to announce the launch of kube-oidc-gateway, now available as v1.0.0. Released on January 13, 2026, this lightweight Go application solves a critical challenge for secure Kubernetes deployments: enabling external systems to access OIDC discovery and JWKS endpoints when your cluster is configured with --anonymous-auth=false.
For teams running production Kubernetes clusters that have disabled anonymous authentication for enhanced security, kube-oidc-gateway provides the bridge needed for workload identity federation without compromising your security posture.
What’s New
As an initial release, v1.0.0 introduces the complete core functionality of kube-oidc-gateway:
Core Gateway Capabilities
- OIDC Discovery Proxy: Serves the Kubernetes API server’s OIDC discovery document at
/.well-known/openid-configuration - JWKS Proxy: Provides access to the JSON Web Key Set at
/openid/v1/jwks - In-Cluster Authentication: Uses ServiceAccount tokens automatically mounted in the pod to authenticate with your Kubernetes API server
- TLS Verification: Validates all upstream connections using the cluster’s CA certificate
Caching and Performance
- Configurable TTL Cache: Built-in in-memory caching with a default 60-second time-to-live
- Stale-on-Error Fallback: When upstream fetches fail, the gateway serves cached content instead of returning errors—improving availability during transient API server issues
- ETag Support: SHA-256 ETags enable downstream caching optimization and reduce bandwidth
Production Hardening
Despite being a v1.0.0 release, kube-oidc-gateway ships with production-grade features typically added later:
- HTTP server timeouts to prevent resource exhaustion
- Graceful shutdown with a 30-second drain window for clean Kubernetes rollouts
- Context-aware upstream requests that cancel when clients disconnect
- Response size limiting (10MB) to protect against memory exhaustion
Simple Configuration
Everything is configurable through environment variables with sensible defaults for in-cluster operation:
| Variable | Default | Purpose |
|---|---|---|
LISTEN_PORT |
8080 |
HTTP listen port |
CACHE_TTL_SECONDS |
60 |
Cache time-to-live |
UPSTREAM_TIMEOUT_SECONDS |
5 |
Upstream request timeout |
PRETTY_PRINT_JSON |
true |
JSON formatting option |
Why It Matters
Solves a Real Security Challenge
Many security teams require --anonymous-auth=false on their Kubernetes API servers to prevent unauthenticated access. However, this creates a problem: external systems (like CI/CD pipelines, external identity providers, or federated workload systems) need access to the OIDC discovery and JWKS endpoints for token validation and workload identity federation.
kube-oidc-gateway solves this by running inside your cluster as an authenticated ServiceAccount, fetching these endpoints on behalf of external callers, and presenting them securely.
Built for High Availability
The release includes thoughtful availability features:
- Graceful Shutdown: When Kubernetes terminates a pod during a rollout, the gateway completes in-flight requests before shutting down—no dropped connections
- Stale Cache Fallback: If your API server has a brief hiccup, external systems can still validate tokens using cached JWKS data
- Multiple Replicas: Designed to run with 2+ replicas behind a Service for redundancy
Minimal Security Footprint
Security was a core design principle:
- Minimal RBAC: The ServiceAccount only has permission to read two non-resource URLs—nothing more
- Non-Root Container: Runs as UID 65532 in distroless base images
- No External Dependencies: Pure in-memory caching; no databases or external state stores required
Getting Started
Building Locally
go build -o kube-oidc-gateway .
Docker Build
docker build -t kube-oidc-gateway:latest .
The Docker image uses gcr.io/distroless/base-debian13 as its runtime base, providing a minimal attack surface.
Deployment Considerations
To deploy kube-oidc-gateway in your cluster, you’ll need to create a Kubernetes deployment with:
- ServiceAccount for API server authentication
- ClusterRole and ClusterRoleBinding granting read access to the OIDC endpoints:
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kube-oidc-gateway
rules:
- nonResourceURLs:
- “/openid/v1/jwks”
- ”/.well-known/openid-configuration” verbs: [“get”] ```
- nonResourceURLs:
- Deployment with 2+ replicas for high availability
- ClusterIP Service for internal cluster exposure
Note: Official deployment manifests will be provided in a future release. For now, you can create custom manifests following the pattern above.
Important Security Note
kube-oidc-gateway does not implement its own authentication or authorization. Since it serves public OIDC discovery data, you should control access to the service using Kubernetes NetworkPolicies, Ingress controllers with authentication, or firewall rules as appropriate for your environment.
What’s Next
This v1.0.0 release establishes the foundation for kube-oidc-gateway. Future releases will include:
- Official Kubernetes deployment manifests
- Additional documentation (architecture and operations guides)
- Prometheus metrics endpoint for observability
- Container image publishing to GitHub Container Registry
Try It Out
kube-oidc-gateway is now available on GitHub. Check out the repository for source code, build instructions, and the full feature documentation.
This post was AI-generated using the unsloth/Qwen3.5-122B-A10B-GGUF:Q4_K_M model. It was generated based on the v1.0.0 release of kube-oidc-gateway from https://github.com/UnitVectorY-Labs/kube-oidc-gateway/releases/tag/v1.0.0 (released January 13, 2026). Author: release-storyteller