📖 Scenario: You are working with Kubernetes namespaces to organize your applications. You want to allow a pod in one namespace to communicate with a service in another namespace.
🎯 Goal: Set up two namespaces with a service in one namespace and a pod in another namespace that can communicate with that service using the full DNS name.
📋 What You'll Learn
Create two namespaces named frontend and backend
Deploy a simple backend service in the backend namespace
Deploy a pod in the frontend namespace that can access the backend service using the full DNS name
Verify communication by printing the response from the backend service
💡 Why This Matters
🌍 Real World
In real Kubernetes clusters, teams use namespaces to separate environments or projects. Services in one namespace often need to talk to services in another namespace.
💼 Career
Understanding cross-namespace communication is essential for Kubernetes administrators and DevOps engineers to design secure and scalable applications.
Progress0 / 4 steps
1
Create namespaces
Create two namespaces called frontend and backend using kubectl commands.
Kubernetes
Hint
Use kubectl create namespace frontend and kubectl create namespace backend to create the namespaces.
2
Deploy backend service
Deploy a simple backend pod and service in the backend namespace. Use the image hashicorp/http-echo with arguments -text=Hello from backend. Name the pod backend-pod and the service backend-service.
Kubernetes
Hint
Use kubectl run with --namespace=backend to create the pod, then kubectl expose pod to create the service.
3
Deploy frontend pod with curl
Deploy a pod named frontend-pod in the frontend namespace using the image curlimages/curl. This pod will be used to test communication to the backend service.
Kubernetes
Hint
Use kubectl run frontend-pod --image=curlimages/curl --restart=Never --namespace=frontend -- sleep 3600 to create a pod that stays running.
4
Test cross-namespace communication
Use kubectl exec to run a curl command inside frontend-pod in the frontend namespace. Access the backend service at http://backend-service.backend.svc.cluster.local:5678 and print the response.
Kubernetes
Hint
Use kubectl exec -n frontend frontend-pod -- curl -s http://backend-service.backend.svc.cluster.local:5678 to test communication.
Practice
(1/5)
1. What is the main purpose of namespaces in Kubernetes?
easy
A. To group and isolate resources within the cluster
B. To increase the number of nodes in the cluster
C. To speed up container startup time
D. To automatically update container images
Solution
Step 1: Understand namespaces role
Namespaces help organize and isolate resources like pods and services inside a Kubernetes cluster.
Step 2: Compare options
Options B, C, and D describe unrelated cluster features, not namespaces.
Final Answer:
To group and isolate resources within the cluster -> Option A
Quick Check:
Namespaces = resource grouping and isolation [OK]
Hint: Namespaces isolate resources logically inside the cluster [OK]
Common Mistakes:
Confusing namespaces with nodes
Thinking namespaces speed up containers
Assuming namespaces auto-update images
2. Which DNS name format is correct to access a service named webapp in namespace prod from another namespace?
easy
A. svc.webapp.prod.cluster.local
B. prod.webapp.svc.cluster.local
C. webapp.prod.svc.cluster.local
D. webapp.svc.prod.cluster.local
Solution
Step 1: Recall Kubernetes DNS format
The full DNS name for a service is service.namespace.svc.cluster.local.
Step 2: Match the format to the service and namespace
For service webapp in namespace prod, the correct format is webapp.prod.svc.cluster.local.
Final Answer:
webapp.prod.svc.cluster.local -> Option C
Quick Check:
DNS = service.namespace.svc.cluster.local [OK]
Hint: Use service.namespace.svc.cluster.local for cross-namespace access [OK]
Common Mistakes:
Swapping service and namespace order
Omitting 'svc' in DNS name
Using incorrect domain suffix
3. Given this command run in namespace dev:
kubectl exec -n dev pod1 -- curl http://api.prod.svc.cluster.local
What is the expected result if api service exists in prod namespace and network policies allow cross-namespace traffic?
medium
A. The curl command fails with DNS resolution error
B. The pod1 container crashes immediately
C. The curl command times out due to network policy blocking
D. The curl command successfully connects to the api service
Solution
Step 1: Understand DNS and network policy
The DNS name api.prod.svc.cluster.local correctly targets the service in the prod namespace.
Step 2: Check network policy effect
Since network policies allow cross-namespace traffic, the connection is permitted.
Final Answer:
The curl command successfully connects to the api service -> Option D
Quick Check:
Allowed network + correct DNS = successful connection [OK]
4. You try to access db.prod.svc.cluster.local from namespace dev but get a timeout. What is the most likely cause?
medium
A. The service db does not exist in prod
B. Network policies block traffic between dev and prod
C. The pod in dev has no internet access
D. The DNS name is incorrectly formatted
Solution
Step 1: Verify service existence
If the service did not exist, DNS would fail, not timeout.
Step 2: Analyze network policy impact
Timeout usually means packets are blocked by network policies preventing cross-namespace communication.
Final Answer:
Network policies block traffic between dev and prod -> Option B
Quick Check:
Timeout = network block, not DNS error [OK]
Hint: Timeout often means network policy blocks traffic [OK]
Common Mistakes:
Confusing timeout with DNS failure
Assuming pod internet access affects cluster DNS
Misreading DNS format as cause
5. You want to allow a pod in namespace frontend to access a service backend in namespace api. Which steps are needed to enable this cross-namespace communication?
hard
A. Use the full DNS name backend.api.svc.cluster.local and configure network policies to allow traffic from frontend to api
B. Create a service account in frontend and bind it to api namespace
C. Expose the backend service as NodePort and access it via node IP
D. Deploy the backend service in frontend namespace instead
Solution
Step 1: Use correct DNS name for cross-namespace access
Accessing a service in another namespace requires the full DNS name: backend.api.svc.cluster.local.
Step 2: Configure network policies
Network policies must allow traffic from pods in frontend namespace to api namespace services.
Final Answer:
Use the full DNS name backend.api.svc.cluster.local and configure network policies to allow traffic from frontend to api -> Option A
Quick Check:
DNS + network policy = cross-namespace communication [OK]
Hint: Full DNS + network policy allow = cross-namespace access [OK]
Common Mistakes:
Confusing service accounts with network access
Using NodePort unnecessarily
Moving services instead of configuring access
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.