首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Istio和HTTP主机报头

Istio和HTTP主机报头
EN

Stack Overflow用户
提问于 2020-06-28 09:28:32
回答 1查看 3K关注 0票数 1

我有一种情况,我不确定我是否做错了什么,或者用例是否完全没有得到Istio的支持。这是我的设计:

我有一个连接到VirtualServiceGateway,以使某些API在外部可用,例如api1.example.comVirtualService连接到执行某些请求预处理(一些条件URL重写)的Service。现在有一个棘手的部分:服务应该将请求转发到某个API管理解决方案,该API管理解决方案运行在同一个集群上,在不同的命名空间中运行,并且不启用Istio。总的来说,这是可行的,但我有一些额外的要求困扰着我。API管理需要知道请求最初发送到哪个端点(以应用正确的规则),因此当我将请求从服务转发到API管理荚时,HTTP报头仍然应该是Host。这就是它崩溃的地方,我只得到了502 Bad Gateway错误。

现在,这是完整的设置,但我认为您可以将其归结为下面的设置(不幸的是,我目前无法访问某个集群,在那里我可以创建和测试一些最小的工作示例):

  • pod1在启用Istio的namespace1中运行
  • pod2在禁用Istio的情况下在namespace2中运行,并公开为service2

现在,来自pod1的工作如下:

代码语言:javascript
复制
wget -qO- http://service2.namespace2.svc.cluster.local

但以下情况并非如此:

代码语言:javascript
复制
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上)
代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-12 11:33:02

为了能够在istio注入的服务和外部服务( istio Mesh)之间进行通信,您需要使用ServiceEntry对象。

根据istio 文档

ServiceEntry允许向Istio的内部服务注册中心添加额外的条目,这样在mesh中自动发现的服务就可以访问/路由到这些手动指定的服务。服务条目描述服务的属性(DNS名称、VIP、端口、协议、端点)。这些服务可以是网格之外的服务(例如,web ),也可以是不属于平台服务注册中心一部分的网格内部服务(例如,一组在Kubernetes中与服务对话的VM)。此外,还可以使用workloadSelector字段动态地选择服务条目的端点。这些端点可以是使用WorkloadEntry对象或Kubernetes荚声明的VM工作负载。在单个服务下同时选择pods和VM的能力允许将服务从VM迁移到Kubernetes,而不必更改与服务关联的现有DNS名称。

就像你提到的:

在启用Istio的情况下在namespace1中运行的pod1

pod2,在禁用Istio的情况下在namespace2中运行,并公开为service2

在这个场景中,service2将需要一个ServiceEntry对象来将其添加到Istio注册中心。这将使service2可以像在Istio中一样被使用。请注意,需要特使代理的istio特性不会适用于此服务,因为它实际上没有注入istio。

我建议遵循这个istio 访问外部服务指南。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62620648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档