Kube AuthKit - Kubernetes Authentication Toolkit
A lightweight Python library that provides unified authentication for OpenShift and Kubernetes clusters. This library simplifies authentication by supporting multiple methods through a single, consistent interface.
Features
-
Universal Authentication Support
- Standard Kubernetes KubeConfig (~/.kube/config)
- In-Cluster Service Account (for Pods and Notebooks)
- OIDC (OpenID Connect) with multiple flows
- OpenShift OAuth
-
Auto-Detection: Automatically detects and uses the best authentication method for your environment
-
Multiple OIDC Flows
- Authorization Code Flow with PKCE (for interactive apps)
- Device Code Flow (for CLI tools and headless environments)
- Client Credentials Flow (for service-to-service authentication)
-
Token Management
- Automatic token refresh
- Optional persistent storage via system keyring
- Secure in-memory storage by default
-
Security First
- TLS verification enabled by default
- No sensitive data in logs
- Minimal dependencies
Installation
pip install kube-authkit
For optional keyring support (persistent token storage):
pip install kube-authkit[keyring]
Quick Start
Automatic Authentication (Recommended)
The library automatically detects your environment and chooses the appropriate authentication method:
from kube_authkit import get_k8s_client
from kubernetes import client
# Auto-detect environment and authenticate
api_client = get_k8s_client()
# Use with standard Kubernetes client
v1 = client.CoreV1Api(api_client)
pods = v1.list_pod_for_all_namespaces()
print(f"Found {len(pods.items)} pods")
This works seamlessly whether you're running:
- Locally with ~/.kube/config
- Inside a Kubernetes Pod or OpenShift Notebook (using Service Account)
- With OIDC credentials in environment variables
Explicit OIDC Authentication
For CLI tools or when you need explicit control:
from kube_authkit import get_k8s_client, AuthConfig
config = AuthConfig(
method="oidc",
oidc_issuer="https://keycloak.example.com/auth/realms/myrealm",
client_id="my-cli-tool",
use_device_flow=True # Good for headless/CLI environments
)
# This will print: "Visit https://... and enter code: ABCD-EFGH"
api_client = get_k8s_client(config)
Interactive Browser-Based Authentication
For notebooks or interactive applications:
from kube_authkit import get_k8s_client, AuthConfig
config = AuthConfig(
method="oidc",
oidc_issuer="https://keycloak.example.com/auth/realms/myrealm",
client_id="my-app",
use_device_flow=False # Use Authorization Code Flow (opens browser)
)
# Browser will open for authentication
api_client = get_k8s_client(config)
Persistent Token Storage
Store refresh tokens securely in your system keyring:
from kube_authkit import get_k8s_client, AuthConfig
config = AuthConfig(
method="oidc",
oidc_issuer="https://keycloak.example.com/auth/realms/myrealm",
client_id="my-app",
use_keyring=True # Store tokens in system keyring
)
# First run: Interactive authentication
# Subsequent runs: Uses stored refresh token automatically
api_client = get_k8s_client(config)
Advanced: Customize Client Configuration
For advanced use cases where you need to customize the Kubernetes client configuration before creating the client:
from kube_authkit import get_k8s_config
from kubernetes import client
# Get just the configuration (without creating ApiClient yet)
k8s_config = get_k8s_config()
# Customize configuration as needed
k8s_config.debug = True # Enable debug logging
k8s_config.verify_ssl = False # Disable SSL verification (dev only)
# Create client with customized configuration
api_client = client.ApiClient(k8s_config)
v1 = client.CoreV1Api(api_client)
This is useful when you need:
- Custom debug settings
- SSL/TLS configuration
- Multiple clients with the same authentication but different settings
- To inspect the configuration before using it
Configuration
AuthConfig Options
| Parameter | Type | Default | Description |
|---|---|---|---|
method |
str | "auto" | Authentication method: "auto", "kubeconfig", "incluster", "oidc", "openshift" |
k8s_api_host |
str | None | Kubernetes API server URL (auto-detected if not provided) |
oidc_issuer |
str | None | OIDC issuer URL (required for OIDC) |
client_id |
str | None | OIDC client ID (required for OIDC) |
client_secret |
str | None | OIDC client secret (for confidential clients) |
scopes |
list | ["openid"] | OIDC scopes to request |
use_device_flow |
bool | False | Use Device Code Flow instead of Authorization Code Flow |
use_keyring |
bool | False | Store refresh tokens in system keyring |
ca_cert |
str | None | Path to custom CA certificate bundle |
verify_ssl |
bool | True | Verify SSL certificates (disable only for development) |
Environment Variables
The library respects these environment variables:
KUBECONFIG: Path to kubeconfig fileKUBERNETES_SERVICE_HOST: Auto-detected in-cluster (set by Kubernetes)AUTHKIT_OIDC_ISSUER: OIDC issuer URLAUTHKIT_CLIENT_ID: OIDC client IDAUTHKIT_CLIENT_SECRET: OIDC client secretAUTHKIT_TOKEN: Bearer token for authenticationAUTHKIT_API_HOST: Kubernetes API server URLOPENSHIFT_TOKEN: Legacy OpenShift OAuth token (useAUTHKIT_TOKENinstead)
Architecture
This library uses the Strategy Pattern to provide a unified interface across different authentication methods:
AuthFactory (auto-detection)
├── KubeConfigStrategy (~/.kube/config)
├── InClusterStrategy (Service Account)
├── OIDCStrategy (OpenID Connect)
└── OpenShiftOAuthStrategy (OpenShift OAuth)
Each strategy implements the same interface, making it easy to add new authentication methods in the future.
Security Considerations
- TLS Verification: Enabled by default. Only disable for development/testing.
- Token Storage: In-memory by default. Use keyring for persistence across sessions.
- Logging: No sensitive data (tokens, secrets) is ever logged.
- Dependencies: Minimal dependency footprint to reduce supply chain risk.
Development
Setup Development Environment
# Clone repository
git clone https://github.com/openshift/kube-authkit.git
cd kube-authkit
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install with dev dependencies
pip install -e ".[dev]"
Running Tests
# Run all tests with coverage
pytest
# Run specific test file
pytest tests/test_config.py
# Run with verbose output
pytest -v
# Type checking
mypy src/kube_authkit
# Code formatting
black src/ tests/
ruff check src/ tests/
# Security scanning
bandit -r src/
Examples
See the examples/ directory for complete examples:
auto_auth.py- Simple auto-detectionoidc_device_flow.py- CLI tool with device flowoidc_auth_code.py- Interactive browser-based authnotebook_usage.py- Jupyter notebook exampleexplicit_config.py- All configuration optionscustom_ca.py- Custom CA certificate
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
License
Apache License 2.0 - see LICENSE for details.
Support
- Issues: https://github.com/openshift/kube-authkit/issues
- Documentation: https://github.com/openshift/kube-authkit#readme
Acknowledgments
This library wraps and extends the official Kubernetes Python Client to provide simplified authentication workflows for OpenShift AI and Kubernetes environments.
Metadata
Release files for kube-authkit 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| kube_authkit-0.4.0.tar.gz | 106.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kube_authkit-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 139.0 kB
Release files / kube_authkit-0.4.0.tar.gz
| Download URL | kube_authkit-0.4.0.tar.gz |
|---|---|
| Size | 106.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1df61ac392fca96c8f5ae8c3d6e9918f1e1655d212434b3c3da5f92cc23b660d
|
|
BLAKE2b-256 checksum How to use checksums |
11693890e8934aab209f5b02c11409e906a507005202caea2b40901d44a101de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.
Transparency logRelease files / kube_authkit-0.4.0-py3-none-any.whl
| Download URL | kube_authkit-0.4.0-py3-none-any.whl |
|---|---|
| Size | 32.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3bf5fc6ddc882498040118c907628ea68789f9a947454c241972008be59601a3
|
|
BLAKE2b-256 checksum How to use checksums |
52b145bc0f80d554ec68327a8948698015712d11edd5a8c00f6d1e11bc90234b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.
Transparency logSecurity for kube-authkit 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for kube_authkit-0.4.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.