我正在运行一个带有 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/
任何解决方案都可以提供帮助。
答案 0 :(得分:1)
如果设置了 EXTERNAL-IP
值,则您的环境具有可用于入口网关的外部负载平衡器。如果 EXTERNAL-IP
值为 <none>
(或永久为 <pending>
),则您的环境不会为入口网关提供外部负载均衡器。在这种情况下,您可以使用服务的 node port 访问网关。
这与David Maze在评论中所写的一致:
<块引用>LoadBalancer 类型的服务将创建该负载均衡器,但前提是 Kubernetes 知道如何;也许查找 metallb
以了解它的实现。除非服务被删除和重新创建,否则 NodePort
端口号将保持稳定,在这种情况下,这意味着批量卸载并重新安装 Istio。
在您的情况下,您需要使用 NodePort
访问网关。然后就可以配置istio了。在 this doc 中一步一步地描述了一切。需要选择NodePort
对应的指令,然后根据集群提供者设置入口IP。您还可以在文档中找到示例 yaml 文件。