Revise introduction to Service page
Co-authored-by: Divya Mohan <divya.mohan0209@gmail.com>
This commit is contained in:
parent
6d47deef83
commit
72b9f09f45
|
|
@ -18,22 +18,23 @@ weight: 10
|
||||||
|
|
||||||
{{< glossary_definition term_id="service" length="short" >}}
|
{{< glossary_definition term_id="service" length="short" >}}
|
||||||
|
|
||||||
With Kubernetes you don't need to modify your application to use an unfamiliar service discovery mechanism.
|
A key aim of Services in Kubernetes is that you don't need to modify your existing
|
||||||
Kubernetes gives Pods their own IP addresses and a single DNS name for a set of Pods,
|
application to use an unfamiliar service discovery mechanism.
|
||||||
and can load-balance across them.
|
You can run code in Pods, whether this is a code designed for a cloud-native world, or
|
||||||
|
an older app you've containerized. You use a Service to make that set of Pods available
|
||||||
|
on the network so that clients can interact with it.
|
||||||
|
|
||||||
<!-- body -->
|
|
||||||
|
|
||||||
## Motivation
|
|
||||||
|
|
||||||
Kubernetes {{< glossary_tooltip term_id="pod" text="Pods" >}} are created and destroyed
|
|
||||||
to match the desired state of your cluster. Pods are nonpermanent resources.
|
|
||||||
If you use a {{< glossary_tooltip term_id="deployment" >}} to run your app,
|
If you use a {{< glossary_tooltip term_id="deployment" >}} to run your app,
|
||||||
it can create and destroy Pods dynamically.
|
that Deployment can create and destroy Pods dynamically. From one moment to the next,
|
||||||
|
you don't know how many of those Pods are working and healthy; you might not even know
|
||||||
|
what those healthy Pods are named.
|
||||||
|
Kubernetes {{< glossary_tooltip term_id="pod" text="Pods" >}} are created and destroyed
|
||||||
|
to match the desired state of your cluster. Pods are emphemeral resources (you should not
|
||||||
|
expect that an individual Pod is reliable and durable).
|
||||||
|
|
||||||
Each Pod gets its own IP address, however in a Deployment, the set of Pods
|
Each Pod gets its own IP address (Kubernetes expects network plugins to ensure this).
|
||||||
running in one moment in time could be different from
|
For a given Deployment in your cluster, the set of Pods running in one moment in
|
||||||
the set of Pods running that application a moment later.
|
time could be different from the set of Pods running that application a moment later.
|
||||||
|
|
||||||
This leads to a problem: if some set of Pods (call them "backends") provides
|
This leads to a problem: if some set of Pods (call them "backends") provides
|
||||||
functionality to other Pods (call them "frontends") inside your cluster,
|
functionality to other Pods (call them "frontends") inside your cluster,
|
||||||
|
|
@ -42,14 +43,13 @@ to, so that the frontend can use the backend part of the workload?
|
||||||
|
|
||||||
Enter _Services_.
|
Enter _Services_.
|
||||||
|
|
||||||
## Service resources {#service-resource}
|
<!-- body -->
|
||||||
|
|
||||||
In Kubernetes, a Service is an abstraction which defines a logical set of Pods
|
## Services in Kubernetes
|
||||||
and a policy by which to access them (sometimes this pattern is called
|
|
||||||
a micro-service). The set of Pods targeted by a Service is usually determined
|
The Service API, part of Kubernetes, is an abstraction to help you expose groups of
|
||||||
by a {{< glossary_tooltip text="selector" term_id="selector" >}}.
|
Pods over a network. Each Service object defines a logical set of endpoints (usually
|
||||||
To learn about other ways to define Service endpoints,
|
these endpoints are Pods) along with a policy about how to make those pods accessible.
|
||||||
see [Services _without_ selectors](#services-without-selectors).
|
|
||||||
|
|
||||||
For example, consider a stateless image-processing backend which is running with
|
For example, consider a stateless image-processing backend which is running with
|
||||||
3 replicas. Those replicas are fungible—frontends do not care which backend
|
3 replicas. Those replicas are fungible—frontends do not care which backend
|
||||||
|
|
@ -59,6 +59,26 @@ track of the set of backends themselves.
|
||||||
|
|
||||||
The Service abstraction enables this decoupling.
|
The Service abstraction enables this decoupling.
|
||||||
|
|
||||||
|
The set of Pods targeted by a Service is usually determined
|
||||||
|
by a {{< glossary_tooltip text="selector" term_id="selector" >}} that you
|
||||||
|
define.
|
||||||
|
To learn about other ways to define Service endpoints,
|
||||||
|
see [Services _without_ selectors](#services-without-selectors).
|
||||||
|
|
||||||
|
If your workload speaks HTTP, you might choose to use an
|
||||||
|
[Ingress](/docs/concepts/services-networking/ingress/) to control how web traffic
|
||||||
|
reaches that workload.
|
||||||
|
Ingress is not a Service type, but it acts as the entry point for your
|
||||||
|
cluster. An Ingress lets you consolidate your routing rules into a single resource, so
|
||||||
|
that you can expose multiple components of your workload, running separately in your
|
||||||
|
cluster, behind a single listener.
|
||||||
|
|
||||||
|
The [Gateway](https://gateway-api.sigs.k8s.io/#what-is-the-gateway-api) API for Kubernetes
|
||||||
|
provides extra capabilities beyond Ingress and Service. You can add Gateway to your cluster -
|
||||||
|
it is a family of extension APIs, implemented using
|
||||||
|
{{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinitions" >}} -
|
||||||
|
and then use these to configure access to network services that are running in your cluster.
|
||||||
|
|
||||||
### Cloud-native service discovery
|
### Cloud-native service discovery
|
||||||
|
|
||||||
If you're able to use Kubernetes APIs for service discovery in your application,
|
If you're able to use Kubernetes APIs for service discovery in your application,
|
||||||
|
|
@ -69,6 +89,9 @@ whenever the set of Pods in a Service changes.
|
||||||
For non-native applications, Kubernetes offers ways to place a network port or load
|
For non-native applications, Kubernetes offers ways to place a network port or load
|
||||||
balancer in between your application and the backend Pods.
|
balancer in between your application and the backend Pods.
|
||||||
|
|
||||||
|
Either way, your workload can use these [service discovery](#discovering-services)
|
||||||
|
mechanisms to find the target it wants to connect to.
|
||||||
|
|
||||||
## Defining a Service
|
## Defining a Service
|
||||||
|
|
||||||
A Service in Kubernetes is a REST object, similar to a Pod. Like all of the
|
A Service in Kubernetes is a REST object, similar to a Pod. Like all of the
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue