nginx 수신 컨트롤러의 기본 백엔드를 통해 제공되는 오류 페이지를 사용자 지정하는 방법은 무엇입니까?

dvdblk

Kubernetes 클러스터에서 Helm을 통해 설치된 Nginx Ingress Controller를 실행하고 있습니다. 특정 오류 (예 : 404)에 대해 기본 백엔드 서비스의 HTML / CSS를 변경하고 싶습니다.

링크는 기본 백엔드에 대한 몇 가지 일반 정보를 제공합니다. 그러나 제공되는 HTML / CSS 파일을 실제로 맞춤 설정하는 방법에 대한 언급은 없습니다.

dvdblk

좋습니다.이 답변의 일부는 완전한 솔루션, 특히 @ Matt 의 솔루션을 찾는 데 도움이되었습니다 . 그러나이 작업을 수행하는 데 꽤 시간이 걸렸으므로 다른 사람들도 어려움을 겪을 수 있는 모든 필요한 세부 사항을 포함 하여 내 답변을 작성하기로 결정했습니다 .


우선 제외하고, 404 콘텐츠가 포함 된 모든 요청에 응답 할 수있는 도커 이미지 서버를 생성하는 것 /healthz등을 /metrics. @ Matt가 언급했듯이 이것은 Nginx 인스턴스 (내가 사용한) 일 수 있습니다. 요약하자면 :

  • /healthz 돌아와야한다 200
  • /metrics선택 사항이지만 k8s 메트릭에 사용하는 경우 Prometheus에서 읽을 수있는 데이터를 반환해야합니다. Nginx는 Prometheus가 읽을 수있는 몇 가지 기본 데이터를 제공 할 수 있습니다. Nginx와 Prometheus를 완전히 통합하려면 링크를 고려하십시오 .
  • / 맞춤 HTML 콘텐츠와 함께 404를 반환합니다.

따라서 Dockerfile다음과 같이 보입니다.

FROM nginx:alpine

# Remove default NGINX Config
# Take care of Nginx logging
RUN rm /etc/nginx/conf.d/default.conf && \
    ln -sf /dev/stdout /var/log/nginx/access.log && \
    ln -sf /dev/stderr /var/log/nginx/error.log

# NGINX Config
COPY ./default.conf /etc/nginx/conf.d/default.conf

# Resources
COPY content/ /var/www/html/

CMD ["nginx", "-g", "daemon off;"]

Dockerfile이있는 동일한 폴더에서 다음 default.confNginx 구성 파일을 만듭니다 .

server {
    root /var/www/html;
    index 404.html;

    location / {

    }

    location /healthz {
        access_log off;
        return 200 "healthy\n";
    }

    location /metrics {
        # This creates a readable and somewhat useful response for Prometheus
        stub_status on;
    }

    error_page 404 /404.html;
    location = /404.html {
        internal;
    }
}

마지막으로 content/404.html원하는대로 HTML / CSS 파일을 제공합니다 .

이제 다음을 사용하여 Docker 이미지를 빌드하십시오.

docker build --no-cache -t custom-default-backend .

DockerHub (또는 자체 개인용 Docker 레지스트리)로 푸시 할 준비가되도록이 이미지에 태그를 지정하십시오.

docker tag custom-default-backend:latest <your_dockerhub_username>/custom-default-backend

DockerHub 저장소에 이미지를 푸시합니다.

docker push <your_dockerhub_username>/custom-default-backend

이제이 custom-default-backend 이미지를 Helm 설치에 통합하는 부분이 있습니다. 이렇게하려면 먼저 다음 k8s 리소스 파일 ( custom_default_backend.yaml) 을 만들어야합니다 .

---
apiVersion: v1
kind: Service
metadata:
  name: custom-default-backend
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: custom-default-backend
    app.kubernetes.io/part-of: ingress-nginx
spec:
  selector:
    app.kubernetes.io/name: custom-default-backend
    app.kubernetes.io/part-of: ingress-nginx
  ports:
  - port: 80
    targetPort: 80
    name: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: custom-default-backend
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: custom-default-backend
    app.kubernetes.io/part-of: ingress-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: custom-default-backend
      app.kubernetes.io/part-of: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/name: custom-default-backend
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      containers:
      - name: custom-default-backend
        # Don't forget to edit the line below
        image: <your_dockerhub_username>/custom-default-backend:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80

k8s 네임 스페이스가 ingress-nginx이미 생성되어 있다고 가정하면 이 두 리소스를 생성 할 수 있습니다.

kubectl apply -f custom_default_backend.yaml

이제 Nginx Ingress Controller를 새로운 서비스와 연결하기 위해 Ingress Controller의 배포를 편집 할 수 있습니다. 하지만 Helm을 통해 완전히 제거하기로 결정했습니다.

helm delete nginx-ingress -n ingress-nginx

그리고 다음 명령으로 다시 설치하십시오 ( --set적절한 인수가 포함 된 플래그 가 있는지 확인하십시오 ).

helm install nginx-ingress --namespace ingress-nginx stable/nginx-ingress --set defaultBackend.enabled=false,controller.defaultBackendService=ingress-nginx/custom-default-backend

이 단계를 통해 사용자 정의 기본 백엔드 구현이 작동해야합니다. 다음 은이 답변에서 사용한 파일이있는 GitHub 저장소입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관