kubelogin

command module
v0.0.0-...-44a5619 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 22, 2022 License: Apache-2.0 Imports: 3 Imported by: 0

README

kubelogin go Go Report Card

This is a kubectl plugin for Kubernetes OpenID Connect (OIDC) authentication, also known as kubectl oidc-login.

Here is an example of Kubernetes authentication with the Google Identity Platform:

screencast

Kubelogin is designed to run as a client-go credential plugin. When you run kubectl, kubelogin opens the browser and you can log in to the provider. Then kubelogin gets a token from the provider and kubectl access Kubernetes APIs with the token. Take a look at the diagram:

Diagram of the credential plugin

Getting Started

Setup

Install the latest release from Homebrew, Krew, Chocolatey or GitHub Releases.

# Homebrew (macOS and Linux)
brew install int128/kubelogin/kubelogin

# Krew (macOS, Linux, Windows and ARM)
kubectl krew install oidc-login

# Chocolatey (Windows)
choco install kubelogin

If you install via GitHub releases, you need to put the kubelogin binary on your path under the name kubectl-oidc_login so that the kubectl plugin mechanism can find it when you invoke kubectl oidc-login. The other install methods do this for you.

You need to set up the OIDC provider, cluster role binding, Kubernetes API server and kubeconfig. The kubeconfig looks like:

users:
- name: oidc
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      command: kubectl
      args:
      - oidc-login
      - get-token
      - --oidc-issuer-url=ISSUER_URL
      - --oidc-client-id=YOUR_CLIENT_ID
      - --oidc-client-secret=YOUR_CLIENT_SECRET

See setup guide for more.

Run

Run kubectl.

kubectl get pods

Kubectl executes kubelogin before calling the Kubernetes APIs. Kubelogin automatically opens the browser, and you can log in to the provider.

keycloak-login

After authentication, kubelogin returns the credentials to kubectl and kubectl then calls the Kubernetes APIs with these credentials.

% kubectl get pods
Open http://localhost:8000 for authentication
NAME                          READY   STATUS    RESTARTS   AGE
echoserver-86c78fdccd-nzmd5   1/1     Running   0          26d

Kubelogin writes the ID token and refresh token to the token cache file.

If the cached ID token is valid, kubelogin just returns it. If the cached ID token has expired, kubelogin will refresh the token using the refresh token. If the refresh token has expired, kubelogin will perform re-authentication (you will have to login via browser again).

Troubleshoot

You can log out by removing the token cache directory (default ~/.kube/cache/oidc-login). Kubelogin will ask you to login via browser again if the token cache file does not exist i.e., it starts with a clean slate

You can dump claims of an ID token by setup command.

% kubectl oidc-login setup --oidc-issuer-url https://accounts.google.com --oidc-client-id REDACTED --oidc-client-secret REDACTED
...
You got a token with the following claims:

{
  "sub": "********",
  "iss": "https://accounts.google.com",
  "aud": "********",
  ...
}

You can increase the log level by -v1 option.

users:
- name: oidc
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1beta1
      command: kubectl
      args:
      - oidc-login
      - get-token
      - -v1

You can verify kubelogin works with your provider using acceptance test.

Docs

Contributions

This is an open source software licensed under Apache License 2.0. Feel free to open issues and pull requests for improving code and documents.

This software is developed with GoLand licensed for open source development. Special thanks for the support.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
integration_test
httpdriver
Package httpdriver provides a test double of the browser.
Package httpdriver provides a test double of the browser.
oidcserver
Package oidcserver provides a stub of OpenID Connect provider.
Package oidcserver provides a stub of OpenID Connect provider.
oidcserver/handler
Package handler provides a HTTP handler for the OpenID Connect Provider.
Package handler provides a HTTP handler for the OpenID Connect Provider.
oidcserver/http
Package http provides a http server running on localhost for testing.
Package http provides a http server running on localhost for testing.
Package listener provides utility for allocating a net.Listener from address candidates.
Package listener provides utility for allocating a net.Listener from address candidates.
Package oauth2cli provides better user experience on OAuth 2.0 and OpenID Connect (OIDC) on CLI.
Package oauth2cli provides better user experience on OAuth 2.0 and OpenID Connect (OIDC) on CLI.
e2e_test/authserver
Package authserver provides a stub server of the OAuth 2.0 authorization server.
Package authserver provides a stub server of the OAuth 2.0 authorization server.
oauth2params
Package oauth2params provides the generators of parameters such as state and PKCE.
Package oauth2params provides the generators of parameters such as state and PKCE.
pkg
cmd
credentialplugin
Package credentialplugin provides the types for client-go credential plugins.
Package credentialplugin provides the types for client-go credential plugins.
credentialplugin/writer
Package writer provides a writer for a credential plugin.
Package writer provides a writer for a credential plugin.
di
infrastructure/clock
Package clock provides the system clock.
Package clock provides the system clock.
infrastructure/reader
Package reader provides the reader of standard input.
Package reader provides the reader of standard input.
infrastructure/stdio
Package stdio wraps os.Stdin and os.Stdout for testing.
Package stdio wraps os.Stdin and os.Stdout for testing.
jwt
Package jwt provides JWT manipulations.
Package jwt provides JWT manipulations.
oidc/client
Package client provides a client of OpenID Connect.
Package client provides a client of OpenID Connect.
pkce
Package pkce provides generation of the PKCE parameters.
Package pkce provides generation of the PKCE parameters.
tlsclientconfig/loader
Package loader provides loading certificates from files or base64 encoded string.
Package loader provides loading certificates from files or base64 encoded string.
usecases/credentialplugin
Package credentialplugin provides the use-cases for running as a client-go credentials plugin.
Package credentialplugin provides the use-cases for running as a client-go credentials plugin.
usecases/setup
Package setup provides the use case of setting up environment.
Package setup provides the use case of setting up environment.
system_test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL