0

我已经建立了一个 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"

不知道该怎么办...

4

1 回答 1

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文档中所述

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


如果您使用类似 aws 的云,您可以使用带有适当注释的 AWS 负载均衡器配置 Istio。

在支持外部负载均衡器的云提供商上,将 type 字段设置为 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 实现来纠正这种不平衡,以便裸机集群上的外部服务也尽可能“正常工作”。

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

于 2020-09-11T07:45:01.280 回答