我想在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/abc
至this.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/abc
或my.website.com/abc/aa
时,它将重定向到this.website.com
,而不是this.website.com/abc
或this.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控制器来完成。