You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
apiVersion: v1kind: Service metadata:
name: myapp1-cip-servicespec:
type: ClusterIP # ClusterIP, # NodePort, # LoadBalancer, # ExternalNameselector:
app: myapp1ports:
- name: httpport: 80# Service PorttargetPort: 8080# Container Port
Step-04: 03-kubernetes-headless-service.yaml
Add spec.clusterIP: None
VERY IMPORTANT NODE
When using Headless Service, we should use both the "Service Port and Target Port" same.
Headless Service directly sends traffic to Pod with Pod IP and Container Port.
DNS resolution directly happens from headless service to Pod IP.
apiVersion: v1kind: Service metadata:
name: myapp1-headless-servicespec:
#type: ClusterIP # ClusterIP, # NodePort, # LoadBalancer, # ExternalNameclusterIP: Noneselector:
app: myapp1ports:
- name: httpport: 8080# Service PorttargetPort: 8080# Container Port
Step-05: Deply Kubernetes Manifests
# Deploy Kubernetes Manifests
kubectl apply -f 01-kube-manifests
# List Deployments
kubectl get deploy
# List Pods
kubectl get pods
kubectl get pods -o wide
Observation: make a note of Pod IP
# List Services
kubectl get svc
Observation:
1. "CLUSTER-IP" will be "NONE"for Headless Service
## Sample
Kalyans-Mac-mini:19-GKE-Headless-Service kalyanreddy$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.24.0.1 <none> 443/TCP 135m
myapp1-cip-service ClusterIP 10.24.2.34 <none> 80/TCP 4m9s
myapp1-headless-service ClusterIP None <none> 80/TCP 4m9s
Kalyans-Mac-mini:19-GKE-Headless-Service kalyanreddy$
Step-07: Deply Curl-pod and Verify ClusterIP and Headless Services
# Deploy curl-pod
kubectl apply -f 02-kube-manifests-curl
# List Services
kubectl get svc
# GKE Cluster Kubernetes Service Full DNS Name format
<svc>.<ns>.svc.cluster.local# Will open up a terminal session into the container
kubectl exec -it curl-pod -- sh
# ClusterIP Service: nslookup and curl Test
nslookup myapp1-cip-service.default.svc.cluster.local
curl myapp1-cip-service.default.svc.cluster.local### ClusterIP Service nslookup Outptu
$ nslookup myapp1-cip-service.default.svc.cluster.local
Server: 10.24.0.10
Address: 10.24.0.10:53
Name: myapp1-cip-service.default.svc.cluster.local
Address: 10.24.2.34
# Headless Service: nslookup and curl Test
nslookup myapp1-headless-service.default.svc.cluster.local
curl myapp1-headless-service.default.svc.cluster.local:8080
Observation:
1. There is no specific IP for Headless Service
2. It will be directly dns resolved to Pod IP
3. That said we should use the same port as Container Port for Headless Service (VERY VERY IMPORTANT)
### Headless Service nslookup Output
$ nslookup myapp1-headless-service.default.svc.cluster.local
Server: 10.24.0.10
Address: 10.24.0.10:53
Name: myapp1-headless-service.default.svc.cluster.local
Address: 10.20.0.25
Name: myapp1-headless-service.default.svc.cluster.local
Address: 10.20.0.26
Name: myapp1-headless-service.default.svc.cluster.local
Address: 10.20.1.28
Name: myapp1-headless-service.default.svc.cluster.local
Address: 10.20.1.29