0

我在 k8s 中的两个不同命名空间中部署了相同的应用程序:nsgreennsblue. 期望的结果是能够访问端口 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 文件有什么问题以实现上述预期结果吗?

4

0 回答 0