2020-08-20 17:54:15 +00:00
|
|
|
# Pinniped
|
2020-08-09 17:04:05 +00:00
|
|
|
|
2020-08-26 14:06:21 +00:00
|
|
|
## Overview
|
|
|
|
|
|
|
|
Pinniped provides identity services to Kubernetes.
|
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
Pinniped allows cluster administrators to easily plug in external identity
|
2020-08-26 14:06:21 +00:00
|
|
|
providers (IDPs) into Kubernetes clusters. This is achieved via a uniform
|
|
|
|
install procedure across all types and origins of Kubernetes clusters,
|
|
|
|
declarative configuration via Kubernetes APIs, enterprise-grade integrations
|
2020-08-27 17:14:03 +00:00
|
|
|
with IDPs, and distribution-specific integration strategies.
|
2020-08-26 14:06:21 +00:00
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
### Example Use Cases
|
2020-08-26 14:06:21 +00:00
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
* Your team uses a large enterprise IDP, and has many clusters that they
|
|
|
|
manage. Pinniped provides:
|
|
|
|
* Seamless and robust integration with the IDP
|
|
|
|
* Easy installation across clusters of any type and origin
|
|
|
|
* A simplified login flow across all clusters
|
|
|
|
* Your team shares a single cluster. Pinniped provides:
|
|
|
|
* Simple configuration to integrate an IDP
|
|
|
|
* Individual, revocable identities
|
2020-08-26 14:06:21 +00:00
|
|
|
|
|
|
|
### Architecture
|
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
Pinniped offers credential exchange to enable a user to exchange an external IDP
|
|
|
|
credential for a short-lived, cluster-specific credential. Pinniped supports various
|
|
|
|
IDP types and implements different integration strategies for various Kubernetes
|
|
|
|
distributions to make authentication possible.
|
|
|
|
|
|
|
|
The currently supported external IDP types are outlined here. More will be added in the future.
|
|
|
|
|
|
|
|
1. Any webhook which implements the
|
|
|
|
[Kubernetes TokenReview API](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)
|
|
|
|
|
|
|
|
The currently supported cluster integration strategies are outlined here. More
|
|
|
|
will be added in the future.
|
|
|
|
|
|
|
|
1. Pinniped hosts a credential exchange API via a Kubernetes aggregated API server.
|
|
|
|
This API returns a new cluster-specific credential using the cluster's signing keypair to
|
|
|
|
issue short-lived cluster certificates. (In the future, when the Kubernetes CSR API
|
|
|
|
provides a way to create a short-lived certificate, then the Pinniped credential exchange API
|
|
|
|
will use that instead of using the cluster's signing keypair.)
|
|
|
|
|
|
|
|
With any of the above IDPs and integration strategies, `kubectl` commands receive the
|
|
|
|
cluster-specific credential via a
|
|
|
|
[Kubernetes client-go credential plugin](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins).
|
|
|
|
Users may use the Pinniped CLI as the credential plugin, or they may use any proprietary CLI
|
|
|
|
built with the [Pinniped Go client library](pkg/client).
|
|
|
|
|
|
|
|
#### Cluster Authentication Sequence Diagram
|
2020-08-26 14:06:21 +00:00
|
|
|
|
|
|
|
![implementation](doc/img/pinniped.svg)
|
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
## Installation
|
|
|
|
|
|
|
|
Currently, Pinniped supports self-hosted clusters where the teh Kube Controller Manager pod is accessible to Pinniped.
|
|
|
|
Support for other type of Kubernetes distributions is coming soon.
|
2020-08-26 14:06:21 +00:00
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
To try Pinniped, see [deploy/README.md](deploy/README.md).
|
2020-08-26 14:06:21 +00:00
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
## Contributions
|
2020-08-26 14:06:21 +00:00
|
|
|
|
2020-08-27 17:14:03 +00:00
|
|
|
Contributions are welcome. Before contributing, please see
|
|
|
|
the [Code of Conduct](doc/code-of-conduct.md) and
|
|
|
|
[the contributing guide](doc/contributing.md).
|
2020-08-20 17:54:15 +00:00
|
|
|
|
2020-08-27 12:39:20 +00:00
|
|
|
## License
|
2020-08-20 17:54:15 +00:00
|
|
|
|
2020-08-27 12:39:20 +00:00
|
|
|
Pinniped is open source and licensed under Apache License Version 2.0. See [LICENSE](LICENSE) file.
|
2020-08-20 17:54:15 +00:00
|
|
|
|
|
|
|
Copyright 2020 VMware, Inc.
|