【发布时间】:2020-08-12 19:38:52
【问题描述】:
我有一种情况,我不确定自己是否做错了,或者 Istio 是否完全不支持该用例。这是我的设置:
我有一个 VirtualService 连接到一个 Gateway 以使某些 API 在外部可用,例如作为api1.example.com。 VirtualService 连接到一些 Service,它执行一些请求预处理(一些条件 URL 重写)。现在到了棘手的部分:服务应该将请求转发到一些 API 管理解决方案,该解决方案在同一集群上运行,在不同的命名空间中,并且没有启用 Istio。这通常有效,但我有一些额外的要求让我感到困扰。 API 管理需要知道请求最初发送到哪个端点(以应用正确的规则),因此当我将请求从我的服务转发到 API 管理 pod 时,HTTP Host 标头仍应为 api1.example.com .这是它中断的地方,我只收到502 Bad Gateway 错误。
现在这是完整的设置,但我认为您可以将其归结为以下设置(不幸的是,我目前无法访问可以创建和测试一些最小工作示例的集群):
-
pod1在启用 Istio 的namespace1中运行 -
pod2在禁用 Istio 的情况下在namespace2中运行,并暴露为service2
现在来自pod1 以下作品:
wget -qO- http://service2.namespace2.svc.cluster.local
但以下不是:
wget -qO- --header 'Host: api1.example.com' http://service2.namespace2.svc.cluster.local
非常感谢任何帮助或提示!
对提出的问题进行了一些更新:
- Istio 版本为 1.4.6
- 当我做
wget -qO- http://service2.namespace2.svc.cluster.local比pod2收到请求时,当我读取Host标头时,它是service2.namespace2.svc.cluster.local - 当我执行
wget -qO- --header 'Host: api1.example.com' http://service2.namespace2.svc.cluster.local时,请求根本不会到达pod2 -
istioctl proxy-config listeners pod1显示如下(pod1 中的服务运行在 1024 端口,pod2 中的服务运行在 80 端口)
ADDRESS PORT TYPE
100.96.4.131 1024 HTTP
100.96.4.131 15020 TCP
100.69.164.43 443 TCP
10.250.0.42 10250 TCP
10.250.0.47 10250 TCP
100.64.124.217 443 TCP
100.67.245.255 15011 TCP
10.250.0.46 10250 TCP
10.250.0.48 10250 TCP
10.250.0.9 10250 TCP
10.250.0.24 10250 TCP
10.250.0.50 10250 TCP
100.64.124.217 15032 TCP
100.64.0.1 443 TCP
10.250.0.108 10250 TCP
100.64.0.10 53 TCP
10.250.0.34 10250 TCP
10.250.0.8 10250 TCP
10.250.0.37 10250 TCP
100.64.124.217 15029 TCP
10.250.0.30 10250 TCP
10.250.0.36 10250 TCP
10.250.0.105 10250 TCP
100.64.124.217 15031 TCP
100.64.124.217 15030 TCP
10.250.0.92 10250 TCP
100.66.112.190 443 TCP
100.68.34.255 44134 TCP
100.64.124.217 15443 TCP
10.250.0.91 10250 TCP
10.250.0.97 10250 TCP
0.0.0.0 443 TCP
10.250.0.10 10250 TCP
10.250.0.45 10250 TCP
0.0.0.0 9943 TCP
100.64.132.219 9115 TCP
0.0.0.0 10249 TCP
100.70.99.95 443 TCP
100.65.54.197 26379 TCP
100.64.0.10 9153 TCP
0.0.0.0 9090 TCP
0.0.0.0 15014 TCP
100.71.44.89 6789 TCP
100.70.253.4 2020 TCP
0.0.0.0 9094 TCP
100.67.56.56 443 TCP
100.65.133.0 4314 TCP
0.0.0.0 4005 TCP
100.70.229.77 9411 TCP
0.0.0.0 9901 TCP
100.71.167.108 443 TCP
100.69.145.185 9093 TCP
100.70.32.142 443 TCP
100.66.233.175 42422 TCP
0.0.0.0 8080 TCP
100.69.114.203 6789 TCP
100.70.144.106 3300 TCP
0.0.0.0 20001 TCP
0.0.0.0 4004 TCP
0.0.0.0 9093 TCP
100.67.179.223 9000 TCP
100.70.18.125 3300 TCP
100.64.255.234 9090 TCP
100.66.197.157 9710 TCP
100.67.193.139 3300 TCP
100.69.114.203 3300 TCP
0.0.0.0 16909 TCP
0.0.0.0 3000 TCP
0.0.0.0 15004 TCP
100.68.54.218 9115 TCP
0.0.0.0 8060 TCP
0.0.0.0 8008 TCP
100.70.162.45 9115 TCP
0.0.0.0 15010 TCP
0.0.0.0 10054 TCP
100.65.13.208 5473 TCP
100.67.193.139 6789 TCP
100.71.44.89 3300 TCP
100.70.18.125 6789 TCP
100.67.56.56 8081 TCP
0.0.0.0 9411 TCP
0.0.0.0 2379 TCP
100.66.228.227 8081 TCP
0.0.0.0 9091 TCP
0.0.0.0 5556 TCP
100.64.124.217 15020 TCP
100.68.245.60 7000 TCP
0.0.0.0 9283 TCP
0.0.0.0 80 TCP
0.0.0.0 3100 TCP
100.66.228.227 8080 TCP
100.70.144.106 6789 TCP
0.0.0.0 1024 TCP
100.70.229.77 14268 TCP
0.0.0.0 15019 TCP
0.0.0.0 5558 TCP
100.70.229.77 14267 TCP
100.67.17.80 9100 TCP
0.0.0.0 15001 TCP
0.0.0.0 15006 TCP
100.96.1.142 443 TCP
0.0.0.0 15090 HTTP
【问题讨论】:
-
执行以下命令并提供输出:istioctl proxy-config listeners
[.namespace] -
bot 案例中 pod2 的日志是什么?如果 pod 需要标头,第一种情况如何工作?在第二个请求中,请求将到达带有此标头的 pod2,您能检查一下它到达那里的标头吗
-
您使用的是哪个 istio 版本?
标签: http-headers istio