I'm not sure why only the 500 error is not being redirected to the custom error pages while other errors are working fine.
test address: test.example.com
#1. [ request ] GET / HTTP/1.1 Host: test.example.com
[ result ] 200 OK succeed(No Error)
#2. [ request ] GET / HTTP/1.1 Host: test.example.com/whatatest
[ result ] succeed(redirected to custom-error-page)
#3. [ request ] GET HTTP/1.1 Host: test.example.com/whatatest
[ result ] 503 Internal Server Error Fail, Not redirected
Here is my pod(nginx-errors) and service manifests
---
apiVersion: v1
kind: Service
metadata:
name: nginx-errors
namespace: ingress-nginx
labels:
app.kubernetes.io/name: nginx-errors
app.kubernetes.io/part-of: ingress-nginx
spec:
selector:
app.kubernetes.io/name: nginx-errors
app.kubernetes.io/part-of: ingress-nginx
ports:
- port: 80
targetPort: 8080
name: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-errors
namespace: ingress-nginx
labels:
app.kubernetes.io/name: nginx-errors
app.kubernetes.io/part-of: ingress-nginx
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: nginx-errors
app.kubernetes.io/part-of: ingress-nginx
template:
metadata:
labels:
app.kubernetes.io/name: nginx-errors
app.kubernetes.io/part-of: ingress-nginx
spec:
containers:
- name: nginx-error-server
image: nginx-errors
ports:
- containerPort: 8080
volumeMounts:
- name: custom-error-pages
mountPath: /www
volumes:
- name: custom-error-pages
configMap:
name: custom-error-pages
items:
- key: "400"
path: "400.html"
- key: "401"
path: "401.html"
- key: "402"
path: "402.html"
- key: "403"
path: "403.html"
- key: "404"
path: "404.html"
- key: "405"
path: "405.html"
- key: "406"
path: "406.html"
- key: "500"
path: "500.html"
- key: "501"
path: "501.html"
- key: "502"
path: "502.html"
- key: "503"
path: "503.html"
and this is my configmap for ingress-nginx-controller
apiVersion: v1
data:
allow-snippet-annotations: "true"
custom-http-errors: 400,401,402,403,404,405,406,500,501,502,503
proxy-hide-header: Server
server-tokens: "false"
default-backend: nginx-errors
kind: ConfigMap
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"allow-snippet-annotations":"true","proxy-hide-header":"Server","server-tokens":"false"},"kind":"ConfigMap","metadata":{"annotations":{"meta.helm.sh/release-name":"ingress-nginx","meta.helm.sh/release-namespace":"ingress-nginx"},"creationTimestamp":"2023-05-25T10:32:52Z","labels":{"app.kubernetes.io/component":"controller","app.kubernetes.io/instance":"ingress-nginx","app.kubernetes.io/managed-by":"Helm","app.kubernetes.io/name":"ingress-nginx","app.kubernetes.io/part-of":"ingress-nginx","app.kubernetes.io/version":"1.8.0","helm.sh/chart":"ingress-nginx-4.7.0"},"name":"ingress-nginx-controller","namespace":"ingress-nginx","resourceVersion":"144407","uid":"5f52c4c7-ab9a-4eae-b374-e632e3b77889"}}
and here is ingress-nginx-controller's configuration
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2023-07-05T08:08:00Z"
generateName: ingress-nginx-controller-747b85557-
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
helm.sh/chart: ingress-nginx-4.7.0
pod-template-hash: 747b85557
name: ingress-nginx-controller-747b85557-4x5x5
namespace: ingress-nginx
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: ingress-nginx-controller-747b85557
uid: ff05b43d-f79d-4647-81d4-b8107913e412
resourceVersion: "355109"
uid: 92b49816-3cda-4160-9fec-492538c63cb5
spec:
containers:
- args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
- --default-backend-service=$(POD_NAMESPACE)/nginx-errors
- --election-id=ingress-nginx-leader
- --controller-class=k8s.io/ingress-nginx
- --ingress-class=nginx
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
- --validating-webhook=:8443
- --validating-webhook-certificate=/usr/local/certificates/cert
- --validating-webhook-key=/usr/local/certificates/key
...