Tic*_*Jit 3 nginx docker kubernetes
更新 2.我想将所有流量添加并转发到localhost/admin/而不是localhost/.
localhost/(然后通过应用获取302 localhost/login),localhost/overview,localhost/books/details, ETC。localhost/admin/localhost/admin/login(通过申请获得302 )localhost/admin/overviewlocalhost/admin/books/detailslocalhost/admin/(我localhost/login通过申请得到了302),
我也可以使用ingrees-nginx-controller而不是安装文件。
在 docker nginx.conf 中(或类似于 k8s)
server {
listen 80 default_server;
listen [::]:80 default_server;
...
location /admin {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host/admin;
proxy_pass http://<conteiner2>.docker-network;
}
...
}
Run Code Online (Sandbox Code Playgroud)
Update1
对于 kubernetes,我正在尝试设置为此,ingress-nginx
我安装了并使用此 YAMLingress-nginx-controller设置:ingress-nginx
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Host $host";
more_set_headers "X-Real-IP $remote_addr";
more_set_headers "X-Forwarded-For $proxy_add_x_forwarded_for";
more_set_headers "X-Forwarded-Proto $scheme";
more_set_headers "X-Forwarded-Host $host/admin";
name: test-ingress
namespace: <namespace>
spec:
rules:
- http:
paths:
- path: /admin
backend:
serviceName: <app1>-admin
servicePort: 8002
Run Code Online (Sandbox Code Playgroud)
所以,这里发生了一些事情;最重要的是:
proxy_set_header X-Forwarded-Host $host/admin;
proxy_pass http://<conteiner2>.docker-network;
Run Code Online (Sandbox Code Playgroud)
是不正确的,因为x-forwarded-HOST不应包含uri,就像您所使用的那样/admin:它应该只是$host; 您真正想要的是更新proxy_pass以包含,$request_uri正如您可以观察到使用 nginx Ingress 控制器时生成的 nginx.conf 所做的那样。等待位置的 URI/admin以及该位置中的任何其他匹配项将按预期传递到上游:
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://<conteiner2>.docker-network$request_uri;
# or you're free to hard-code /admin if you prefer:
proxy_pass http://<conteiner2>.docker-network/admin;
Run Code Online (Sandbox Code Playgroud)
其次,如果您希望将某些路由configuration-snippet:应用于一个 URI,而不是同时应用于两个 URI,则将这两个路由拆分为两个单独的 Ingress 资源,以便可以独立管理它们:
proxy_set_header X-Forwarded-Host $host/admin;
proxy_pass http://<conteiner2>.docker-network;
Run Code Online (Sandbox Code Playgroud)
有什么想法如何调试 nginx 代理吗?
有两种很好的方法:首先,获取生成的 nginx.conf 并仔细阅读它,看看您期望发生的情况与实际发生的情况:
kubectl cp ${the_nginx_controller_pod}:/etc/nginx/nginx.conf ingress-nginx.conf
Run Code Online (Sandbox Code Playgroud)
另一种方法是将nginx 日志级别设置为debug(如果您尝试在生产环境中进行调试,这可能会出现问题,因为它会生成绝对疯狂的文本量,但它几乎肯定会给出任何问题的实际答案)您正在尝试调试):
# the ConfigMap may be named differently in your setup:
$ kubectl edit configmap nginx-ingress-controller
# and add:
data:
error-log-level: debug
# then wait a few seconds for nginx to notice the configmap change
# and if it doesn't, kill the controller pods to force the reload
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17134 次 |
| 最近记录: |