我有一个在 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-controller
pod 崩溃,所以我不建议使用它。如果您想访问外部资源(集群外部),请创建将请求代理到此外部服务的 pod,并将您的 ingress 的默认后端指向其服务。
让我知道这是否有帮助