在 nginx-ingress 中收到 HTTP 404 时回退到静态来源

在 nginx-ingress 中收到 HTTP 404 时回退到静态来源

我有一个在 Kubernetes 上运行的 Web 应用程序,并且nginx-ingress它作为部署的 Ingress。

我想为 nginx 启用以下行为:当任何请求从原点收到 HTTP 404 响应时,将请求代理到第二个静态源。

我知道如何在标准 nginx 部署上启用该行为,但如何以最少的努力来实现它nginx-ingress(即,提供完整的自定义配置文件是我希望避免的事情)

答案1

使用时nginx-ingress您可以使用默认后端注释。在文档中您可以阅读:

此注释的格式为 nginx.ingress.kubernetes.io/default-backend: < svc name >,用于指定自定义默认后端。此 < svc name > 是对应用此注释的同一命名空间内的服务的引用。此注释将覆盖全局默认后端。

当 Ingress 规则中的服务没有活动端点时,此服务将处理响应。如果同时设置了此注释和 custom-http-errors 注释,它还将处理错误响应。

因此,您只需创建指向为您的静态网站提供服务的某个后端(pod)的默认服务即可。

所以你的入口现在应该是这样的:

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/default-backend: default-backend
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: myservice
          servicePort: 80

您的默认服务如下:

---
apiVersion: v1
kind: Service
metadata:
  name: default-backend
spec:
  selector:
      app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

为了访问外部静态资源,我尝试使用类型的服务ExternalService,但它似乎使我的nginx-ingress-controllerpod 崩溃,所以我不建议使用它。如果您想访问外部资源(集群外部),请创建将请求代理到此外部服务的 pod,并将您的 ingress 的默认后端指向其服务。

让我知道这是否有帮助

相关内容