我想重定向nginxingress kubernete中的域。
https://test.example.io/preview/qLxiVcDGxCaQ134650121853FTg4
如果在urlpreview
中出现更改域重定向
https://test.app.example.io/preview/qLxiVcDGxCaQ134650121853FTg4
我在尝试
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/cluster-issuer: staging
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
name: staging-ingress
spec:
rules:
- host: test.example.io
http:
paths:
- path: /
backend:
serviceName: service-1
servicePort: 80
- path: /preview/*
backend:
url:
serviceName: service-2
servicePort: 80
tls:
- hosts:
- test.example.io
secretName: staging
对于简单的nginx块就像
location ~ /preview
{
rewrite /preview https://test.app.example.com$uri permanent;
}
我的逻辑思维,试试看:
metadata:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite /preview https://test.app.example.com$uri permanent;
spec:
rules:
- host: test.example.io
http:
paths:
- path: /
backend:
serviceName: service-1
servicePort: 80
- host: test.app.example.io
http:
paths:
- path: /preview/*
backend:
serviceName: service-2
servicePort: 80
希望它能起作用!
关于上面的代码:您不应该使用访问:https://test.app.example.io/preview/(它只是重定向链接(。
使用nginx入口注释
nginx.ingress.kubernetes.io/server-snippet: |
location ~ /preview {
rewrite /preview https://test.app.example.com$uri permanent;
}
我可能会迟到,但我认为接受的解决方案不能完全回答最初的问题。
在重定向到新主机之前,我们可以使用ngx_http_rewrite_module
提供的NGINX的条件URL重写来检测主机是否与初始域匹配。这里,条件基于主机名:$host
(NGINX中也提供了其他var,用于更高级的配置(。
nginx.ingress.kubernetes.io/server-snippet: |
if ($host = "<OLD_HOSTNAME>") {
rewrite /preview $scheme://<NEW_HOSTNAME>$uri permanent;
}
此外,我同意OP关于这一点的评论,我不建议对这种自定义配置使用nginx.ingress.kubernetes.io/configuration-snippet
,因为这种片段会将自定义配置添加到每个入口规则的location
块中。
相反,如果我们仍然想使用注释片段,请使用nginx.ingress.kubernetes.io/server-snippet
添加一个将应用于整个NGINX实例的配置。此外,它可能会导致意想不到的结果。
试试这个-
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
certmanager.k8s.io/cluster-issuer: staging
nginx.ingress.kubernetes.io/rewrite-target: /$1
kubernetes.io/ingress.class: nginx
name: staging-ingress
spec:
rules:
- host: test.example.io
http:
paths:
- path: /(.*)
backend:
serviceName: service-1
servicePort: 80
- path: /preview/(.*)
backend:
serviceName: service-2
servicePort: 80
tls:
- hosts:
- test.example.io
secretName: staging
你也可以引用这个,代表的同义类型