如何通过Nginx Ingress Controller将请求重定向至外部域名?
可行,调整配置即可实现
你之前的配置失效是因为Ingress Controller找不到指定的non-existent-service,不会生成对应的Nginx location规则,导致注解里的rewrite逻辑根本没生效。要实现全量重定向到外部域名,只需要保证Ingress绑定一个存在的后端服务,配合重定向注解即可,下面是两种简单方案:
方案1:创建极简dummy服务配合重定向注解
先创建一个无业务逻辑的dummy服务和Pod(仅作为Ingress的后端占位):
# dummy-service.yaml apiVersion: v1 kind: Service metadata: name: dummy-service spec: ports: - port: 80 targetPort: 80 selector: app: dummy-pod --- apiVersion: v1 kind: Pod metadata: name: dummy-pod labels: app: dummy-pod spec: containers: - name: dummy-container image: nginx:alpine ports: - containerPort: 80
然后修改Ingress配置,使用permanent-redirect注解实现永久重定向(临时重定向用temporary-redirect):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: external-redirect annotations: # $request_uri 会保留原请求的路径和参数,不需要的话直接写目标域名即可 nginx.ingress.kubernetes.io/permanent-redirect: "https://www.external-website.com$request_uri" spec: rules: - host: your.domain.com http: paths: - path: / pathType: Prefix backend: service: name: dummy-service port: number: 80
方案2:复用Ingress Controller自带的默认后端
如果你不想额外创建dummy服务,可以直接使用Nginx Ingress Controller安装时自带的default-backend服务(名字通常是nginx-ingress-defaultbackend,具体名字可通过kubectl get svc -n <ingress-namespace>查看),Ingress配置修改为:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: external-redirect annotations: nginx.ingress.kubernetes.io/permanent-redirect: "https://www.external-website.com$request_uri" spec: rules: - host: your.domain.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-ingress-defaultbackend port: number: 80
配置生效后,所有访问your.domain.com的请求都会被永久重定向到目标外部域名,且保留原请求的路径和参数(如果需要的话)。
内容的提问来源于stack exchange,提问作者windowws
相关产品推荐
相关产品推荐

