每个集群的网关可以拥有自己的端口或负载均衡器,与服务网格无关。默认情况下,每个 Rancher 配置的集群都有一个 NGINX Ingress 控制器,允许流量进入集群。

您可以在安装或不安装 Istio 的情况下使用 NGINX Ingress 控制器。如果这是集群的唯一网关,则 Istio 将能够在服务之间路由通信,但是 Istio 将无法从集群外部接收通信。

要允许 Istio 接收外部流量,您需要启用 Istio 的网关,该网关充当外部流量的南北代理。当您启用 Istio 网关时,结果是您的集群将有两个入口。

您还需要为您的服务设置一个 Kubernetes 网关。这一 Kubernetes 资源指向 Istio 对集群的入口网关的实现。

您可以使用负载均衡器或者 Istio 的 NodePort 网关将流量路由到服务网格中。本节介绍如何设置 NodePort 网关。

有关 Istio 网关的更多信息,请参阅Istio 文档

在启用Istio的集群中,您可以有两个入口:默认的Nginx Ingress和默认的Istio控制器

启用 Istio 网关

Ingress 网关是将在您的集群中部署的 Kubernetes 服务。每个集群只有一个 Istio 网关。

  1. 转到要允许外部流量进入 Istio 的集群。
  2. 单击工具 > Istio
  3. 展开Ingress 网关部分。
  4. 启用 Ingress 网关部分,单击。Istio 网关的默认服务类型是 NodePort。您也可以将其配置为负载均衡器
  5. (可选)配置该服务的端口,服务类型,节点选择器和容忍以及资源请求和限制。建议的最低资源是对 CPU 和内存的默认资源请求。
  6. 单击保存

结果: 部署了网关, Istio 可以从集群外部接收流量。

添加一个指向 Istio 网关的 Kubernetes 网关

为了允许流量到达 Ingress,您还需要在 YAML 中提供一个 Kubernetes 网关资源,该资源指向 Istio 对集群的 Ingress 网关的实现。

  1. 转到要在其中部署 Kubernetes 网关的命名空间,然后单击导入 YAML
  2. 将网关 YAML 作为文件上传或粘贴到表单中。下面提供了示例网关 YAML。
  3. 单击导入
  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: Gateway
  3. metadata:
  4. name: bookinfo-gateway
  5. spec:
  6. selector:
  7. istio: ingressgateway # use istio default controller
  8. servers:
  9. - port:
  10. number: 80
  11. name: http
  12. protocol: HTTP
  13. hosts:
  14. - "*"
  15. ---
  16. apiVersion: networking.istio.io/v1alpha3
  17. kind: VirtualService
  18. metadata:
  19. name: bookinfo
  20. spec:
  21. hosts:
  22. - "*"
  23. gateways:
  24. - bookinfo-gateway
  25. http:
  26. - match:
  27. - uri:
  28. exact: /productpage
  29. - uri:
  30. prefix: /static
  31. - uri:
  32. exact: /login
  33. - uri:
  34. exact: /logout
  35. - uri:
  36. prefix: /api/v1/products
  37. route:
  38. - destination:
  39. host: productpage
  40. port:
  41. number: 9080

结果: 您已经配置了网关资源,以便 Istio 可以从集群外部接收流量。

通过运行以下命令确认资源是否存在:

  1. kubectl get gateway -A

预期的结果是输出与下方类似的信息:

  1. NAME AGE
  2. bookinfo-gateway 64m

从 Web 浏览器访问 ProductPage 服务

要测试并查看 BookInfo 应用程序是否正确部署,可以使用 Istio 控制器 IP 和端口以及您的 Kubernetes 网关资源中指定的请求名称,在 Web 浏览器中查看该应用程序:

http://<IP of Istio controller>:<Port of istio controller>/productpage

要获取入口网关的 URL 和端口,

  1. 转到集群中的系统项目。
  2. 系统项目中,转到资源 > 工作负载,然后向下滚动到istio-system命名空间。
  3. istio-system内,有一个名为istio-ingressgateway的工作负载。在此工作负载的名称下,您应该看到像80/tcp这样的链接。
  4. 单击这些链接之一。这将在您的 Web 浏览器中显示入口网关的 URL。将/productpage附加到 URL。

结果: 您应该在 Web 浏览器中看到 BookInfo 应用。

关于如何获取 Istio 控制器的 URL 和端口,请参阅Istio 文档中的指令。

故障排查

Istio 官方文档建议使用kubectl命令检查正确的入口主机和入口端口是否有外部请求。

确认 Kubernetes 网关与 Istio 的 Ingress 控制器匹配

您可以尝试执行本节中的步骤,以确保正确配置 Kubernetes 网关。

在网关资源中,选择器通过其标签引用 Istio 的默认 Ingress 控制器,其中标签的键为istio,值为ingressgateway。为确保标签适用于网关,请执行以下操作:

  1. 转到集群中的系统项目。
  2. 系统项目中,转到命名空间istio-system
  3. istio-system命名空间中,找到一个名为istio-ingressgateway的工作负载。
  4. 单击此工作负载的名称,然后转到标签/注释部分。您应该看到它具有键istio和值ingressgateway。这确认网关资源中的选择器与 Istio 的默认 Ingress 控制器匹配。

后续操作

设置 Istio 的流量管理组件