Skip to content

Commit e993791

Browse files
committed
Add KEP for credential provider extraction
1 parent 296b6d1 commit e993791

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
---
2+
title: Out-of-Tree Credential Providers
3+
authors:
4+
- "@mcrute"
5+
owning-sig: sig-cloud-provider
6+
participating-sigs:
7+
- sig-node
8+
- sig-auth
9+
reviewers:
10+
- "@andrewsykim"
11+
- "@cheftako"
12+
- "@nckturner"
13+
approvers:
14+
- TBD
15+
editor: TBD
16+
creation-date: 2019-10-04
17+
last-updated: 2019-10-16
18+
status: provisional
19+
---
20+
21+
# Out-of-Tree Credential Providers
22+
23+
## Table of Contents
24+
25+
<!-- toc -->
26+
- [Release Signoff Checklist](#release-signoff-checklist)
27+
- [Summary](#summary)
28+
- [Motivation](#motivation)
29+
- [Goals](#goals)
30+
- [Non-Goals](#non-goals)
31+
- [Proposal](#proposal)
32+
- [API Server Proxy](#api-server-proxy)
33+
- [Sidecar Credential Daemon](#sidecar-credential-daemon)
34+
- [External Non-Daemon Executable](#external-non-daemon-executable)
35+
- [Risks and Mitigations](#risks-and-mitigations)
36+
- [Design Details](#design-details)
37+
- [Test Plan](#test-plan)
38+
- [Graduation Criteria](#graduation-criteria)
39+
- [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy)
40+
- [Version Skew Strategy](#version-skew-strategy)
41+
- [Implementation History](#implementation-history)
42+
- [Infrastructure Needed](#infrastructure-needed)
43+
<!-- /toc -->
44+
45+
## Release Signoff Checklist
46+
47+
- [ ] kubernetes/enhancements issue in release milestone, which links to KEP (this should be a link to the KEP location in kubernetes/enhancements, not the initial KEP PR)
48+
- [ ] KEP approvers have set the KEP status to `implementable`
49+
- [ ] Design details are appropriately documented
50+
- [ ] Test plan is in place, giving consideration to SIG Architecture and SIG Testing input
51+
- [ ] Graduation criteria is in place
52+
- [ ] "Implementation History" section is up-to-date for milestone
53+
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
54+
- [ ] Supporting documentation e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
55+
56+
## Summary
57+
58+
Replace the existing in-tree container image registry (registry) credential providers with an external and pluggable credential provider mechanism and remove in-tree credential providers.
59+
60+
## Motivation
61+
62+
kubelet uses cloud provider specific SDKs to obtain credentials when pulling container images from cloud provider specific registries. The use of cloud provider specific SDKs from within the main Kubernetes tree is deprecated by [KEP-0002](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/20180530-cloud-controller-manager.md) and all existing uses need to be migrated out-of-tree. This KEP supports that migration process by removing this SDK usage.
63+
64+
In addition to supporting cloud provider migration this KEP supports allowing users to support multiple container registries across different cloud providers by introducing a pluggable interface to cloud specific credential providers such that a single user could run multiple credential providers for different clouds at the same time. Currently this functionality is gated by having only a single, active cloud provider within the API server and kubelet.
65+
66+
### Goals
67+
68+
* Develop/test/release an API for kubelet to obtain registry credentials from the API server
69+
* Update/test/release the credential acquisition logic within kubelet
70+
* Build user documentation for out-of-tree credential providers
71+
* Migrate existing in-tree credential providers to new credential provider interface
72+
* Remove in-tree credential provider code from kuberentes core
73+
74+
### Non-Goals
75+
76+
* Broad removal of cloud SDK usage, this effort falls under the [KEP for removing in-tree providers](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2019-01-25-removing-in-tree-providers.md).
77+
78+
## Proposal
79+
80+
### API Server Proxy
81+
82+
The API server will act as a proxy to an external container registry credential provider that may support multiple cloud providers. The credential provider service will return container runtime compatible responses of the type currently used by the credential provider infrastructure within the kubelet along with credential expiration information to allow the API server to cache credential responses for a period of time.
83+
84+
This limits the cloud-specific privileges required for each node for the purpose of fetching credentials. Centralized caching helps to avoid cloud-specific rate limits for credential acquisition by consolidating that credential acquisition within the API server.
85+
86+
### Sidecar Credential Daemon
87+
88+
Each node will run a sidecar credential daemon that can obtain cloud-specific container registry credentials and may support multiple cloud providers. This service will be available to the kubelet on the local host and will return container runtime responses compatible with those currently used by the credential provider infrastructure within kubelet. Each daemon will perform its own caching of credentials for the node on which it runs.
89+
90+
This architecture is similar to the approach taken by CSI with node plugins and is a well understood deployment pattern.It limits fleet-wide cacheability of credentials.
91+
92+
### External Non-Daemon Executable
93+
94+
An executable capable of providing container registry credentials will be installed on each node. This binary will be executed by the kubelet to obtain container registry credentials in a format compatible with container runtimes. Credential responses may be cached within the kubelet.
95+
96+
This Architecture is similar to the approach taken by CNI and is a well understood deployment pattern. It limits fleet-wide cacheability of credentials.
97+
98+
### Risks and Mitigations
99+
100+
TODO
101+
102+
## Design Details
103+
104+
### Test Plan
105+
106+
TODO
107+
108+
### Graduation Criteria
109+
110+
TODO
111+
112+
### Upgrade / Downgrade Strategy
113+
114+
TODO
115+
116+
### Version Skew Strategy
117+
118+
TODO
119+
120+
## Implementation History
121+
122+
TODO
123+
124+
## Infrastructure Needed
125+
126+
* New GitHub repos for existing credential providers (AWS, Azure, GCP)

0 commit comments

Comments
 (0)