我在Azure云上使用Kubernetes,并且已经安装了zipkin。 我已经安装了nginx ingress,并且如果使用以下主机规则,则可以正常运行:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
namespace: nginx-ingress
spec:
- host: zipkin.hostname.com
http:
paths:
- backend:
serviceName: zipkin
servicePort: 9411
但这不是我想要的。我想要的是诸如hostname.com/zipkin之类的东西。
我尝试过此操作,但出现404错误:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
namespace: nginx-ingress
spec:
rules:
- http:
paths:
- path: /zipkin
backend:
serviceName: zipkin
servicePort: 9411
我该怎么办?
编辑: 我试图添加主机,并在执行describe命令后得到了这个信息
Name: NAME
Namespace: NAMESPACE
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
hostname.com
/zipkin zipkin:9411 (10.244.0.63:9411)
编辑: 我通过添加重写规则注释解决了我的问题
nginx.org/rewrites: >
serviceName=zipkin rewrite=/;
答案 0 :(得分:0)
这是因为您在这里没有提到new RestTemplateXhrTransport()
:
host
答案 1 :(得分:0)
首先,上一个答案是错误的,除非您要设置DNS,否则无需指定host
,这不是强制性的。
第二,后端zipkin
需要/zipkin
URI来响应吗?如果是这种情况,则重写批注将删除URI。因此,您需要像这样更改yaml,以将/zipkin
传递到您的后端。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
namespace: nginx-ingress
spec:
rules:
- http:
paths:
- path: /zipkin
backend:
serviceName: zipkin
servicePort: 9411
答案 2 :(得分:0)
只是为了阐明OP问题。
注意:
创建入口时,应使用适当的ingress.class注释每个入口,以指示如果集群中存在多个入口控制器,则应使用哪个入口控制器。
如果您未定义类,则您的云提供商可能会使用默认的入口控制器。
理想情况下,所有入口控制器都应满足此规范,但是各种入口控制器的操作略有不同。
使用此注释:
<Route>
您似乎正在使用nginxinc提供的NGINX Ingress Controller。
您可以找到有关nginxinc here为NGINX Ingress Controller提供的重写支持的更多信息。
示例:
react-router
它与kubernetes/ingress-nginx repo的kubernetes社区不同。 不同的入口控制器具有不同的配置和注释。
因此对于此示例:
Main
测试:
nginx.org/rewrites: >
serviceName=zipkin rewrite=/;