我正在尝试在Kubernetes上将Istio设置为入口 Controller 。问题是我的两个应用程序似乎可以从Istio入口 Controller 节点端口(例如http://[host]:31380/application1
http://[host]:31380/application2),但无法从443/80访问。

我是Kubernetes和Istio的新手,所以我使用https://istio.io/docs/guides/bookinfo/指南作为参考。遵循该指南非常容易,我能够使用所提到的节点端口访问Bookinfo应用程序。我无法从443/80访问它。我使用 Helm chart 来安装Istio。我也没有在Kubernetes仪表板的Ingress下看到任何东西。

这是网关/虚拟服务yaml的示例:

apiVersion:networking.istio.io/v1alpha3
种类:网关
元数据:
名称:myapp-gateway
规格:
选择器:
istio:ingressgateway#使用istio默认 Controller
服务器:
- 港口:
数:80
名称:http
协议(protocol):HTTP
主持人:
-“*”
---
apiVersion:networking.istio.io/v1alpha3
种类:VirtualService
元数据:
名称:myapp-virtual-service
规格:
主持人:
-“*”
网关:
-myapp网关
http:
- 比赛:
-uri:
前缀:/ myapp
路线:
-目的地:
主持人:myapp-app-service
港口:
编号:7080
- 比赛:
-uri:
字首: /
路线:
-目的地:
主持人:kibana
港口:
编号:5601

我需要做什么才能让它在443上收听?我是否完全缺少组件?

最佳答案

如果需要路由到您的应用程序才能在443/80上运行,则您的Kubernetes群集必须部署了外部负载均衡器。如果不存在,流量将被路由到入口节点端口。

请参考-https://istio.io/docs/tasks/traffic-management/ingress/#determining-the-ingress-ip-and-ports(确定入口IP和端口):

“如果设置了EXTERNAL-IP值,则您的环境具有可用于入口网关的外部负载平衡器。如果EXTERNAL-IP值是(或永久),则您的环境不为入口提供外部负载平衡器网关。在这种情况下,您可以使用服务的节点端口访问网关。”

我的没有外部负载均衡器的裸机实例的示例:

[admin @ master1〜] $ kubectl get svc -n istio-system |格雷普女歌手
istio-ingress LoadBalancer 10.114.107.196 80:32400 / TCP,443:31564 / TCP 5d
istio-ingressgateway负载均衡器10.99.1.148 80:31380 / TCP,443:31390 / TCP,31400:31400 / TCP 5d

如果要部署到诸如IBM Bluemix(可能是AWS / Azure /等)之类的在线云提供商,则应该已经配置了一个。如果您的配置是裸机,则可能未配置负载均衡器。

我的带有外部负载均衡器的Bluemix实例的示例:

λkubectl get svc -n组织系统|格雷普女歌手
负载平衡器172.21.26.25 123.45.67.195 80:32000 / TCP,443:31694 / TCP 6h
istio-ingressgateway负载均衡器172.21.139.142 123.45.67.196 80:31380 / TCP,443:31390 / TCP,31400:31400 / TCP 6h

我还没有回去将负载均衡器部署到裸机上,所以想听听是否有人这样做。我简要地看了一下Metal,但并没有花太多时间。

关于routing - 具有Istio Ingress的Kubernetes无法在标准HTTP端口443/80上运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51331902/

10-15 22:29