Istio入口网关:域名和端口转发

问题描述

我已经建立了一个Istio服务网格。到目前为止,一切正常。从外部,我只能使用http://www.mytest.com:41333之类的端口号进行访问。我需要怎么做才能将80转发到41333,以便可以通过http://www.mytest.com

访问它

这是我的网关:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
Metadata:
  name: mytest-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "www.mytest.com"

不确定该怎么做...

解决方法

我假设您的istio入口网关服务类型是NodePort,如果istio入口网关是NodePort,那么您必须使用http://www.mytest.com:41333

如果您想使用http://www.mytest.com,则必须将其更改为LoadBalancer

您可以通过以下方式检查您的istio入口网关是否为NodePort:

kubectl get svc -n istio-system 

并检查istio入口网关类型。

NodePort:在静态端口(NodePort)上的每个节点的IP上公开服务。将自动创建NodePort服务路由到的ClusterIP服务。您可以通过请求NodeIP:NodePort从集群外部联系NodePort服务。

LoadBalancer:使用云提供商的负载平衡器在外部公开服务。自动创建外部负载均衡器路由到的NodePort和ClusterIP服务。

如istio documentation

中所述

如果EXTERNAL-IP值为(或永久),则您的环境未为入口网关提供外部负载平衡器。在这种情况下,您可以使用服务的节点端口访问网关。


如果您像AWS一样使用云,则可以使用带有适当注释的AWS Load Balancer配置Istio。

在支持外部负载均衡器的云提供商上,将类型字段设置为LoadBalancer即可为您的服务配置负载均衡器。负载均衡器的实际创建是异步进行的,有关已配置的均衡器的信息已发布在服务的.status.loadBalancer


如果它是前提条件,例如minikube,那么您可以看看metalLB

MetalLB是使用标准路由协议的裸机Kubernetes集群的负载均衡器实现。

Kubernetes不提供用于裸机群集的网络负载平衡器(类型为LoadBalancer的服务)的实现。 Kubernetes附带的Network LB的实现都是调用各种IaaS平台(GCP,AWS,Azure等)的粘合代码。如果您不是在受支持的IaaS平台(GCP,AWS,Azure等)上运行,则LoadBalancers在创建后将无限期保持“待处理”状态。

裸机集群运营商只剩下两个较小的工具,即“ NodePort”和“ externalIPs”服务,可将用户流量引入其集群。这两种选择在生产用途上都有很大的缺点,这使裸金属集群成为Kubernetes生态系统中的二等公民。

MetalLB旨在通过提供与标准网络设备集成的Network LB实现来解决这种不平衡问题,从而使裸机群集上的外部服务也尽可能“正常运行”。

您可以在以下链接中了解更多信息:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...