从 Internet 浏览 Istio/k8s 项服务

browsing Istio/k8s services from internet

我已经开始阅读 Istio-in-action(Manning 着)和 Mastering-service-mesh(Packt 着),有些例子我无法 'see' 正确输出。 我在 Ubuntu 20.04 的笔记本电脑上工作,我将 [kind] 用于我的本地 k8s 集群,我可以在其中创建 3 个或更多工作节点。

当我部署一些 Istio 资源(例如虚拟服务)时,我想从我的 Ubuntu 浏览器或不同的客户端(不同的笔记本电脑或手机 phone 浏览服务网格) 但它遗漏了我的 'infrastructure' 中的某些内容 - 是外部负载平衡器还是某些本地 Ubuntu 配置?是否必须与 public 云提供商合作 - GCP/AWS/Azure ;如果是,哪个最简单?我试过 kubectl port-forward 但没有成功。

即使没有 ExternalIP,其他资源也可以(例如 istioctl dashboard kiali/jaeger/prometheus)。

你能帮我找到一个博客或 tutorial/hint/advice 关于从 Internet 浏览 k8s/Istio 服务的必要元素吗?

提前致谢!

在启用 istio-ingressgateway 的情况下安装 istio 时,会在 istio-system 命名空间中创建具有该名称的服务。

❯ kubectl get svc -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)
istio-ingressgateway   LoadBalancer   100.71.98.21     <pending>     80:32564:80/TCP,...

将 istio 部署到 public 云提供商时,将为您创建一个负载均衡器(如 AWS ELB)。设置完成后,EXTERNAL-IP 将从 <pending> 切换到实际 ip,即负载均衡器的 public ip。您可以通过访问该 ip 来访问您的集群。

在您的本地设置中,您没有这种奢侈。但是服务仍然被创建。在 PORT(S) 列中,您可以看到一堆端口。那实际上是一个端口映射。所以你的节点机器的端口被映射到那个服务。

您使用它来获取映射到 http 的端口(端口 80):对我来说,它将是 32564。或者你可以 运行 这个:

kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'

现在只需打开您的浏览器并使用您工作人员的 ip 访问集群 <NODE_IP>:<PORT>(其中 PORT 是上面的那个)。

docs