Cod*_*123 3 nginx kubernetes nginx-ingress
我正在使用nginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com但想在重定向中的 / 之后传递参数。但是不能让它与纯 ingress-nginx 一起工作,如果你可以设置 /$1 或类似的东西,那就太好了。这是否可以与其他注释或技巧混合使用?
例如 https://www.example.com/hello
应该重定向到 https://www.google.com/hello
出奇的简单:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/permanent-redirect: http://www.google.com$request_uri
spec:
rules:
- host: www.example.com
http:
paths:
- path: /testpath
pathType: Prefix
backend:
serviceName: test
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
它导致这样的事情nginx.conf:
if ($uri ~* /) {
return 301 http://www.google.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
看来您可以在地址中使用任何nginx 变量。所以我想你也可以做类似的事情$scheme://www.google.com$request_uri:)
我首先尝试了一个nginx.ingress.kubernetes.io/server-snippet像这里另一个答案中建议的块,但是redirect 301 http://www.google.com$request_uri;劫持了太多nginx.conf并阻止了证书管理器的工作。所以我需要一个更好的集成解决方案。
如果你想调试,你可以nginx.conf自己看看,真的很简单:
$ kubectl exec -n nginx-ingress nginx-ingress-controller-*** -- cat /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)
可以通过以下ingress.kubernetes.io/configuration-snippet配置来执行这种重定向:
我的ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-redirect
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
return 301 http://www.google.com$request_uri;
spec:
rules:
- host: www.example.com
http:
paths:
- path: /
backend:
serviceName: servicename
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
应用入口配置:
$ kubectl apply -f ingress.yaml
ingress.extensions/ingress-redirect created
Run Code Online (Sandbox Code Playgroud)
验证入口配置并检查其address.
$ kubectl describe ingress
Name: ingress-redirect
Namespace: default
Address: 10.156.0.33
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
www.example.com
/ my-nginx:80 (<none>)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/server-snippet":"return 301 http://www.google.com$request_uri; \n"},"name":"ingress-redirect","namespace":"default"},"spec":{"rules":[{"host":"www.example.com","http":{"paths":[{"backend":{"serviceName":"my-nginx","servicePort":80},"path":"/"}]}}]}}
nginx.ingress.kubernetes.io/server-snippet: return 301 http://www.google.com$request_uri;
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 33m nginx-ingress-controller Ingress default/ingress-redirect
Normal UPDATE 30m (x2 over 33m) nginx-ingress-controller Ingress default/ingress-redirect
Run Code Online (Sandbox Code Playgroud)
最后测试重定向是否有效:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-redirect
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
return 301 http://www.google.com$request_uri;
spec:
rules:
- host: www.example.com
http:
paths:
- path: /
backend:
serviceName: servicename
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
确保您的入口控制器正常运行并为入口分配 IP 地址。请注意,即使没有端点服务,重定向也可以工作。
| 归档时间: |
|
| 查看次数: |
4091 次 |
| 最近记录: |