Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Version 32.0.0 gke-gcloud-auth-plugin configuration break #2334

Copy link
Copy link
Closed
@savvykms

Description

@savvykms
Issue body actions

What happened (please include outputs or screenshots):

Attempting to run a simple test program to merely load configuration breaks with a json.dumps TypeError error when using a configuration file similar to those generated by executing the gcloud container clusters get-credentials <cluster> --region <region> --project <gcp_project> command with the gke-gcloud-auth-plugin authentication helper installed:

$ cat test.py
from kubernetes import client, config
config.load_kube_config()
$ KUBECONFIG=config python test.py
ERROR:root:Object of type ConfigNode is not JSON serializable

What you expected to happen:

Empty output (provided a valid non-example configuration is provided and one has the gcloud auth plugin installed).

How to reproduce it (as minimally and precisely as possible):

Create a test Kubernetes configuration file as follows as a file called config:

apiVersion: v1
kind: Config
preferences: {}
contexts:
- context:
    cluster: test-cluster
    user: test-user
  name: test
clusters:
- cluster:
    certificate-authority-data: bm90X2FfcmVhbF9jZXJ0Cg==
    server: https://w.x.y.z
  name: test-cluster
users:
- name: test-user
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      command: gke-gcloud-auth-plugin
      installHint: Install gke-gcloud-auth-plugin for use with kubectl by following
        https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#install_plugin
      provideClusterInfo: true
current-context: test

Create a test.py script as follows:

from kubernetes import client, config
config.load_kube_config()

Ensure kubernetes 32.0.0 is installed (31.0.0 works for me):

pip install kubernetes==32.0.0

Execute the script, specifying the KUBECONFIG environment variable to override the default location to your test file:

KUBECONFIG=config python test.py

You should receive the following error message from the default logger due to the error being caught and logged without a stacktrace:

ERROR:root:Object of type ConfigNode is not JSON serializable

Anything else we need to know?:

This is likely due to the call here passing in a kubernetes_exec_info structure containing a ConfigNode instance rather than serializable Python native types:
https://github.com/kubernetes-client/python/blob/v32.0.0/kubernetes/base/config/exec_provider.py#L76

I haven't looked extensively into what could have changed between versions, but version 31.0.0 appears to work; FWIW here's the requirements.txt for a more-involved test project where version 31.0.0 appears to function with the test file; swapping kubernetes==32.0.0 in breaks it:

toml==0.10.2
typer==0.15.1
google-cloud-logging==3.11.3
kubernetes==31.0.0

I'm also using pyenv with a virtualenv whereas the gke-gcloud-auth-plugin binary likely uses the system python installation; this shouldn't matter as it's invoked in a subprocess, just as relative versus absolute path in the kube config for it likewise doesn't make a difference. You shouldn't need to even install it to reproduce, as it fails prior to the subprocess call AFAICT; that said, I haven't tried it on a totally 100% clean system without it installed.

Environment:

  • Kubernetes version (kubectl version):
Client Version: v1.31.2
Kustomize Version: v5.4.2
Server Version: v1.31.4-gke.1256000
  • OS:
    Mac OSX 12.6.1

  • Python version (python --version)

Python 3.9.20
  • Python client version (pip list | grep kubernetes)
kubernetes                     32.0.0

Metadata

Metadata

Assignees

Labels

kind/bugCategorizes issue or PR as related to a bug.Categorizes issue or PR as related to a bug.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.