generated from kubernetes/kubernetes-template-project
-
Notifications
You must be signed in to change notification settings - Fork 493
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: [email protected]
- Loading branch information
Showing
10 changed files
with
648 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
# Gateway API Glossary | ||
|
||
### Consumer Route | ||
|
||
A Route bound to a workload's Service by a consumer of a given workload, | ||
refining the specific consumer's use of the workload. | ||
|
||
### Gateway Controller | ||
|
||
A _gateway controller_ is software that runs on a cluster to manage the | ||
infrastructure associated with routing traffic from outside the cluster to | ||
inside the cluster (north/south traffic), analogous to the earlier _ingress | ||
controller_ concept. | ||
|
||
### East/West traffic | ||
|
||
Traffic from workload to workload within a cluster. | ||
|
||
### North/South traffic | ||
|
||
Traffic from outside a cluster to inside a cluster (and vice versa). | ||
|
||
### Producer Route | ||
|
||
A Route bound to a workload's Service by the creator of a given workload, | ||
defining what is acceptable use of the workload. Producer routes must always | ||
be in the same Namespace as their workload's Service. | ||
|
||
### Service mesh | ||
|
||
A _service mesh_ is software that runs on a cluster to manage infrastructure | ||
providing security, reliability, and observability for communications between | ||
workloads (east/west traffic). | ||
|
||
### Service backend | ||
|
||
The part of a Kubernetes Service resource that is a set of endpoints | ||
associated with Pods and their IPs. Some east/west traffic happens by having | ||
workloads direct requests to specific endpoints within a Service backend. | ||
|
||
### Service frontend | ||
|
||
The part of a Kubernetes Service resource that allocates a DNS record and a | ||
cluster IP. East/west traffic often - but not always - works by having | ||
workloads direct requests to a Service frontend. | ||
|
||
### Service routing | ||
|
||
_Service routing_ is sending requests to a specific Service to the service | ||
frontend, allowing the underlying network infrastructure (usually `kube-proxy` | ||
or a [service mesh](#service-mesh)) to choose the specific endpoint to which | ||
the request is routed. | ||
|
||
### Endpoint routing | ||
|
||
_Endpoint routing_ is sending requests to a specific Service directly to one | ||
of the endpoints of the Service backend, bypassing routing decisions which | ||
might be made by the underlying network infrastructure. This is commonly | ||
necessary for advanced routing cases like sticky sessions, where the gateway | ||
will need to guarantee that every request for a specific session goes to the | ||
same endpoint. | ||
|
||
### Workload | ||
|
||
An instance of computation that provides a function within a cluster. A | ||
workload usually comprises a Service, some Pods, and often a Deployment. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# Roles and personas | ||
|
||
## Introduction | ||
|
||
In the original design of Kubernetes, Ingress and Service resources were based | ||
on a usage model in which the developers who create Services and Ingresses | ||
controlled all aspects of defining and exposing their applications to their | ||
users. | ||
|
||
In practice, though, clusters and their infrastructure tend to be shared, | ||
which the original Ingress model doesn't capture very well. A critical factor | ||
is that when infrastructure is shared, not everyone using the infrastructure | ||
has the same concerns, and to be successful, an infrastructure project needs | ||
to address the needs of all the users. | ||
|
||
This raises a fundamental challenge: how do you provide the flexibility needed | ||
by the users of the infrastructure, while also maintaining control by the | ||
owners of the infrastructure? | ||
|
||
The Gateway API defines several distinct roles, each with an associated | ||
_persona_, as a tool for surfacing and discussing the differing needs of | ||
different users in order to balance usability, flexibility, and control. | ||
Design work within the Gateway API is deliberately cast in terms of these | ||
personas. | ||
|
||
Note that, depending on the environment, a single human may end up taking on | ||
multiple roles, as discussed below. | ||
|
||
## Roles and Personas | ||
|
||
The Gateway API defines three roles and personas: | ||
|
||
* <a name="ian">**Ian**</a> (he/him) is an _infrastructure provider_, | ||
responsible for the care and feeding of a set of infrastructure that permits | ||
multiple isolated clusters to serve multiple tenants. He is not beholden to | ||
any single tenant; rather, he worries about all of them collectively. Ian | ||
will often work for a cloud provider (AWS, Azure, GCP, ...) or for a PaaS | ||
provider. | ||
|
||
* <a name="charlie">**Charlie**</a> (they/them) is a _cluster operator_, | ||
responsible for managing clusters to ensure that they meet the needs of | ||
their several users. Charlie will typically be concerned with policies, | ||
network access, application permissions, etc. Again, they are beholden to no | ||
single user of any cluster; rather, they need to make sure that the clusters | ||
serve all users as needed. | ||
|
||
* <a name="ana">**Ana**</a> (she/her) is an _application developer_, | ||
responsible for creating and managing an application running in a cluster. | ||
From the Gateway API's point of view, Ana will need to manage configuration | ||
(e.g. timeouts, request matching/filter) and Service composition (e.g. path | ||
routing to backends). She is in a unique position among the Gateway API | ||
personas, since her focus is on the business needs her application is meant | ||
to serve, _not_ Kubernetes or the Gateway API. In fact, Ana is likely to | ||
view the Gateway API and Kubernetes as pure friction getting in her way to | ||
get things done. | ||
|
||
Depending on the environment, multiple roles can map to the same user: | ||
|
||
- Giving a single user all the above roles replicates the self-service model, | ||
and may actually happen in a small startup running Kubernetes on bare metal. | ||
|
||
- A more typical small startup would use clusters from a cloud provider. In | ||
this situation, Ana and Charlie may be embodied in the same person, with Ian | ||
being an employee (or automated process!) within the cloud provider. | ||
|
||
- In a much larger organization, we would expect each persona above to be | ||
embodied by a distinct person (most likely working in different groups, | ||
perhaps with little direct contact). | ||
|
||
## RBAC | ||
|
||
RBAC (role-based access control) is the standard used for Kubernetes | ||
authorization. This allows users to configure who can perform actions on | ||
resources in specific scopes. We anticipate that each persona will map | ||
approximately to a `Role` in the Kubernetes Role-Based Authentication (RBAC) | ||
system and will define resource model responsibility and separation. | ||
|
||
RBAC is discussed further in the [Security Model] description. | ||
|
||
[Security Model]: /concepts/security-model#rbac |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.