如何配置Istio的virtualservice用于暴露多个端口的服务?

问题描述 投票:0回答:1

我有暴露多个端口的容器。因此,配置为部署kubernetes服务如下所示:

kind: Service
apiVersion: v1
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  selector:
    name: myapp
  ports:
  - protocol: TCP
    port: 5555
    targetPort: 5555
  - protocol: TCP
    port: 5556
    targetPort: 5556

我用Istio来管理路由,并通过istio入口网关公开此服务。我们有80端口一个网关,做我们必须为同一个主机两个不同的网关使用两个不同的虚拟服务?

我想配置“example.myhost.com”的80路线5556和其他一些港口,让说,‘example.myhost.com’的8088路线服务的5555。

这是可能与一个virtualservice?

kubernetes istio
1个回答
3
投票

假设Istio Gateway服务是TCP的网络连接,你也许能够一个Gateway配置两个外部端口80和5556相结合:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: myapp-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: port1
      protocol: TCP
    hosts:
    - example.myhost.com
  - port:
      number: 8088
      name: port2
      protocol: TCP
    hosts:
    - example.myhost.com

现场hosts这里标识必须由这个Gateway暴露目标地址的列表。

为了使相应的网络路由到嵌套吊舱,可以与端口的匹配组指定VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp-virtual-service
spec:
  hosts:
  - example.myhost.com 
  gateways:
  - myapp-gateway
  tcp:
  - match:
    - port: 80
    route:
    - destination:
        host: myapp.prod.svc.cluster.local
        port:
          number: 5556
  - match:
    - port: 8088
    route:
    - destination:
        host: myapp.prod.svc.cluster.local
        port:
          number: 5555

上述VirtualService定义规则,以80个8088端口来为example.myhost.commyapp服务端口5556,5555分别航线网络流量。

我鼓励你去获取有关Istio TCPRoute能力,并进一步应用的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.