Kubernetes 入口 nginx 重定向域,也适用于所有重定向域的子域



我想在Kubernetes ingress Nginx中重定向主域,但希望子域应用于重定向的主域。

以下是示例网站:my.website.com

在这个网站里面有很多子域,它们是/abc,/def,/abc/aa,/def/bb等。

对于我的Kubernetes入口Nginx,我想将my.website.com重定向到this.website.com,并希望所有子域重定向到this.website.com

下面是我想要的例子:

my.website.com/abcthis.website.com/abc

以下是我尝试过的重定向入口yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: https://this.website.com
name: redirect-subdomains-too
spec:
rules:
- host: my.website.com
http:
paths:
- backend:
serviceName: redirect-service
servicePort: 7990
path: /

显然,当我尝试my.website.com/abcmy.website.com/abc/aa时,它将重定向到this.website.com,而不是this.website.com/abcthis.website.com/abc/aa

如何编写此入口的脚本?

永久重定向就像所有东西的"硬代码"。您可能想要重写和/或server-snippet。然后,您可以为每个主机设置多个主机规则:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/server-snippet: |
if ($host ~ "my.website.com|my2.website.com")
{
rewrite ^ https://this.website.com$request_uri permanent;
}
name: redirect-subdomains-too
spec:
rules:
- host: my.website.com
http:
paths:
- backend:
serviceName: redirect-service
servicePort: 7990
path: (/|$)(.*)
- host: my2.website.com
http:
paths:
- backend:
serviceName: redirect-service
servicePort: 7990
path: (/|$)(.*)
- host: this.website.com
http:
paths:
- backend:
serviceName: redirect-service
servicePort: 7990
path: (/|$)(.*)

您总是可以通过运行来检查配置

kubectl exec -t <nginx-ingress-pod> cat nginx.conf

您只需要一个重定向到另一个URL的入口。。。

例如。。你有一个入口叫adonai.domain.com,还有一个叫eggs.domain.comhttp://eggs.domain.com您需要重定向到http://adonai.domain.com正确的这样做;

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: http://adonai.domain.com
name: web2
namespace: default
spec:
ingressClassName: nginx
rules:
- host: ovo.domain.com

您不需要后端或spec.rules中的其他设置。只需要主机来接收和重定向,其余的由ingress nginx控制器来完成。

最新更新