我已经建立了一个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"
不确定该怎么做...
答案 0 :(得分:1)
我假设您的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实现来解决这种不平衡问题,从而使裸机群集上的外部服务也尽可能“正常运行”。
您可以在以下链接中了解更多信息: