From d258eca6fdf71feb69f634462141e11a0d21d7e7 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Mon, 29 Sep 2014 11:39:32 -0700 Subject: [PATCH] Add and update docs. --- DESIGN.md | 4 +- docs/labels.md | 2 +- docs/networking.md | 2 +- docs/services.md | 151 +++++++++++ docs/services_detail.png | Bin 0 -> 62820 bytes docs/services_detail.svg | 538 +++++++++++++++++++++++++++++++++++++ docs/services_overview.png | Bin 0 -> 44362 bytes docs/services_overview.svg | 417 ++++++++++++++++++++++++++++ 8 files changed, 1110 insertions(+), 4 deletions(-) create mode 100644 docs/services.md create mode 100644 docs/services_detail.png create mode 100644 docs/services_detail.svg create mode 100644 docs/services_overview.png create mode 100644 docs/services_overview.svg diff --git a/DESIGN.md b/DESIGN.md index b3c081a49bc..1bbd50ff26e 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -96,9 +96,9 @@ There are 4 ways that a container manifest can be provided to the Kubelet: ### Kubernetes Proxy -Each node also runs a simple network proxy. This reflects `services` as defined in the Kubernetes API on each node and can do simple TCP stream forwarding or round robin TCP forwarding across a set of backends. +Each node also runs a simple network proxy. This reflects `services` (see [here](docs/services.md) for more details) as defined in the Kubernetes API on each node and can do simple TCP and UDP stream forwarding (round robin) across a set of backends. -Service endpoints are currently found through [Docker-links-compatible](https://docs.docker.com/userguide/dockerlinks/) environment variables specifying ports opened by the service proxy. Currently the user must select a unique port to expose the service on on the proxy, as well as the container's port to target. +Service endpoints are currently found through environment variables (both [Docker-links-compatible](https://docs.docker.com/userguide/dockerlinks/) and Kubernetes {FOO}_SERVICE_HOST and {FOO}_SERVICE_PORT variables are supported). These variables resolve to ports managed by the service proxy. ## The Kubernetes Control Plane diff --git a/docs/labels.md b/docs/labels.md index 31798835808..e1da0e0af55 100644 --- a/docs/labels.md +++ b/docs/labels.md @@ -40,7 +40,7 @@ key1 exists LIST and WATCH operations may specify label selectors to filter the sets of objects returned using a query parameter: `?labels=key1%3Dvalue1,key2%3Dvalue2,...`. We may extend such filtering to DELETE operations in the future. Kubernetes also currently supports two objects that use label selectors to keep track of their members, `service`s and `replicationController`s: -- `service`: A service is a configuration unit for the proxies that run on every worker node. It is named and points to one or more pods. +- `service`: A [service](services.md) is a configuration unit for the proxies that run on every worker node. It is named and points to one or more pods. - `replicationController`: A [replication controller](replication-controller.md) ensures that a specified number of pod "replicas" are running at any one time. If there are too many, it'll kill some. If there are too few, it'll start more. The set of pods that a `service` targets is defined with a label selector. Similarly, the population of pods that a `replicationController` is monitoring is also defined with a label selector. diff --git a/docs/networking.md b/docs/networking.md index c88b32a3887..37278da82a3 100644 --- a/docs/networking.md +++ b/docs/networking.md @@ -82,7 +82,7 @@ We want to be able to assign IP addresses externally from Docker ([Docker issue In addition to enabling self-registration with 3rd-party discovery mechanisms, we'd like to setup DDNS automatically ([Issue #146](https://github.com/GoogleCloudPlatform/kubernetes/issues/146)). hostname, $HOSTNAME, etc. should return a name for the pod ([Issue #298](https://github.com/GoogleCloudPlatform/kubernetes/issues/298)), and gethostbyname should be able to resolve names of other pods. Probably we need to set up a DNS resolver to do the latter ([Docker issue #2267](https://github.com/dotcloud/docker/issues/2267)), so that we don't need to keep /etc/hosts files up to date dynamically. -Service endpoints are currently found through [Docker-links-compatible](https://docs.docker.com/userguide/dockerlinks/) environment variables specifying ports opened by the service proxy. We don't actually use [the Docker ambassador pattern](https://docs.docker.com/articles/ambassador_pattern_linking/) to link containers because we don't require applications to identify all clients at configuration time. Regardless, we're considering moving away from the current approach to an approach more akin to our approach for individual pods: allocate an IP address per service and automatically register the service in DDNS -- L3 load balancing, essentially. Using a flat service namespace doesn't scale and environment variables don't permit dynamic updates, which complicates service deployment by imposing implicit ordering constraints. +[Service](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/services.md) endpoints are currently found through environment variables. Both [Docker-links-compatible](https://docs.docker.com/userguide/dockerlinks/) variables and kubernetes-specific variables ({NAME}_SERVICE_HOST and {NAME}_SERVICE_BAR) are supported, and resolve to ports opened by the service proxy. We don't actually use [the Docker ambassador pattern](https://docs.docker.com/articles/ambassador_pattern_linking/) to link containers because we don't require applications to identify all clients at configuration time, yet. While services today are managed by the service proxy, this is an implementation detail that applications should not rely on. Clients should instead use the [service portal IP](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/services.md) (which the above environment variables will resolve to). However, a flat service namespace doesn't scale and environment variables don't permit dynamic updates, which complicates service deployment by imposing implicit ordering constraints. We intend to register each service portal IP in DNS, and for that to become the preferred resolution protocol. We'd also like to accommodate other load-balancing solutions (e.g., HAProxy), non-load-balanced services ([Issue #260](https://github.com/GoogleCloudPlatform/kubernetes/issues/260)), and other types of groups (worker pools, etc.). Providing the ability to Watch a label selector applied to pod addresses would enable efficient monitoring of group membership, which could be directly consumed or synced with a discovery mechanism. Event hooks ([Issue #140](https://github.com/GoogleCloudPlatform/kubernetes/issues/140)) for join/leave events would probably make this even easier. diff --git a/docs/services.md b/docs/services.md new file mode 100644 index 00000000000..44281500f3d --- /dev/null +++ b/docs/services.md @@ -0,0 +1,151 @@ +# Services in Kubernetes + +## Overview + +Kubernetes [`Pods`](pods.md) are ephemeral. They can come and go over time, especially when +driven by things like [ReplicationControllers](replication-controller.md). +While each `pod` gets its own IP address, those IP addresses can not be relied +upon to be stable over time. This leads to a problem: if some set of `pods` +(let's call them backends) provides functionality to other `pods` (let's call +them frontends) inside the Kubernetes cluster, how do those frontends find the +backends? + +Enter `services`. + +A Kubernetes `service` is an abstraction which defines a logical set of `pods` and +a policy by which to access them - sometimes called a micro-service. The goal +of `services` is to provide a bridge for non-Kubernetes-native applications to +access backends without the need to write code that is specific to Kubernetes. +A `service` offers clients an IP and port pair which, when accessed, redirects +to the appropriate backends. The set of `pods` targetted is determined by a label +selector. + +As an example, consider an image-process backend which is running with 3 live +replicas. Those replicas are fungible - frontends do not care which backend +they use. While the actual `pods` that comprise the set may change, the +frontend client(s) do not need to know that. The `service` abstraction +enables this decoupling. + +## Defining a service + +A `service` in Kubernetes is a REST object, similar to a `pod`. Like a `pod` a +`service` definitions can be POSTed to the apiserver to create a new instance. +For example, suppose you have a set of `pods` that each expose port 9376 and +carry a label "app=MyApp". + +```json +{ + "id": "myapp", + "selector": { + "app": "MyApp" + }, + "containerPort": 9376, + "protocol": "TCP", + "port": 8765 +} +``` + +This specification will create a new `service` named "myapp" which resolves to +TCP port 9376 on any `pod` with the "app=MyApp" label. To access this +`service`, a client can simply connect to $MYAPP_SERVICE_HOST on port +$MYAPP_SERVICE_PORT. + +## How do they work? + +Each node in a Kubernetes cluster runs a `service proxy`. This application +watches the Kubernetes master for the addition and removal of `service` +objects and `endpoints` (pods that satisfy a service's label selector), and +maintains a mapping of `service` to list of `endpoints`. It opens a port on the +local node for each `service` and forwards traffic to backends (ostensibly +according to a policy, but the only policy supported for now is round-robin). + +When a `pod` is scheduled, the master adds a set of environment variables for +each active `service`. We support both +[Docker-links-compatible](https://docs.docker.com/userguide/dockerlinks/) +variables and simpler {SVCNAME}_SERVICE_HOST and {SVCNAME}_SERVICE_PORT +variables. This does imply an ordering requirement - any `service` that a `pod` +wants to access must be created before the `pod` itself, or else the environment +variables will not be populated. This restriction will be removed once DNS for +`services` is supported. + +A `service`, through its label selector, can resolve to 0 or more `endpoints`. +Over the life of a `services`, the set of `pods` which comprise that +`services` can +grow, shrink, or turn over completely. Clients will only see issues if they are +actively using a backend when that backend is removed from the `services` (and even +then, open connections will persist for some protocols). + +![Services overview diagram](services_overview.png) + +## The gory details + +The previous information should be sufficient for many people who just want to +use `services`. However, there is a lot going on behind the scenes that may be +worth understanding. + +### Avoiding collisions + +One of the primary philosophies of Kubernetes is that users should not be +exposed to situations that could cause their actions to fail through no fault +of their own. In this situation, we are looking at network ports - users +should not have to choose a port number if that choice might collide with +another user. That is an isolation failure. + +In order to allow users to choose a port number for their `services`, we must +ensure that no two `services` can collide. We do that by allocating each +`service` its own IP address. + +### IPs and Portals + +Unlike `pod` IP addresses, which actually route to a fixed destination, +`service` IPs are not actually answered by a single host. Instead, we use +`iptables` (packet processing logic in Linux) to define "virtual" IP addresses +which are transparently redirected as needed. We call the tuple of the +`service` IP and the `service` port the `portal`. When clients connect to the +`portal`, their traffic is automatically transported to an appropriate +endpoint. The environment variables for `services` are actually populated in +terms of the portal IP and port. We will be adding DNS support for +`services`, too. + +As an example, consider the image processing application described above. +when the backend `services` is created, the Kubernetes master assigns a portal +IP address, for example 10.0.0.1. Assuming the `service` port is 1234, the +portal is 10.0.0.1:1234. The master stores that information, which is then +observed by all of the `service proxy` instances in the cluster. When a proxy +sees a new portal, it opens a new random port, establish an iptables redirect +from the portal to this new port, and starts accepting connections on it. + +When a client connects to `MYAPP_SERVICE_HOST` on the portal port (whether +they know the port statically or look it up as MYAPP_SERVICE_PORT), the +iptables rule kicks in, and redirects the packets to the `service proxy`'s own +port. The `service proxy` chooses a backend, and starts proxying traffic from +the client to the backend. + +The net result is that users can choose any `service` port they want without +risk of collision. Clients can simply connect to an IP and port, without +being aware of which `pods` they are accessing. + +![Services detailed diagram](services_detail.png) + +## Shortcomings + +Part of the `service` specification is a `createExternalLoadBalancer` flag, +which tells the master to make an external load balancer that points to the +service. In order to do this today, the service proxy must answer on a known +(i.e. not random) port. In this case, the service port is promoted to the +proxy port. This means that is is still possible for users to collide with +each others services or with other pods. We expect most `services` will not +set this flag, mitigating the exposure. + +We expect that using iptables for portals will work at small scale, but will +not scale to large clusters with thousands of services. See [the original +design proposal for +portals](https://github.com/GoogleCloudPlatform/kubernetes/issues/1107) for +more details. + +## Future work + +In the future we envision that the proxy policy can become more nuanced than +simple round robin balancing, for example master elected or sharded. We also +envision that some `services` will have "real" load balancers, in which case the +portal will simply transport the packets there. diff --git a/docs/services_detail.png b/docs/services_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc28a0bc7d750b440dbef7d9eb81f3e837f66c7 GIT binary patch literal 62820 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 gzTf=fq7K`MKrY=z{|qDZ3?$}5DFCvj3y#N3J literal 0 HcmV?d00001 diff --git a/docs/services_detail.svg b/docs/services_detail.svg new file mode 100644 index 00000000000..1c1feee1bb4 --- /dev/null +++ b/docs/services_detail.svg @@ -0,0 +1,538 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Backend Pod + labels: app=MyAppport: 9376 + + + + + + Backend Pod + labels: app=MyAppport: 9376 + + + + + + Backend Pod + labels: app=MyAppport: 9376 + + + + + + + + + + + + + + + Client Pod + + + + + iptables + + + + + Service Proxy + + + + + + + apiserver + + + + connect to 10.0.0.1:1234 + redirect to (random) proxy port + update service specs + install portal rules + + diff --git a/docs/services_overview.png b/docs/services_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..ddbed70894a55eda1635fe1d468e27897f68f4d9 GIT binary patch literal 44362 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 literal 0 HcmV?d00001 diff --git a/docs/services_overview.svg b/docs/services_overview.svg new file mode 100644 index 00000000000..a3b9dadbde1 --- /dev/null +++ b/docs/services_overview.svg @@ -0,0 +1,417 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + Backend Pod + labels: app=MyAppport: 9376 + + + + + + Backend Pod + labels: app=MyAppport: 9376 + + + + + + Backend Pod + labels: app=MyAppport: 9376 + + + + + + + + + + + + + + + Client Pod + + + + + + Service Proxy + + + + + + + apiserver + + + + +