Exception with proxy or filter in k8s

3/27/2020

I have domain based microservices architecture but want to handle exception handling in more generic way...I want a wrapper kind of service in generic way so that I can utilise this to send meaningful messages to upstream systems... I heard of proxy and filters but can somebody guide on how to implement or any other way ... Reason of implementing separately is, I don't want to modify each end point call on code

-- user3126850
domain-driven-design
exception
kubernetes
microservices

1 Answer

4/1/2020

You should look into Nginx Ingress controller and use custom-http-errors.

Enables which HTTP codes should be passed for processing with the error_page directive

Setting at least one code also enables proxy_intercept_errors which are required to process error_page.

Example usage: custom-http-errors: 404,415

This would work with creating a ConfigMap to ingress controller:

apiVersion: v1
kind: ConfigMap
name: nginx-configuration-ext
data:
  custom-http-errors: 502,503,504
  proxy-next-upstream-tries: "2"
  server-tokens: "false"

Also have a look at this blog post.

Another way would be adding Annotations to your ingress, it will catch the errors you want and redirect it to different service in this case nginx-errors-svc

nginx.ingress.kubernetes.io/default-backend: nginx-errors-svc
nginx.ingress.kubernetes.io/custom-http-errors: 404,503
nginx.ingress.kubernetes.io/default-backend: error-pages

If you will have issues using that try using server-snippet which will add custom configuration in the server configuration block :

nginx.ingress.kubernetes.io/server-snippet: |
      location @custom_503 {
        return 404;
      }
      error_page 503 @custom_503;

You should consider reading Custom Error Handling with the Kubernetes Nginx Ingress Controller and Custom Error Page for Nginx Ingress Controller.

-- Crou
Source: StackOverflow