Istio 单主机归档的多端口号

问题描述

Istio 入口网关如何针对单个主机名 IP 地址使用多个端口字段选项编号。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
Metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      name: Nginx
      port: 80
      protocol: TCP
    hosts:
    - "https://ip-address1"
  - port:
      name: nodejs
      port: 449
      protocol: TCP
    hosts:
    - "https://ip-address1"

解决方法

根据 Gateway documentation,您需要将 port 定义为 servers 列表的单个项目的一部分。在同一个项目中,您指定 hosts(顾名思义,您可以在此处指定许多不同的主机,实际上是它们的列表,因为每个主机都以单独的 - 符号开头)。

如果您想为同一主机再指定一个 port,您可以简单地在另一个 - port 项的上下文中重复此主机的名称,如示例 here。它不能以与官方规范中描述的方式不同的方式完成。

...
spec:
  selector:
    app: my-gateway-controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - uk.bookinfo.com
    - eu.bookinfo.com
    tls:
      httpsRedirect: true # sends 301 redirect for http requests
  - port:
      number: 443
      name: https-443
      protocol: HTTPS
    hosts:
    - uk.bookinfo.com
    - eu.bookinfo.com
    tls:
      mode: SIMPLE # enables HTTPS on this port
      serverCertificate: /etc/certs/servercert.pem
      privateKey: /etc/certs/privatekey.pem
...

如上所示,相同的主机是 http(端口 80)和 https(端口 443)配置的一部分。