In this tutorial, we will explore how we can generate kubernetes service yamls and also expose the service from cli using kubectl.
Generate Kubernetes Service Yamls
Generate service yaml with type Nodeport , name httpd and selector app: httpd
┌──(ved㉿lb)-[~]
└─$ kubectl create service nodeport httpd --tcp=80:80 --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: httpd
name: httpd
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: httpd
type: NodePort
status:
loadBalancer: {}
Generate a service yaml with type: NodePort, name: ‘nginx’ & selector app: nginx with specifying nodeport parameter
┌──(ved㉿lb)-[~]
└─$ kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
ports:
- name: 80-80
nodePort: 30080
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: NodePort
status:
loadBalancer: {}
Generate a service yaml with type: ClusterIP
┌──(ved㉿lb)-[~]
└─$ kubectl create service clusterip nginx --tcp=80:80 --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP
status:
loadBalancer: {}
Generate Kubernetes service yamls to expose/access running pods/deployment
Expose pod named mypod on port 80 and container port=8080 with type=NodePort
┌──(ved㉿lb)-[~]
└─$ kubectl expose pod mypod --port=80 --container-port=8080 --type=NodePort --dry-run=client -o
yaml
Flag --container-port has been deprecated, --container-port will be removed in the future, please use --target-port instead
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: mypod
name: mypod
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
run: mypod
type: NodePort
status:
loadBalancer: {}
Expose deployment with service type NodePort
┌──(ved㉿lb)-[~]
└─$ kubectl expose deployment mydep --port=80 --target-port=8080 --type=NodePort --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: mydep
name: mydep
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: mydep
type: NodePort
status:
loadBalancer: {}
Expose pod created from yaml defintion with type NodePort
┌──(ved㉿lb)-[~]
└─$ kubectl expose -f pod.yml --port=80 --target-port=8080 --type=NodePort --dry-run=client -o y
aml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: mypod
name: mypod
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
run: mypod
type: NodePort
status:
loadBalancer: {}
Expose pod with type=ClusterIP
┌──(ved㉿lb)-[~]
└─$ kubectl expose pod mypod --port=80 --target-port=8080 --type=ClusterIP --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: mypod
name: mypod
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
run: mypod
type: ClusterIP
status:
loadBalancer: {}
Expose deployment with type=ClusterIP
┌──(ved㉿lb)-[~]
└─$ kubectl expose deployment mydep --port=80 --target-port=8080 --type=ClusterIP --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: mydep
name: mydep
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: mydep
type: ClusterIP
status:
loadBalancer: {}
Expose pod with type=Cluster from pod definition
┌──(ved㉿lb)-[~]
└─$ kubectl expose -f pod.yml --port=80 --target-port=8080 --type=ClusterIP --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
run: mypod
name: mypod
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
run: mypod
type: ClusterIP
status:
loadBalancer: {}
Conclusion
We have explored how to create Kubernetes service yamls for different applications.