Bird
Raised Fist0
Kubernetesdevops~5 mins

Service mesh vs library-based approach in Kubernetes - CLI Comparison

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
When microservices need to communicate securely and reliably, managing this communication can be tricky. Service mesh and library-based approaches solve this by handling service-to-service communication, but in different ways.
When you want to add features like load balancing, retries, and security between services without changing application code
When you want a centralized way to monitor and control traffic between microservices
When you prefer to keep your application code simple and separate from communication logic
When you want to embed communication logic directly inside your application for tighter control
When you want to avoid adding extra infrastructure components to your cluster
Commands
Check if the Istio service mesh components are running in the cluster namespace 'istio-system'.
Terminal
kubectl get pods -n istio-system
Expected OutputExpected
NAME READY STATUS RESTARTS AGE istiod-5f7c9d7d7f-abcde 1/1 Running 0 10m istio-ingressgateway-7d9f8f9c9f-fghij 1/1 Running 0 10m
Verify that your application pods are running in your namespace before injecting the service mesh sidecar.
Terminal
kubectl get pods -n my-app-namespace
Expected OutputExpected
NAME READY STATUS RESTARTS AGE my-app-1234567890-abcde 1/1 Running 0 5m
Inject Istio sidecar proxies into your application deployment manifest and apply it to the cluster. This adds the service mesh features without changing your app code.
Terminal
istioctl kube-inject -f my-app-deployment.yaml | kubectl apply -f -
Expected OutputExpected
deployment.apps/my-app created
-f - Specifies the input deployment YAML file
Check application logs to confirm it is running without any library-based communication code.
Terminal
kubectl logs my-app-1234567890-abcde -c my-app-container
Expected OutputExpected
Starting application... Listening on port 8080 Ready to serve requests
-c - Specifies the container name inside the pod
Check the Istio sidecar proxy logs to see the service mesh handling communication.
Terminal
kubectl logs my-app-1234567890-abcde -c istio-proxy
Expected OutputExpected
[Envoy] [2024-06-01T12:00:00.000Z] starting proxy [Envoy] [2024-06-01T12:00:05.000Z] connection established to service-b
-c - Specifies the container name inside the pod
Key Concept

If you remember nothing else, remember: service mesh adds communication features outside your app code, while library-based approach embeds them inside your app.

Common Mistakes
Trying to use service mesh features without injecting sidecar proxies
The service mesh cannot manage traffic if the sidecar proxies are not present in the pods.
Always inject sidecar proxies using tools like istioctl kube-inject or automatic injection before deploying your app.
Adding service communication code in the app and also using a service mesh
This duplicates effort and can cause conflicts or unexpected behavior.
Choose either service mesh or library-based approach, not both, to handle service communication.
Not verifying that the service mesh components are running before deploying apps
Without the control plane running, the mesh features won't work and apps may fail to communicate properly.
Check service mesh pods in their namespace before deploying your applications.
Summary
Service mesh manages service communication by adding sidecar proxies to pods without changing app code.
Library-based approach requires adding communication code inside the application itself.
Use kubectl and istioctl commands to deploy and verify service mesh injection and operation.

Practice

(1/5)
1. What is the main difference between a service mesh and a library-based approach in Kubernetes?
easy
A. Service mesh requires changing app code, library-based works externally
B. Service mesh is for storage, library-based is for networking
C. Service mesh only works with databases, library-based only with APIs
D. Service mesh manages communication outside the app, library-based adds code inside the app

Solution

  1. Step 1: Understand service mesh role

    A service mesh manages communication between services outside the app, usually with sidecar proxies.
  2. Step 2: Understand library-based approach

    Library-based approach adds communication features inside the app code itself.
  3. Final Answer:

    Service mesh manages communication outside the app, library-based adds code inside the app -> Option D
  4. Quick Check:

    Service mesh = external, library-based = internal [OK]
Hint: Service mesh is external, library-based is inside app code [OK]
Common Mistakes:
  • Confusing which approach requires code changes
  • Thinking service mesh only works with databases
  • Mixing up external vs internal communication handling
2. Which of the following is a correct statement about implementing a service mesh in Kubernetes?
easy
A. Service mesh uses sidecar proxies injected alongside application pods
B. You must modify each application's source code to use the service mesh
C. Service mesh replaces Kubernetes networking completely
D. Service mesh only works with monolithic applications

Solution

  1. Step 1: Recall service mesh architecture

    Service mesh typically uses sidecar proxies injected into pods to handle communication externally.
  2. Step 2: Evaluate other options

    Modifying app code is not required; it does not replace Kubernetes networking; it works with microservices too.
  3. Final Answer:

    Service mesh uses sidecar proxies injected alongside application pods -> Option A
  4. Quick Check:

    Sidecar proxies = service mesh [OK]
Hint: Sidecar proxies run alongside apps in service mesh [OK]
Common Mistakes:
  • Thinking app code must be changed for service mesh
  • Believing service mesh replaces Kubernetes networking
  • Assuming service mesh only supports monoliths
3. Given a Kubernetes app using a library-based approach for service communication, what is the expected output if the app code does not include the library?
medium
A. The app will fail to communicate with other services
B. The app will automatically use a service mesh fallback
C. The app will communicate normally without any issues
D. The app will crash immediately on startup

Solution

  1. Step 1: Understand library-based approach dependency

    Library-based approach requires the app code to include the communication library to work properly.
  2. Step 2: Predict behavior without library

    If the library is missing, the app cannot handle communication as expected and will fail to connect to other services.
  3. Final Answer:

    The app will fail to communicate with other services -> Option A
  4. Quick Check:

    Missing library = communication failure [OK]
Hint: Library missing means communication fails [OK]
Common Mistakes:
  • Assuming app works without library in library-based approach
  • Thinking service mesh auto-fallback happens
  • Confusing app crash with communication failure
4. You deployed a service mesh but notice your app is not routing traffic correctly. Which is the most likely cause?
medium
A. The app code lacks the required communication library
B. Sidecar proxy injection failed or is missing
C. The Kubernetes cluster is down
D. The app is using an unsupported programming language

Solution

  1. Step 1: Identify service mesh traffic handling

    Service mesh relies on sidecar proxies injected into pods to route traffic correctly.
  2. Step 2: Analyze common deployment issues

    If traffic is not routing, a common cause is sidecar proxy injection failure or absence.
  3. Final Answer:

    Sidecar proxy injection failed or is missing -> Option B
  4. Quick Check:

    Missing sidecar = routing issues [OK]
Hint: Check sidecar proxy injection for routing issues [OK]
Common Mistakes:
  • Blaming app code library in service mesh setup
  • Assuming cluster is down without checking
  • Thinking language support affects routing directly
5. You want to add observability and security features to your Kubernetes microservices without changing app code. Which approach is best and why?
hard
A. Rewrite apps to include custom communication logic
B. Use a library-based approach to add features inside each app
C. Use a service mesh to manage features externally with sidecars
D. Disable all communication features for simplicity

Solution

  1. Step 1: Identify requirement to avoid app code changes

    The question states no changes to app code are desired.
  2. Step 2: Match approach to requirement

    Service mesh manages communication externally using sidecars, so it adds features without touching app code.
  3. Step 3: Evaluate other options

    Library-based requires code changes; rewriting apps is costly; disabling features is not helpful.
  4. Final Answer:

    Use a service mesh to manage features externally with sidecars -> Option C
  5. Quick Check:

    No code change = service mesh best [OK]
Hint: No code change? Choose service mesh [OK]
Common Mistakes:
  • Choosing library-based despite no code change allowed
  • Thinking rewriting apps is easier
  • Ignoring observability and security needs