Bird
Raised Fist0
Kubernetesdevops~5 mins

Cross-namespace communication in Kubernetes - Commands & Configuration

Choose your learning style10 modes available
Introduction
Sometimes, applications running in different parts of a Kubernetes cluster need to talk to each other. Cross-namespace communication lets pods in one namespace connect to services in another namespace safely and clearly.
When a frontend app in one namespace needs to get data from a backend service in another namespace.
When you want to separate environments like development and production but still allow some services to communicate.
When multiple teams manage different namespaces but share common services like databases.
When you want to organize your cluster by namespaces but keep some services accessible across them.
Commands
Create a namespace called 'frontend' to isolate frontend resources.
Terminal
kubectl create namespace frontend
Expected OutputExpected
namespace/frontend created
Create a namespace called 'backend' to isolate backend resources.
Terminal
kubectl create namespace backend
Expected OutputExpected
namespace/backend created
Start a simple pod named 'backend-pod' running nginx in the 'backend' namespace.
Terminal
kubectl run backend-pod --image=nginx --restart=Never -n backend
Expected OutputExpected
pod/backend-pod created
→
-n - Specifies the namespace where the pod will be created
Create a service named 'backend-service' in the 'backend' namespace to expose the backend pod on port 80.
Terminal
kubectl expose pod backend-pod --port=80 --target-port=80 --name=backend-service -n backend
Expected OutputExpected
service/backend-service exposed
→
-n - Specifies the namespace for the service
Start a pod named 'frontend-pod' in the 'frontend' namespace that will run a sleep command to stay alive for testing.
Terminal
kubectl run frontend-pod --image=busybox --restart=Never -n frontend --command -- sleep 3600
Expected OutputExpected
pod/frontend-pod created
→
-n - Specifies the namespace for the pod
From the frontend pod, try to access the backend service using its full DNS name including the backend namespace.
Terminal
kubectl exec -n frontend frontend-pod -- wget -qO- http://backend-service.backend.svc.cluster.local
Expected OutputExpected
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> </head> <body> <h1>Welcome to nginx!</h1> </body> </html>
→
-n - Specifies the namespace of the pod to run the command in
Key Concept

Pods can reach services in other namespaces by using the full DNS name including the target namespace.

Common Mistakes
Trying to access a service in another namespace using only the service name without the namespace suffix.
Kubernetes DNS requires the full service name with namespace to resolve services outside the current namespace.
Use the full DNS name like service-name.namespace.svc.cluster.local to reach services in other namespaces.
Not creating the service in the target namespace before trying to access it.
Without a service, pods cannot find or connect to the backend pods easily.
Always create a service in the backend namespace to expose the pods before accessing them.
Summary
Create separate namespaces for frontend and backend to organize resources.
Deploy pods and expose backend pods with a service in the backend namespace.
Access backend services from frontend pods using the full DNS name including the backend namespace.

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

  1. Step 1: Understand namespaces role

    Namespaces help organize and isolate resources like pods and services inside a Kubernetes cluster.
  2. Step 2: Compare options

    Options B, C, and D describe unrelated cluster features, not namespaces.
  3. Final Answer:

    To group and isolate resources within the cluster -> Option A
  4. 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

  1. Step 1: Recall Kubernetes DNS format

    The full DNS name for a service is service.namespace.svc.cluster.local.
  2. 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.
  3. Final Answer:

    webapp.prod.svc.cluster.local -> Option C
  4. 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

  1. Step 1: Understand DNS and network policy

    The DNS name api.prod.svc.cluster.local correctly targets the service in the prod namespace.
  2. Step 2: Check network policy effect

    Since network policies allow cross-namespace traffic, the connection is permitted.
  3. Final Answer:

    The curl command successfully connects to the api service -> Option D
  4. Quick Check:

    Allowed network + correct DNS = successful connection [OK]
Hint: Correct DNS + allowed network = successful cross-namespace call [OK]
Common Mistakes:
  • Assuming DNS fails without explicit config
  • Ignoring network policy restrictions
  • Expecting pod crash on curl failure
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

  1. Step 1: Verify service existence

    If the service did not exist, DNS would fail, not timeout.
  2. Step 2: Analyze network policy impact

    Timeout usually means packets are blocked by network policies preventing cross-namespace communication.
  3. Final Answer:

    Network policies block traffic between dev and prod -> Option B
  4. 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

  1. 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.
  2. Step 2: Configure network policies

    Network policies must allow traffic from pods in frontend namespace to api namespace services.
  3. 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
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard