Kubernetes GKE/Istio:外部世界无法连接到私有集群中的服务

Kubernetes GKE/Istio:外部世界无法连接到私有集群中的服务,kubernetes,google-kubernetes-engine,istio,Kubernetes,Google Kubernetes Engine,Istio,我已经通过云控制台UI使用Istio创建了一个私有GKE集群。该集群通过VPC对等进行设置,以便能够访问另一个Google云项目中的另一个私有GKE集群 我已经创建了一个名为website的部署,在staging名称空间中的Kubernetes中有一个服务。我的目标是使用特使代理,通过Istio向外部世界公开此服务。我已经创建了必要的VirtualService和网关,如下所示 运行kubectl exec时。。。要访问私有集群中的pod,我可以成功连接到网站服务的内部IP地址,并使用curl查

我已经通过云控制台UI使用Istio创建了一个私有GKE集群。该集群通过VPC对等进行设置,以便能够访问另一个Google云项目中的另一个私有GKE集群

我已经创建了一个名为website的部署,在staging名称空间中的Kubernetes中有一个服务。我的目标是使用特使代理,通过Istio向外部世界公开此服务。我已经创建了必要的VirtualService和网关,如下所示

运行kubectl exec时。。。要访问私有集群中的pod,我可以成功连接到网站服务的内部IP地址,并使用curl查看该服务的输出

我已经设置了一个NAT网关,这样私有集群中的POD就可以连接到Internet。我通过从网站pod中卷曲各种非谷歌网页来证实这一点

但是,正如上面提到的指南,我无法使用istio ingressgateway服务的外部IP从外部连接到网站服务。相反,对外部IP进行加密会导致超时

我已经将所有相关资源的完整YAML配置放在了一个私有Gist中,如下所示:


我想知道我的配置中是否遗漏了什么,或者我的用例实际上是不可能的?

看看你的要点,我怀疑问题在于将网关连接到istio入口网关

特别是我不相信选择器部分是正确的

你应该可以做一些类似的事情 kubectl描述了istio系统istio-ingressgateway-RRRR-pppp
要了解Istio入口网关pod中选择器试图匹配的内容。

查看您的要点,我怀疑问题在于将网关连接到Istio入口网关

特别是我不相信选择器部分是正确的

你应该可以做一些类似的事情 kubectl描述了istio系统istio-ingressgateway-RRRR-pppp
要了解选择器在Istio入口网关pod中试图匹配的内容。

通过验证所有选项,将带有Istio的专用GKE群集暴露于外部的唯一方法是使用


由于GKE中的主节点是一个托管服务,因此在私有集群中使用Istio时存在当前限制。完成用例的唯一解决方法是使用云NAT。我还附上了一篇关于如何开始使用Cloud NAT的文章。

通过验证所有选项,将带有Istio的私有GKE集群对外公开的唯一方法是使用


由于GKE中的主节点是一个托管服务,因此在私有集群中使用Istio时存在当前限制。完成用例的唯一解决方法是使用云NAT。我还附上了一篇关于如何开始使用云NAT的文章。

我也遇到了同样的问题。就我而言,istio虚拟服务找不到我的服务

在您的VirtualService上尝试以下操作:

   route:
   - destination:
       host: website
       port: 
         number: 80

我也有同样的问题。就我而言,istio虚拟服务找不到我的服务

在您的VirtualService上尝试以下操作:

   route:
   - destination:
       host: website
       port: 
         number: 80

如果您只是使用节点的外部IP,而不是负载均衡器或入口,则需要确保GCE防火墙规则允许通信。@PaulAnnetts感谢您的回复。istio ingressgateway的外部IP绑定到云负载平衡器中的转发规则,GKE节点作为目标池。我添加了一个防火墙规则,明确允许整个网络中所有TCP:80上的传入流量,但即使这样,我对外部IP的卷曲也会导致超时。你知道我遗漏了什么吗?你查过istio ingressgateway的日志了吗?如果您的服务被点击,并且该服务有一些错误,它将显示在日志中。谢谢您的回复@mjkool。在检查istio ingressgateway日志时,在尝试从外部访问外部IP时,我没有看到任何请求传入。当我试图从集群内部卷曲istio ingressgateway时,我确实在它的日志中看到了请求。@MarceldeGraaf,有什么解决方案吗?如果你只是使用节点的外部IP,而不是负载均衡器或入口,你需要确保你的GCE防火墙规则允许流量。@Paulannett谢谢你的回复。istio ingressgateway的外部IP绑定到云负载平衡器中的转发规则,GKE节点作为目标池。我添加了一个防火墙规则,明确允许整个网络中所有TCP:80上的传入流量,但即使这样,我对外部IP的卷曲也会导致超时。你知道我遗漏了什么吗?你查过istio ingressgateway的日志了吗?如果您的服务被点击,并且该服务有一些错误,它将显示在日志中。谢谢您的回复@mjkool。在检查istio ingressgateway日志时,在尝试从外部访问外部IP时,我没有看到任何请求传入。我确实在istio ingressga的日志中看到了请求
特威,当我试图从集群内部卷曲它时。@MarceldeGraaf,有什么解决方法吗?谢谢!istio ingressgateway似乎有这个标签,请参见此处的kubectl Descripte pod的输出:。这应该可以正确地将网关连接到istio入口网关吊舱,对吗?您是否检查了GCP负载平衡器的日志,此外,LB的运行状况检查是否处于正常状态?LB运行状况检查为绿色,负载平衡器日志中没有错误。好的,因此LB正在对话-如果正确连接,您应该能够从istio ingressgateway吊舱中的LB ping中找到日志项。谢谢!istio ingressgateway似乎有这个标签,请参见此处的kubectl Descripte pod的输出:。这应该可以正确地将网关连接到istio入口网关吊舱,对吗?您是否检查了GCP负载平衡器的日志,此外,LB的运行状况检查是否处于正常状态?LB运行状况检查为绿色,负载平衡器日志中没有错误。好的,因此LB正在对话-如果正确连接,您应该能够从istio ingressgateway吊舱中的LB ping中找到日志项。谢谢!我确实设置了Cloud NAT,但正如我在原始问题中提到的,这并不能解决我的问题;但是,使用单独的NAT网关,它将无法工作。正如您在原始帖子中提到的,您只提到使用NAT网关。请确保您专门使用Google Cloud NAT来允许集群进行外部通信。谢谢!我确实设置了Cloud NAT,但正如我在原始问题中提到的,这并不能解决我的问题;但是,使用单独的NAT网关,它将无法工作。正如您在原始帖子中提到的,您只提到使用NAT网关。确保您专门使用Google Cloud NAT来允许集群进行外部通信。