您可以在安装或不安装 Istio 的情况下使用 NGINX Ingress 控制器。如果这是集群的唯一网关,则 Istio 将能够在服务之间路由通信,但是 Istio 将无法从集群外部接收通信。
要允许 Istio 接收外部流量,您需要启用 Istio 的网关,该网关充当外部流量的南北代理。当您启用 Istio 网关时,结果是您的集群将有两个入口。
您还需要为您的服务设置一个 Kubernetes 网关。这一 Kubernetes 资源指向 Istio 对集群的入口网关的实现。
您可以使用负载均衡器或者 Istio 的 NodePort 网关将流量路由到服务网格中。本节介绍如何设置 NodePort 网关。
有关 Istio 网关的更多信息,请参阅Istio 文档。
。
- 转到要允许外部流量进入 Istio 的集群。
- 展开Ingress 网关部分。
- 在启用 Ingress 网关部分,单击是。Istio 网关的默认服务类型是 NodePort。您也可以将其配置为负载均衡器。
- (可选)配置该服务的端口,服务类型,节点选择器和容忍以及资源请求和限制。建议的最低资源是对 CPU 和内存的默认资源请求。
- 单击保存。
结果: 部署了网关, Istio 可以从集群外部接收流量。
添加一个指向 Istio 网关的 Kubernetes 网关
为了允许流量到达 Ingress,您还需要在 YAML 中提供一个 Kubernetes 网关资源,该资源指向 Istio 对集群的 Ingress 网关的实现。
- 转到要在其中部署 Kubernetes 网关的命名空间,然后单击导入 YAML。
- 将网关 YAML 作为文件上传或粘贴到表单中。下面提供了示例网关 YAML。
结果: 您已经配置了网关资源,以便 Istio 可以从集群外部接收流量。
通过运行以下命令确认资源是否存在:
预期的结果是输出与下方类似的信息:
要测试并查看 BookInfo 应用程序是否正确部署,可以使用 Istio 控制器 IP 和端口以及您的 Kubernetes 网关资源中指定的请求名称,在 Web 浏览器中查看该应用程序:
要获取入口网关的 URL 和端口,
- 转到集群中的
系统
项目。 - 在
系统
项目中,转到资源
>工作负载
,然后向下滚动到istio-system
命名空间。 - 在内,有一个名为
istio-ingressgateway
的工作负载。在此工作负载的名称下,您应该看到像80/tcp
这样的链接。 - 单击这些链接之一。这将在您的 Web 浏览器中显示入口网关的 URL。将
/productpage
附加到 URL。
结果: 您应该在 Web 浏览器中看到 BookInfo 应用。
关于如何获取 Istio 控制器的 URL 和端口,请参阅Istio 文档中的指令。
故障排查
Istio 官方文档建议使用kubectl
命令检查正确的入口主机和入口端口是否有外部请求。
您可以尝试执行本节中的步骤,以确保正确配置 Kubernetes 网关。
在网关资源中,选择器通过其标签引用 Istio 的默认 Ingress 控制器,其中标签的键为istio
,值为。为确保标签适用于网关,请执行以下操作:
- 转到集群中的
系统
项目。 - 在
系统
项目中,转到命名空间istio-system
。 - 单击此工作负载的名称,然后转到标签/注释部分。您应该看到它具有键和值
ingressgateway
。这确认网关资源中的选择器与 Istio 的默认 Ingress 控制器匹配。