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

问题描述 投票:1回答:2

我通过云控制台UI创建了一个带有Istio的私有GKE集群。该群集使用VPC Peering进行设置,以便能够访问另一个Google Cloud Project中的另一个私有GKE群集。

我在website命名空间中使用Kubernetes中的服务创建了一个部署(称为staging)。我的目标是使用Envoy代理使用Istio将此服务公开给外部世界。在VirtualService之后,我创建了必要的Gatewaythis guide

当运行“kubectl exec ...”访问私有集群中的pod时,我可以成功连接到website服务的内部IP地址,并通过“curl”查看该服务的输出。

我已经设置了NAT网关,因此私有群集中的pod可以连接到Internet。我在curl pod中通过website-ing各种非谷歌网页证实了这一点。

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

我把所有相关资源的完整YAML配置放在私人Gist中,这里是:https://gist.github.com/marceldegraaf/0f36ca817a8dba45ac97bf6b310ca282

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

kubernetes google-kubernetes-engine istio
2个回答
0
投票

看看你的要点我怀疑问题在于将Gateway加入到istio-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 pod中尝试匹配的内容。


-1
投票

从验证所有选项开始,将私有GKE集群与Istio暴露在外的唯一方法是使用Cloud NAT

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

© www.soinside.com 2019 - 2024. All rights reserved.