Kubernetes 클러스터에서 Helm을 통해 설치된 Nginx Ingress Controller를 실행하고 있습니다. 특정 오류 (예 : 404)에 대해 기본 백엔드 서비스의 HTML / CSS를 변경하고 싶습니다.
이 링크는 기본 백엔드에 대한 몇 가지 일반 정보를 제공합니다. 그러나 제공되는 HTML / CSS 파일을 실제로 맞춤 설정하는 방법에 대한 언급은 없습니다.
좋습니다.이 답변의 일부는 완전한 솔루션, 특히 @ 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.conf
Nginx 구성 파일을 만듭니다 .
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] 삭제
몇 마디 만하겠습니다