Skip to content
Switch branches/tags


Failed to load latest commit information.
Latest commit message
Commit time

Kubernetes C# Client

Travis Client Capabilities Client Support Level


Nuget Package

dotnet add package KubernetesClient


You should be able to use a standard KubeConfig file with this library, see the BuildConfigFromConfigFile function below. Most authentication methods are currently supported, but a few are not, see the known-issues.

You should also be able to authenticate with the in-cluster service account using the InClusterConfig function shown below.


There is optional built-in metric generation for prometheus client metrics. The exported metrics are:

  • k8s_dotnet_request_total - Counter of request, broken down by HTTP Method
  • k8s_dotnet_response_code_total - Counter of responses, broken down by HTTP Method and response code
  • k8s_request_latency_seconds - Latency histograms broken down by method, api group, api version and resource kind

There is an example integrating these monitors in the examples/prometheus directory.

Sample Code

Creating the client

// Load from the default kubeconfig on the machine.
var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();

// Load from a specific file:
var config = KubernetesClientConfiguration.BuildConfigFromConfigFile(Environment.GetEnvironmentVariable("KUBECONFIG"));

// Load from in-cluster configuration:
var config = KubernetesClientConfiguration.InClusterConfig()

// Use the config object to create a client.
var client = new Kubernetes(config);

Listing Objects

var namespaces = client.ListNamespace();
foreach (var ns in namespaces.Items) {
    var list = client.ListNamespacedPod(ns.Metadata.Name);
    foreach (var item in list.Items)

Creating and Deleting Objects

var ns = new V1Namespace
    Metadata = new V1ObjectMeta
        Name = "test"

var result = client.CreateNamespace(ns);

var status = client.DeleteNamespace(ns.Metadata.Name, new V1DeleteOptions());


There is extensive example code in the examples directory.

Running the examples

git clone
cd csharp\examples\simple
dotnet run

Known issues

While the preferred way of connecting to a remote cluster from local machine is:

var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();
var client = new Kubernetes(config);

Not all auth providers are supported at moment #91. You can still connect to a cluster by starting the proxy command:

$ kubectl proxy
Starting to serve on

and changing config:

var config = new KubernetesClientConfiguration {  Host = "" };

Notice that this is a workaround and is not recommended for production use.


The project uses XUnit as unit testing framework.

To run the tests:

cd csharp\tests
dotnet restore
dotnet test

Generating the Client Code


You'll need a Linux machine with Docker.

The generated code works on all platforms supported by .NET or .NET Core.

Check out the generator project into some other directory (henceforth $GEN_DIR).

cd $GEN_DIR/..
git clone

Generating code

# Where REPO_DIR points to the root of the csharp repository
cd ${REPO_DIR}/csharp/src/KubernetesClient
${GEN_DIR}/openapi/ generated ../csharp.settings

Version Compatibility

SDK Version Kubernetes Version .NET Targeting
7.0 1.23 netstandard2.1;net5;net6
6.0 1.22 netstandard2.1;net5
5.0 1.21 netstandard2.1;net5
4.0 1.20 netstandard2.0;netstandard2.1
3.0 1.19 netstandard2.0;net452
2.0 1.18 netstandard2.0;net452
1.6 1.16 netstandard1.4;netstandard2.0;net452;
1.4 1.13 netstandard1.4;net451
1.3 1.12 netstandard1.4;net452
  • Starting from 2.0, dotnet sdk versioning adopted
  • Kubernetes Version here means the version sdk models and apis were generated from
  • Kubernetes api server guarantees the compatibility with n-2 version. for exmaple, 1.19 based sdk should work with 1.21 cluster, but no guarantee works with 1.22 cluster. see also


Please see for instructions on how to contribute.


Officially supported dotnet Kubernetes Client library



Code of conduct





No packages published