Services
Network Model
The cluster (nodes and pods) is one big flat IP network:
- all nodes must be able to reach each other, without NAT
- all pods must be able to reach each other, without NAT
- pods and nodes must be able to reach each other, without NAT
- each pod is aware of its IP address (no NAT)
Service Types
Concept |
Description |
Diagram |
ClusterIP |
- Service that creates virtual IP within the cluster to enable different services within the cluster to talk to each other
- the service is allocated an internal IP that other components can use to access the pods
- this IP address is reachable only from within the cluster (nodes and pods)
- when this service gets created, other applications within the cluster can access the service through service IP or service name
- Target ports allows to separate the port the service is available on from the port the application is listening on
TargetPort = Port which the application is configured to listen onPort = is how the application will be accessed from the outside
|
 |
NodePort |
- Service that exposes port on the Pod through a port on the node
- exposes the service on each Node’s IP via the defined static port
- no matter which Node within the cluster is accessed, the service will be reachable based on the port number defined
- Types of ports
Port : port on the service itself (usually same as pod port)TargetPort : port on the Pod (where your app listens). This is an optional parameter, if not present, Port is takenNodePort : port on the node that is used to access web server externally (default in the 30000-32768 range)
- Code must be changed to connect to that new port number
|
 |
LoadBalancer |
- An external load balancer is allocated for the service
- The load balancer is configured accordingly
- (e.g.: a NodePort service is created, and the load balancer sends traffic to that port)
|
|
ExternalName |
- The DNS entry managed by kube-dns will just be a CNAME to a provided record
- No port, no IP address, no nothing else is allocated
|
|