我在 k8s 中的两个不同命名空间中部署了相同的应用程序:nsgreen
和nsblue
. 期望的结果是能够访问端口 80 上两个命名空间的应用程序:
我的网关是在istio-system
命名空间中创建的,如下所示:
### Gateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: mygateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- myapp-blue.int.mydomain.com
port:
name: myapp-server-blue
number: 80
protocol: HTTP
- hosts:
- myapp.int.mydomain.com
port:
name: myapp-server
number: 80
protocol: HTTP
nsblue 中 my-app 的虚拟服务:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp-vs-blue
namespace: istio-system
spec:
gateways:
- mygateway
hosts:
- myapp-blue.int.mydomain.com
http:
- match:
- uri:
prefix: /
route:
- destination:
host: myapp-server-blue.nsblue.svc.cluster.local
port:
number: 8080
weight: 100
在 nsgreen 中为我的应用程序提供虚拟服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
namespace: istio-system
spec:
gateways:
- mygateway
hosts:
- myapp.int.mydomain.com
http:
- match:
- uri:
prefix: /
route:
- destination:
host: myapp-server.nsgreen.svc.cluster.local
port:
number: 8080
weight: 100
访问http://myapp.int.mydomain.com (nsgreen) 时,端口 80 似乎工作正常,但在 myapp-blue (nsblue) 的情况下,我只能通过端口 8080 ( http://myapp -blue.int.mydomain.com:8080)而不是 80。
注意:如果这很重要,两个命名空间都有标签istio-injection=enabled
。
任何人都可以阐明我的 yaml 文件有什么问题以实现上述预期结果吗?