What is kubernetes Service and how it works?
Limited Time Offer!
For Less Than the Cost of a Starbucks Coffee, Access All DevOpsSchool Videos on YouTube Unlimitedly.
Master DevOps, SRE, DevSecOps Skills!
What is kubernetes Service?
- Service is one of API Resources in K8s
- Service is network load balancers for PODs
- Service Load Balance PODS on POD network
- Service is empowered by kube proxy & network policy
- Service get Fixed IP address and DNS.
- Service is managed by k8s
- Service can be exposed outside of the clustor (port-forward)
- Service can be STICKY
- Service always Loadbalnce HEALTHY PODs
- Service is getting update PODS endpoint(IP) with a help a of CoreDNS based on the label of SVC and PODS is matching.
- Loadbalancing Alog – Random
Why kubernetes Service?
- User want to access one of the POD out of 1000 pods which was done as part of Deployment
How kubernetes Service Works?
- Label of Service MUST match with Label of PODS, then Service get updated with a POD which should be loadbalance.
“Selector Label” of Service MUST match with Label of PODS, then Service get updated with a POD which should be loadbalance.
[root@rajesh rajesh]# kubectl describe svc my-cs
Name: my-cs
Namespace: default
Labels: app=helloworld1
Annotations: <none>
Selector: app=helloworld [ FOCUS ]
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.109.240.163
IPs: 10.109.240.163
Port: 5678-80 5678/TCP
TargetPort: 80/TCP
Endpoints: 10.44.0.1:80,10.44.0.2:80
Session Affinity: None
Events: <none>
Type of Service?
- ClustorIP
- NodePort
- Loadbalancer
- ExternalIP
ClustorIP(Default)
Create a SVC which would load balance a POD
This SVC get IP address from POD Network - AKA ClustorIP
NodePort
Create a SVC which would load balance a POD
This SVC get IP address from POD Network - AKA ClustorIP
+
This Service Get Exposed at EACH NODE PORT as well.
LoadBalancer
Create a SVC which would load balance a POD
This SVC get IP address from POD Network - AKA ClustorIP
+
This Service Get Exposed at EACH NODE PORT as well.
+
Create a CLOUD EXT LB &&&& ADD Each Node of the CLUSTOR to the EXT LB
Working with Service?
pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: devopsschool-v1
labels:
app: helloworld
server: webo-server
spec:
containers:
- name: devopsschool1
image: scmgalaxy/nginx-devopsschoolv1
ports:
- name: nginx-port
containerPort: 80
pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: devopsschool-v2
labels:
app: helloworld
server: webo-server
spec:
containers:
- name: devopsschool1
image: scmgalaxy/nginx-devopsschoolv2
ports:
- name: nginx-port
containerPort: 80
383 more pod1.yaml pod2.yaml
384 clear
385 kubectl get pods
386 kubectl delete deploy my-dep
387 clear
388 kubectl get pods
389 clear
390 kubectl get pods
391 kubectl apply -f pod1.yaml
392 kubectl apply -f pod2.yaml
393 clear
394 kubectl get pods -o wide
395 curl http://10.44.0.1
396 clear
397 kubectl -h
398 kubectl create -h
399 clear
400 kubectl create service -h
401 clear
402 kubectl create service -h
403 kubectl create service clusterip -h
Examples:
# Create a new ClusterIP service named my-cs
kubectl create service clusterip my-cs --tcp=5678:80
5678:8080 = PORT Num of Service: Port Num of Container
[root@rajesh rajesh]# kubectl create service clusterip my-cs --tcp=5678:80
service/my-cs created
[root@rajesh rajesh]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d23h
my-cs ClusterIP 10.109.240.163 <none> 5678/TCP 8s
[root@rajesh rajesh]# kubectl describe svc my-cs
Name: my-cs
Namespace: default
Labels: app=my-cs
Annotations: <none>
Selector: app=my-cs
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.109.240.163
IPs: 10.109.240.163
Port: 5678-80 5678/TCP
TargetPort: 80/TCP
Endpoints: <none> [ FOCUS - TARGET POD ID ADDRESS ]
Session Affinity: None
Events: <none>
[root@rajesh rajesh]#
[root@rajesh rajesh]# kubectl get svc --show-labels
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d23h component=apiserver,provider=kubernetes
my-cs ClusterIP 10.109.240.163 <none> 5678/TCP 4m4s app=my-cs
[root@rajesh rajesh]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
devopsschool-v1 1/1 Running 0 12m app=helloworld,server=webo-server
devopsschool-v2 1/1 Running 0 12m app=helloworld,server=webo-server
[root@rajesh rajesh]#
----
kubectl create service nodeport my-np --tcp=5678:80
421 kubectl describe svc my-cs --show-labels
422 kubectl describe svc my-cs --show-lables
423 kubectl describe svc my-cs --show-labels
424* kubectl describe s
425 clear
426 kubectl get svc my-cs --show-lables
427 kubectl get svc --show-lables
428 kubectl get svc --show-labels
429 clear
430 kubectl get svc --show-labels
431 kubectl get pods --show-labels
432 kubectl edit svc my-cs
433 clear
434 kubectl get pods --show-labels
435 kubectl get svc --show-labels
436 kubectl describe svc my-cs
437 kubectl edit svc my-cs
438 kubectl describe svc my-cs
439 kubectl edit svc my-cs
440 kubectl describe svc my-cs
441 clear
442 kubectl describe svc my-cs
443 clear
444 kubectl get svc
445 kubectl get svc --show-labels
446 clear
447 kubectl get svc --show-labels;kubectl get pods --show-labels
448 clear
449 kubectl create service nodeport my-np --tcp=5678:80
450 kubectl get svc --show-labels;kubectl get pods --show-labels
451 curl http://10.109.240.163
452 curl http://10.109.240.163:5678
453 kubectl describe svc my-np
454 clear
455 kubectl edit svc my-np
456 kubectl describe svc my-np
457 clear
458 ls
459 kubectl get svc --show-labels;kubectl get pods --show-labels
460 ifconfig
461 kubectl get svc --show-labels;kubectl get pods --show-labels
462 clear
Network Policy
- https://kubernetes.io/docs/concepts/cluster-administration/addons/
#Assignment
What is “kubernetes” svc in default ns and what is the use of it?
[root@rajesh rajesh]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 4d23h
[root@rajesh rajesh]#