在端口 80 上公开 Istio 网关

expose Istio-gateway on port 80

我是 运行 具有 1 个主节点和 3 个工作节点的裸机 Kubernetes 集群。我在内部部署了一堆服务,使用 Istio 作为 Ingress-gateway。

一切正常,因为我可以使用入口网关 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/ , I want them to be able to type http://example.com/

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

基于official documentation:

If the EXTERNAL-IP value is set, your environment has an external load balancer that you can use for the ingress gateway. If the EXTERNAL-IP value is <none> (or perpetually <pending>), your environment does not provide an external load balancer for the ingress gateway. In this case, you can access the gateway using the service’s node port.

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

A LoadBalancer-type service would create that load balancer, but only if Kubernetes knows how; maybe look up metallb for an implementation of that. The NodePort port number will be stable unless the service gets deleted and recreated, which in this case would mean wholesale uninstalling and reinstalling Istio.

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