【发布时间】:2021-10-14 18:30:20
【问题描述】:
我有一个用例,我们希望通过公司 HTTP 代理路由某些请求。根据this 指南,我能够成功配置外部访问。对于上下文,我添加了一个示例 ServiceEntry:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: proxy
spec:
addresses:
- 10.1.1.1
- 10.1.1.2
exportTo:
- .
hosts:
- foo.proxy # this is technically ignored when protocol is TCP
location: MESH_EXTERNAL
ports:
- name: tcp
number: 3128
protocol: TCP
当我们让应用程序自动解析到上述代理地址之一(即:主机文件条目)时,此方法有效。
为了提供自动 DNS 解析,我根据文档设置了 k8s Service without selectors。在 non istio 命名空间中,这允许我在没有主机文件条目的情况下解析 foo.proxy.default.cluster.local,例如:
curl -v --proxy foo.default.svc.cluster.local:3128 https://blah.com
但是,在具有现有 ServiceEntry(上图)的 istio 命名空间中,它会失败并返回 404 Not Found。日志显示:
2021-08-11T08:56:47.088919Z debug envoy router [C1114][S1115555414526221653] no cluster match for URL ''
2021-08-11T08:56:47.088928Z debug envoy http [C1114][S1115555414526221653] Sending local reply with details route_not_found
我能得到一些关于这可能出错的地方吗?
【问题讨论】:
-
您使用的是哪个 istio 版本,您是如何部署集群的?当请求被发送到与虚拟路由器提供程序下定义的任何路由定义的条件不匹配的虚拟服务时,这很可能会导致。通过确保路径和 HTTP 请求标头正确,确保来自应用程序的请求被发送到支持的路由。
-
@MikołajGłodziak 1.9 版。我还没有定义虚拟服务。除了 Service Entry 之外,这个命名空间没有应用其他 istio 配置。
-
您是如何设置集群的?您是否使用了一些云提供商(哪个?)
-
亚马逊 EKS。那么这对 istio.. 有何影响?
-
可能需要云提供商信息来复制问题。您的错误是特使路由器看不到集群所在的任何网址。他不知道该打哪里,因为他没有地址。尝试将主机名更改为完全限定的域名。这可能是因为您使用了不同的命名空间。让我知道这是否有帮助。
标签: kubernetes proxy istio