配置多个网关时,带有Istio和SDS的HTTPS入口不起作用(返回404)

时间:2020-02-11 05:23:51

标签: ssl kubernetes istio

当我在名称空间中配置多个(网关-虚拟服务)对时,每个对都指向基本HTTP服务,因此只能访问一个服务。调用另一个(通常配置为第二个)返回404。如果删除了第一个网关,则第二个服务可以访问

几周前,我提出了一个github问题(https://github.com/istio/istio/issues/20661),其中包含我的所有配置,但至今没有响应。有人知道我在做什么错(如果有的话)?

1 个答案:

答案 0 :(得分:1)

基于该github issue

如果网关端口名称共享同一端口,则它们必须是唯一的。这就是我们区分不同RDS块的唯一方法。我们也早些时候通过了这项议案。除非绝对必要,否则我不会动这艘船的。

有关问题here的更多信息

istio documentation上进行了检查,实际上,如果您配置了多个网关,则第一个是https,第二个是https-bookinfo。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE
      serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
      privateKey: /etc/istio/ingressgateway-certs/tls.key
    hosts:
    - "httpbin.example.com"

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
  servers:
  - port:
      number: 443
      name: https-bookinfo
      protocol: HTTPS
    tls:
      mode: SIMPLE
      serverCertificate: /etc/istio/ingressgateway-bookinfo-certs/tls.crt
      privateKey: /etc/istio/ingressgateway-bookinfo-certs/tls.key
    hosts:
    - "bookinfo.com"

编辑

那很奇怪,但是我有另一个主意。

有一个github pull,其中的试行内容如下:

routeName := gatewayRDSRouteName(s, config.Namespace)

此更改通过添加附加名称空间作用域到网关端口名称 HTTPS RDS路由的名称空间后缀。端口名称仍然必须是 在名称空间边界内是唯一的,但是此更改使添加 更具体的范围相当琐碎。

您能否像下面的示例一样创建2个名称空间

示例

apiVersion: v1
kind: Namespace
metadata:
  name: httpbin
  labels:
    name: httpbin
    istio-injection: enabled
---
apiVersion: v1
kind: Namespace
metadata:
  name: nodejs
  labels:
    name: nodejs
    istio-injection: enabled

然后在适当的名称空间中部署所有内容(部署,服务,虚拟服务,网关),让我知道是否可行?


您可以尝试将主机从“ *”更改为某些名称吗?除了尝试serverCertficate和privateKey之外,这只是我想到的事情,但是从注释中,我认为您已经尝试过了。

让我知道是否有帮助。