当前位置: 首页 > 知识库问答 >
问题:

在没有端口的情况下访问Istio部署的网站

蒋星雨
2023-03-14

我有几个AWS EC2实例,并在它们上部署了一个Rancher实例。在Rancher上,我使用Kubernetes部署了一个网站,它使用Istio部署来处理网络,我可以通过http://portal.website.com:31380登录。我还使用AWS路由53来使URL工作,并使用nginx来实现跨EC2实例的负载平衡。

但是我希望能够只使用http://portal.website.com登录,因此删除端口。我有办法做到这一点吗?

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
 name: portal-gateway
spec:
 selector:
   istio: ingressgateway
 servers:
 - port:
     number: 80
     name: http
     protocol: HTTP
   hosts:
   - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: ingress
spec:
 hosts:
 - "*"
 gateways:
 - portal-gateway
 http:
 - match:
   - uri:
       prefix: "/"
   rewrite:
     uri: "/"
   route:
   - destination:
       host: portal
       port:
         number: 80
   websocketUpgrade: true
---
apiVersion: v1
kind: Service
metadata:
 name: portal
spec:
 ports:
   - protocol: TCP
     port: 80
     targetPort: 8080
 selector:
   app: portal
 type: ClusterIP

编辑:我在31380上访问它,因为它被设置为使用NodePort(https://kubernetes.io/docs/concepts/services-networking/service/#NodePort)。Istio文档表示如果外部IP值为 (或永久 ),则环境不为入口网关提供外部负载均衡器。在本例中,您可以使用服务的节点端口访问网关。

名称类型集群-IP外部-IP端口年龄istio-ingressgateway NodePort 10.43.200.101 15020:30051/TCP、80:31380/TCP、443:31390/TCP、31400:31400/TCP、15029:30419/TCP、15030:30306/TCP、15031:31130/TCP、15032:32720/TCP、15443:30361/TCP 3H27M

共有1个答案

璩无尘
2023-03-14

正如您提到的,istio文档说

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

如果我们看一下kubernetes关于NodePort的文档

我看到你使用aws,所以你可以在下面的链接中阅读更多关于它的信息:

  • https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html
  • https://istio.io/latest/blog/2018/aws-nlb/

如果是在前提下,那么你可以看看金属

MetalB是一个用于裸机Kubernetes集群的负载平衡器实现,使用标准路由协议。

Kubernetes没有为裸机集群提供网络负载平衡器(LoadBalancer类型的服务)的实现。Kubernetes提供的Network LB的实现都是调用各种IaaS平台(GCP、AWS、Azure……)的粘合代码。如果您没有在受支持的IaaS平台(GCP、AWS、Azure……)上运行,LoadBalancers在创建时将无限期地处于“挂起”状态。

裸机集群运营商只剩下两个较小的工具将用户流量带入其集群,即“Nodeport”和“Externalips”服务。这两种选择对生产使用都有明显的不利影响,这使得裸金属集群在Kubernetes生态系统中成为二等公民。

    null
 类似资料:
  • 问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con

  • 问题内容: 我可以在没有jQuery的情况下访问数据属性吗? 使用jQuery很容易,但是如果没有jQuery,我在任何地方都看不到该怎么做。 如果我在Google上搜索“没有jQuery”,那么我得到的只是jQuery示例。 可能吗 问题答案: 在这里,我找到了这个例子: 因此,它看起来非常可行。

  • 问题内容: 当然,这个问题可能不是树莓派所特有的。另外,我对Linux还比较陌生。 我想编写一个小库(在node.js中,如果有关系的话),以使用sysfs访问树莓派的GPIO。但是,访问sysfs需要sudo访问,这很明显是有原因的。 Quick2Wire似乎有解决方案,但我想更好地理解它,而不仅仅是盲目使用。他们当然使用了C,但是据我了解,代码并不复杂,即使不那么优雅,也可以仅使用bash即可

  • 我有一个使用webhdfs管理HDFS的工作应用程序。我需要能够在Kerberos安全集群上执行此操作。 问题是,没有库或扩展来协商我的应用程序的票,我只有一个基本的HTTP客户端。 是否可以创建一个Java服务来处理票证交换,并且一旦它获得服务票证,就将其传递给应用程序以在HTTP请求中使用?换句话说,我的应用程序会要求Java服务协商票证,它会将服务票证以字符串或原始字符串的形式返回给我的应用

  • 我在项目中定义了一个模型类。和往常一样,它有一些私有变量和公共的获取者和设置者 假设在其他类中我使用这个模型,就像 然后person的私有变量保存值“my name”,我使用类的public getter访问变量,如 所以据我所知的人。getMark()返回私有变量名的引用,因此如果我修改局部变量“localMark”,它将影响Person类的私有变量,因此它会破坏变量的私有属性 前任: 我猜大多

  • 问题内容: 我有一个使用WebHDFS管理HDFS的有效应用程序。我需要能够在Kerberos受保护的群集上执行此操作。 问题是,没有库或扩展程序可以为我的应用程序协商票证,我只有一个基本的HTTP客户端。 是否有可能创建一个处理票证交换的Java服务,一旦获得服务票证即可将其传递给应用程序以用于HTTP请求中?换句话说,我的应用程序将要求Java服务协商票证,然后将服务票证以字符串或原始字符串的