在端口 80 上公开 Istio 网关

时间:2021-07-23 07:14:02

标签: kubernetes istio

我正在运行一个带有 1 个主节点和 3 个工作节点的裸机 Kubernetes 集群。我在内部部署了一堆服务,并将 Istio 作为入口网关。

一切正常,因为我可以使用入口网关 NodePort 从外部访问我的服务。

NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                      AGE
istio-ingressgateway   LoadBalancer   10.106.9.2       <pending>     15021:32402/TCP,80:31106/TCP,443:31791/TCP   2d23h
istiod                 ClusterIP      10.107.220.130   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP        2d23h

在我们的例子中是端口 31106

问题是,我不希望我的客户在端口 31106 上访问我的服务。这对用户不友好。那么有没有办法将80端口对外暴露?

换句话说,我希望他们能够输入 http://example.com:31106/ 而不是输入 http://example.com/

任何解决方案都可以提供帮助。

1 个答案:

答案 0 :(得分:1)

基于official documentation

<块引用>

如果设置了 EXTERNAL-IP 值,则您的环境具有可用于入口网关的外部负载平衡器。如果 EXTERNAL-IP 值为 <none>(或永久为 <pending>),则您的环境不会为入口网关提供外部负载均衡器。在这种情况下,您可以使用服务的 node port 访问网关。

这与David Maze在评论中所写的一致:

<块引用>

LoadBalancer 类型的服务将创建该负载均衡器,但前提是 Kubernetes 知道如何;也许查找 metallb 以了解它的实现。除非服务被删除和重新创建,否则 NodePort 端口号将保持稳定,在这种情况下,这意味着批量卸载并重新安装 Istio。

在您的情况下,您需要使用 NodePort 访问网关。然后就可以配置istio了。在 this doc 中一步一步地描述了一切。需要选择NodePort对应的指令,然后根据集群提供者设置入口IP。您还可以在文档中找到示例 yaml 文件。