【问题标题】:How to configure Istio's virtualservice for a service which exposes multiple ports?如何为暴露多个端口的服务配置 Istio 的虚拟服务?
【发布时间】:2019-02-02 10:18:59
【问题描述】:

我有一个暴露多个端口的容器。因此,为部署配置的 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。

一个虚拟服务可以做到吗?

【问题讨论】:

    标签: kubernetes istio


    【解决方案1】:

    假设 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 公开。

    为了对嵌套 Pod 进行适当的网络路由,您可以指定 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 以上定义了将来自 example.myhost.com 的 80 和 8088 端口的网络流量分别路由到 myapp 服务端口 5556、5555 的规则。

    我鼓励您获取有关 Istio TCPRoute 功能和更多设备的更多信息。

    【讨论】:

    • 如果我基于 uri - 前缀在 tcp 端口上定义多个虚拟服务,例如 /A 目标微服务 A、/B 目标微服务 B ...对于具有不同前缀的相同 tcp 端口,我可以不是路由,obs:使用 tcp 网关,使用 http 网关我可以...
    猜你喜欢
    • 2020-11-09
    • 2019-06-04
    • 2019-06-04
    • 2020-09-07
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多