Service Episode II
Kubernetes Types of Service
ááťá˝ááşááąáŹáşáááŻáˇ áážáąáˇáážáŹ Service áĄááźáąáŹááşá¸ááᯠáĄáááşá¸áááşáážááşá¸ááźááźáŽá¸áááŻááąáŹáˇ ááąáŹááşáááş episode áá áşááŻáĄááąáá˛áˇ Service áĄáá˛áážáŹááŹáá˝áą áááşááᯠáĄááŻááşááŻááşáá˝áŹá¸áá˛áááŻááŹááᯠáááşáááşááąáˇááŹáá˝áąá¸áá˝áąá¸ááźááĄáąáŹááşááťáŹá
ááŻááşááźáŽ ááŽááąáŹáˇ Service áá áşáᯠcreate ááŻááşáááŻááşááźáŽáááŻáááş áá°áˇáá˛áˇ Labels and Selectors ááá°ááŹáá°áᏠPod áá˝áąáá˛áˇ ááťáááşááąá¸áááşá ááŤááźáŽá¸ááąáŹáˇ Service ááᯠaccess ááŻááşáááŻáˇáĄáá˝ááş Stable IP address áá áşááŻáááŻááŻááşááąá¸áááşá Service áááŻáááťááşáááźááşá¸ ááᯠService IP áááźáąáŹááşá¸áážáŹáááŻááşááŤáá°á¸á áĄá˛áˇáááş Service ááá˝ááşááŹáá˛áˇ IP ááᯠKubernetes Cluster áá˛á Pod áá˝áąáááą Service ááᯠaccess ááŻááşáááŹáĄáááşááźáąáá˝áŹá¸áážáŹááŤá ááťá˝ááşááąáŹáşáááŻáˇáĄááąáá˛áˇ Service ááᯠInternal áĄáá˝ááşá¸áážáŹáᲠáĄááŻáśá¸ááźáŻááąáážáŹááąáŹáˇ áááŻááşááŤáá°á¸á Service ááᯠExternal áááąáááşá¸ access ááŻááşáááŻáˇááĄáąáŹááş áĄááŻáśá¸ááźáŻááźáážáŹáá˛ááźá áşááŤáááşá
ááťá˝ááşááąáŹáşáááŻáˇ Service ááᯠPod áá˛áâááąááźáŽá¸ curl command áá˛áˇ Service IP ááᯠaccess ááŻááşáááşáááŻáááş áááşáááŻáĄááŻááşááŻááşáá˝áŹá¸áᲠáááŻááąáŹáˇ

Pod áá áşááŻáá˛ááᯠExecute ááŻááşááźáŽá¸ curl command áá˛áˇ Service áááŻááąáŤáşááźááˇáşáááŻááşáááş Service ááá°áˇáĄáąáŹááşáážáŹ áážááá˛áˇ Pod áá˝áąááᯠrandomly select ááŻááşááźáŽá¸ curl áá˛áˇ ááąáŤáşáá˛áˇ áá°ááŽááᯠresponse ááźááşáááŻááşááŤáááşá ááŤáááąáŹáˇ Cluster áá˛á Pod áááą Service ááᯠcurl command áá˛áˇ request ááŻááşáá˛áˇ scenario áá áşááŻáá˛ááźá áşááŤáááşá áĄáááşáááŻáˇ User á Cluster áĄááźááşáááşááą Access ááŻááşáááşáááŻáááşáááşá¸ Ingress Controller áááąáá áşáááˇáş Service ááᯠááąáŹááşáááş áĄá˛áˇáááşáážáá áşáááˇáş áá°áˇáĄáąáŹááşáážáŹáážááá˛áˇ Pod áá˝áąááŽááᯠrandomly probability select ááŻááşáá˝áŹá¸áážáŹááźá áşááŤáááşá
ááŽááąááŹáážáŹ Pod áá˝áąááᯠrandom probability áá˛áˇ select ááŻááşáááşáááŻáˇááźáąáŹááąáááˇáş ááááşáááşá¸á Service áá˛áˇ áĄááźá˛áĄáá°áážáááąáá˛áˇ Endpoints áá˝áąááŽáááŻáá˛ááźá áşááŤáááşá áááŻááąáŹáˇáᏠEndpoint áááŻááŹááŹáᲠá áááşáᲠ?
Endpoints
ááááşáááşá¸ááąáŹáˇ Services áá˝áąá Pods áá˝áąáá˛áˇ áááŻááşáááŻááşááźáŽá¸ áááşáá˝ááşááąááŹáááŻááşááŤáá°á¸ á Services áá˝áąáá˛áˇ Pods áá˝áąááźáŹá¸áážáŹ Endpoints áááŻáá˛áˇ resource áá áşááŻáážáááąááŤááąá¸áááşá Endpoints áááŻááŹáááąáŹáˇ labels and selectors áá°ááŹáá°áᏠá áŻááźáŽá¸ áááŹáá˛áˇ Pods áá˛áˇ IP addresses áá˛áˇ ports áá˝áąáá˛ááźá áşááŤáááşá áá˝ááşáá˝ááşááźáąáŹááááşááąáŹáˇ Endpoints á Service áá˛áˇ Pod ááźáŹá¸áážáŹ áĄááŻááşááŻááşááąá¸áá˛áˇ Resource áá áşááŻááąáŤáˇááťáŹá Pod áá˝áąáĄááąáá˛áˇ start ááŻááşááźáŽá¸ááŹáá˛áˇ liveness probe áá˛áˇ readiness probe check ááŻááşááŤáááşá health check áááąáŹááąáŤáˇá Readiness Probe pass ááźá áşáá˝áŹá¸ááŹáá˛áˇ endpoint ááąá¸áá˝áąáá˝ááşááŹáážáŹááŤá Endpoints ááᯠmanual áááşá¸ create ááŻááşáááŻáˇááááŻááşááŤááąá¸áááşá Service Endpoints áá˝áąáááŻáááááŻááşáááŻáˇ kubectl get endpoints áá˛áˇááźááˇáşáááŻáˇááááᯠkubectl describes svc <service name> áá˛áˇáááşá¸ááźááˇáşáááŻáˇááááŻááşááŤáááşá
[waiyanmin@k8smm ~] $ kubectl get endpoints
NAME ENDPOINTS AGE
hopper 10.0.2.126:80,10.0.2.177:80,10.0.6.90:80 36d
kubernetes 10.0.2.117:443,10.0.6.38:443 55d
[waiyanmin@k8smm ~] $ kubectl describe svc kubernetes
Name: kubernetes
Namespace: default
Labels: component=apiserver
provider=kubernetes
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP: 172.20.0.1
Port: https 443/TCP
TargetPort: 443/TCP
Endpoints: 10.0.2.117:443,10.0.6.38:443
Session Affinity: None
Events: <none>
Kubernetes Service Types
ClusterIP
áá°áááąáŹáˇ Kubernetes Service Types áá˝áąáá˛áááž Default Service type áááŻáááşá¸ ááážáŹá¸áá°á¸ááąáŤáˇááťáŹá ClusterIP Service áááŻááąáŹáˇ ClusterIP áááŻáá˛áĄáááŻááşá¸ Cluster áĄáá˝ááşá¸áážáŹ áĄááŻáśá¸ááźáŻáááŻáˇ áĄáá˝ááş Internal Virtual IP áá áşááŻááᯠááŻááş ááąá¸ááŤáááşá ClusterIP Service áááŻááąáŹáˇ External áááąáááŻááşáááŻááşáĄááŻáśá¸ááźáŻáááŻáˇááąáŹáˇ ááážáŹáááŻááşááŤáá°á¸á
[waiyanmin@k8smm ~] $ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hopper ClusterIP 172.20.227.124 <none> 80/TCP 35d
kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 55d
Node Port
Service Types áá˛áááž áá áşááŻááźá áşáá˛áˇ Node Port áááąáŹáˇ Cluster áá˛áážáŹáážááá˛áˇ Node áááŻááşá¸áážáŹ Port Range ( 30000-32767 ) áĄáá˝ááşá¸áážáŹáážááá˛áˇ Port áá áşááŻáááŻáĄááŻáśá¸ááźáŻááźáŽá¸ External Traffic áá˝áąáááŻááŹáááşáá°ááąá¸ááŤáááşá ááťá˝ááşááąáŹáşáááŻáˇáĄááąáá˛áˇ Service Type ááᯠNode Port áĄááąáá˛áˇ expose ááŻááşáááşáááŻáááş áĄáááşááŻáśá¸ ClusterIP áá áşááŻáááŻáá°áˇáĄááąáá˛áˇ auto create ááŻááşáá˝áŹá¸áááşá áá°áˇáá˛áˇáĄááŻááşááŻááşááŻáśá ááťá˝ááşááąáŹáşáááŻáˇ External Clients áá˝áąá cluster áĄáá˝ááşá¸áážáŹáážááá˛áˇ Node áá˛áˇ Port áá˝áąáááŻáááŻááşáááŻááşááąáŤáşááźáŽá¸ access ááŻááşáááşáááŻáááş áá°áˇáá˛áˇ request traffic áá˝áąá NodePort ááážáá áşáááˇáş auto create ááŻááşáá˝áŹá¸áá˛áˇ ClusterIP Service ááŽáááŻááąáŹááşáááşá ClusterIP áááą kube-proxy áážáá áşáááˇáş iptables rules random probability áá˛áˇ select ááŻááşááźáŽá¸ Endpoints áá˝áąááŽáááŻáááŻáˇááąá¸áážáŹááźá áşááŤáááşá

[waiyanmin@k8smm ~] $ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hopper-nodeport NodePort 172.20.23.220 <none> 80:30772/TCP 35d
LoadBalancer

LoadBalancer Service Type áááąáŹáˇ áááŻááşáá˛áˇ Kubernetes Cluster á Cloud Provider áá áşááŻáᯠáážáŹáááşááąáŹááşááŹá¸ááŹáááŻáááş cloud provider áá˛áˇ loadbalancer áááŻáĄááŻáśá¸ááźáŻááźáŽá¸ service ááᯠExternal ááᯠexpose ááŻááşááąá¸áážáŹááźá áşááŤáááşá External áááą access ááááŻááşáááŻáˇ Cloud LoadBalancer áá˛áˇ IP ááŤáážáááŻááş DNS name áá áşááŻááᯠááŻááşááąá¸áážáŹááŤá
[waiyanmin@k8smm ~] $ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hopper-loadbalancer LoadBalancer 172.20.197.93 a30b2efd25ec311ea852e06d3624d39a-464378756.ap-southeast-1.elb.amazonaws.com 80:30820/TCP 2m8s
LoadBalancer áá˛áˇ áĄááŻááşááŻááşááŻáśááááşá¸áážááşá¸ááŤáááşá LoadBalancer Service Type á áĄááąáŤáşáážáŹááźáąáŹáá˛áˇáá˛áˇ ClusterIP áá˛áˇ Node Port Service Type áááŻáˇááᯠááŻáśááźáŽá¸ modify ááŻááşááŹá¸ááŹááťááŻá¸ááŤáá˛á Cloud Provider áá˛áˇ External LoadBalancer ááááşááŹáá˛áˇ Traffic áá˝áąááᯠNodePort áážáá áşáááˇáş ClusterIP áááŻááąáŹááşáááş ClusterIP áááą kube-proxy áážáá áşáááˇáş iptables rules random probability áá˛áˇ select ááŻááşááźáŽá¸ Endpoints áá˝áąááŽáááŻáááŻáˇááąá¸áážáŹááźá áşááŤáááşá
LoadBalancer Service Type ááᯠCloud áážáŹáá˛ááŻáśá¸áááŻáˇááážáŹááŹá¸áááŻááąáŹáˇ áĄá˛áˇáááŻáááşá¸áááŻááşááŤáá°á¸á On-premises áážáŹáááşá¸ HA Proxy áááŻáˇ F5 áááŻáˇáĄááźááş MetalLB áá˛áˇáááşá¸ Non-cloud Service Type LoadBalancer áĄááźá áşáá˝á˛ááŻáśá¸áááŻááşááŤááąá¸áááşá
ExternalName
Service Type ( ExternalName ) áááąáŹáˇ Service Type áá˝áąáá˛áážáŹ áĄáá°á¸ááźáŹá¸ááŻáśá¸ Service Type áá áşááŻááŤá ááŻáśáážááş Service Type áá˝áąáááąáŹáˇ Labels and Selectors áá˝áąáá˛áˇ áĄááŻááşááŻááşááźááąáááˇáş ExternalName áááąáŹáˇ Labels áá˝áą Selectors áá˝áąááááŻááŤáá°á¸á ExternalName áááąáŹáˇ Labels and Selectors áá˝áąáá˛áˇáĄá áŹá¸ DNS name ( CNAME Record ) áá˛áˇ IPs áá˝áąáá˛áˇáĄááŻááşááŻááşááŤáááşá áááŻáááŻááŹá Service Name k8smm áááŻááąáŤáşáááŻááşáááş google ááᯠexternal name áĄááąáá˛áˇ áááˇáşááŹá¸ááŹááťááŻá¸ááŤá ááŽááąááŹáážáŹ google.com áážáááŻááşááŤáá°á¸ áá áşááźáŹá¸ááŹáá˝áąáááşá¸áááˇáşááŻáśá¸áááŻáˇáááŤáááşá áĽááᏠáááŻááˇáşáá˛áˇ Database Server IP áááŻáááşá¸ Service Name "mydb" áá˛áˇ external-ip ááᯠ192.168.xx.xx áĄááąáá˛áˇáááşá¸áááˇáşááŹá¸áááŻááşááŤáááşá
[waiyanmin@k8smm ~] $ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
k8smm ExternalName <none> google.com 80/TCP 3h4m
mydb ExternalName <none> 192.168.xx.xx 3306/TCP 5h7m
YAML áĄááąáá˛áˇáááŻáááşááąáŹáˇ ááŽáááŻááąá¸ áá˝áąáˇááážáŹááŤá
apiVersion: v1
kind: Service
metadata:
name: k8smm
namespace: default
spec:
externalName: google.com
ports:
- name: default
port: 80
protocol: TCP
targetPort: 80
type: ExternalName
áĄááŻááąáŹááşáááŻáááşááąáŹáˇ Endpoints áá˛áˇ Service Types áá˝áąáĄááźáąáŹááşá¸ááᯠáĄáááşá¸áá˛áˇáĄááťáŹá¸ááŹá¸áááş áááąáŹááąáŤááşááźáááşáááŻáˇ ááŻáśááźááşááťážáąáŹáşáááˇáşááŤáááşá Kubernetes Service áĄááąáá˛áˇ áááşáááşáá˝áąá¸áá˝áąá¸á ááŹáá˝áąáážáááąá¸ááŹáááŻáˇ ááąáŹááşáááş episode áá áşááŻáážáŹááźááşáááşááŻáśáá˝áąááźááŤá ááŻáˇ áááşááťáŹá
áĄá ááşááąá¸á áŹá¸ááťááş
Reference -
https://kubernetes.io/docs/concepts/services-networking/service
Kubernetes in action book
Last updated
Was this helpful?