我通过云控制台UI创建了一个带有Istio的私有GKE集群。该群集使用VPC Peering进行设置,以便能够访问另一个Google Cloud Project中的另一个私有GKE群集。
我在website
命名空间中使用Kubernetes中的服务创建了一个部署(称为staging
)。我的目标是使用Envoy代理使用Istio将此服务公开给外部世界。在VirtualService
之后,我创建了必要的Gateway
和this 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
我想知道我的配置中是否遗漏了某些东西,或者我的用例实际上是不可能的?
看看你的要点我怀疑问题在于将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中尝试匹配的内容。