매칭되는 Host가 없을 경우.
Custom 404 에러페이지를 설정해보자.
1. 현재 설정
/aaa URL로 호출이 되면 my-nginx 서비스로 포워딩
/bbb URL로 호출이 되면 my-nginx2 서비스로 포워딩
2. 목표
/aaa, /bbb 이외의 URL로 호출되는 기본 ingress-nginx 404 페이지 변경.
3. Ken형이 샘플을 만들어 놓은것을 사용
# git clone https://github.com/kenmoini/custom-nginx-ingress-errors
4. 아래 경로에 내가 사용할 html 페이지지 넣기. 404.html
# cd ~/custom-nginx-ingress-errors/www
5. Docker 이미지 생성
#root@ubuntu-k8s-master01:/opt/custom-nginx-ingress-errors# docker build -t brightforest:1.0 .
Dockerfile |
FROM quay.io/kubernetes-ingress-controller/custom-error-pages-amd64:0.4
COPY www /www
6. 이미지 Tag 변경
# docker tag brightforest:1.0 brightforest/ingress-custom-error:1.0
7. Docker Hub Registry에 Push
# docker push brightforest/ingress-custom-error:1.0
8. yml 파일로 deployment, svc 생성
# kubectl apply -f k8s-deployment.yaml
k8s-deployment.yml |
---
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: brightforest/ingress-custom-error:1.0 #이미지 수정
#image: kenmoini/custom-nginx-ingress-errors:latest
ports:
- containerPort: 8080
# Setting the environment variable DEBUG we can see the headers sent
# by the ingress controller to the backend in the client response.
# env:
# - name: DEBUG
# value: "true"
9. 생성된 nginx-error 서비스 확인
root@ubuntu-k8s-master01:/opt/custom-nginx-ingress-errors# kubectl get all -n ingress-nginx | grep error
pod/nginx-errors-7dcc84df95-wl9qd 1/1 Running 0 81m
service/nginx-errors ClusterIP 10.233.51.243 <none> 80/TCP 81m
deployment.apps/nginx-errors 1/1 1 1 81m
replicaset.apps/nginx-errors-7dcc84df95 1 1 1 81m
10. 에러페이지 연결
참고 사이트에서는 정석 방법대로 ConfigMap으로 nginx의 custom-http-errors 옵션을 사용하여 해당 에러 발생시 service/nginx-errors 를 호출하도록 함.
지금은 404 페이지만 적용하면 되니까 /aaa, /bbb가 아닌 모든 경로(/)로 호출이 될 경우만 ingress에 추가
ingress-sample.yml |
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress-sample
namespace: ingress-nginx
annotations:
#nginx.ingress.kubernetes.io/custom-http-errors: "404"
#nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
#- host: brightforest.com
- http:
paths:
- path: /aaa
backend:
serviceName: my-nginx
servicePort: 80
- path: /bbb
backend:
serviceName: my-nginx2
servicePort: 80
- path: /
backend:
serviceName: nginx-errors
servicePort: 80
11. 호출 확인
/aaa, /bbb가 아닌 url 호출로 제대로 적용이 되었는지 확인.
*nginx의 custom-http-errors 옵션 사용방법
1. ingress에 /aaa, /bbb 경로만 설정 된 경우. nginx-errors 서비스까지 동일하게 생성
2. ingress deployment 수정
root@ubuntu-k8s-master01:~# kubectl edit deployment.apps/ingress-nginx-controller -n ingress-nginx
...
containers:
- args:
...
- --default-backend-service=$(POD_NAMESPACE)/nginx-errors #라인 추가
...
3. nginx 설정 변경하는 configmap 생성
root@ubuntu-k8s-master01:~# cat nginx-configuration.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: ingress-nginx
data:
custom-http-errors: "404,500,503"
3. configmap 적용
root@ubuntu-k8s-master01:~# kubectl apply -f nginx-configuration.yaml
4. 호출 확인
*nginx-controller에 수정하면 10~20초뒤에 반영이 됨.
*테스트 구조는 ingress-nginx -> nginx 구조
- custom-http-errors: "404"으로 설정할 경우 503페이지는 nginx의 기본 페이지가 리턴
- custom-http-errors: "404,500,503" 으로 설정할 경우 ingress의 503 custom error 페이지가 리턴
참고.
https://dev.to/kenmoini/custom-kubernetes-ingress-default-backend-and-error-pages-3alh
'Kubernetes' 카테고리의 다른 글
[Service Account #1] 외부 클러스터 컨트롤 (0) | 2021.06.30 |
---|---|
[kubespray] offline 설치 환경 구성 (0) | 2021.06.01 |
[Nexus3] local docker registry 구성 (0) | 2021.05.27 |
[Helm] 설치 및 기본 사용법 (0) | 2021.05.11 |
[kubernetes] kubespray로 배포된 cluster의 [Insecure Registries] (0) | 2020.10.21 |