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

时间:2019-02-20 10:44:17

标签: kubernetes google-kubernetes-engine istio

我已经通过Cloud Console UI与Istio创建了私有GKE集群。该集群是通过VPC Peering设置的,能够访问另一个Google Cloud Project中的另一个私有GKE集群。

我在website命名空间的Kubernetes中创建了一个带有服务的部署(称为staging)。我的目标是使用Envoy代理通过Istio向外界公开此服务。在this guide之后,我已经创建了必要的VirtualServiceGateway

运行“ kubectl exec ...”以访问专用集群中的Pod时,我可以成功连接到website服务的内部IP地址,并使用“ curl”查看该服务的输出。

我已经设置了NAT网关,以便私有群集中的Pod可以连接到Internet。我通过curl窗格内的各种非Google网页进行了确认。

但是,如上所述,我无法使用website服务的website从外部连接到External IP服务。相反,istio-ingressgateway-导致curl导致超时。

我已将所有相关资源的完整YAML配置放在私有Gist中,位于:https://gist.github.com/marceldegraaf/0f36ca817a8dba45ac97bf6b310ca282

我想知道我是否在这里的配置中丢失了某些东西,或者我的用例实际上是不可能的?

3 个答案:

答案 0 :(得分:0)

看您的要领,我怀疑问题出在Gatewayistio-ingressgateway的结合上。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: website-gateway
  namespace: staging
  labels:
    version: v1
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "*"

尤其是我不相信selector部分是正确的。

您应该可以执行类似的操作
kubectl describe po -n istio-system istio-ingressgateway-rrrrrr-pppp
在Istio Ingress Gateway窗格中找出选择器要匹配的内容。

答案 1 :(得分:0)

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

在您的VirtualService上尝试一下:

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

答案 2 :(得分:-1)

从验证所有选项开始,将具有Istio的私有GKE群集公开给外部的唯一方法是使用Cloud NAT

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