当我在名称空间中配置多个(网关-虚拟服务)对时,每个对都指向基本HTTP服务,因此只能访问一个服务。调用另一个(通常配置为第二个)返回404。如果删除了第一个网关,则第二个服务可以访问
几周前,我提出了一个github问题(https://github.com/istio/istio/issues/20661),其中包含我的所有配置,但至今没有响应。有人知道我在做什么错(如果有的话)?
答案 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之外,这只是我想到的事情,但是从注释中,我认为您已经尝试过了。
让我知道是否有帮助。