Kubernetes 如何将网关绑定到特定的命名空间?

Kubernetes 如何将网关绑定到特定的命名空间?,kubernetes,istio,Kubernetes,Istio,我有以下情况: 当用户A在中输入地址foo.example1.example.com 浏览器,则应调用命名空间中的服务FOO 示例1 当用户B在中输入地址foo.example1.example.com 浏览器,则应调用命名空间中的服务FOO 示例2 我使用的是istio,问题是,如何配置特定于命名空间的绑定网关: 查看istio网关配置的示例: $ kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1a

我有以下情况:

  • 当用户A在中输入地址foo.example1.example.com 浏览器,则应调用命名空间中的服务FOO 示例1
  • 当用户B在中输入地址foo.example1.example.com 浏览器,则应调用命名空间中的服务FOO 示例2
我使用的是istio,问题是,如何配置特定于命名空间的绑定网关:

查看istio网关配置的示例:

  $ kubectl apply -f - <<EOF
  apiVersion: networking.istio.io/v1alpha3
  kind: Gateway
  metadata:
    name: ns_example1
  spec:
    selector:
      istio: ingressgateway # use Istio default gateway implementation
    servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
      - "example1.example.com"
  EOF
$kubectl apply-f-我想这应该能回答你的问题

有很多东西您不需要,但有一个想法您想应用到您的istio集群

因此,您需要1个网关和2个虚拟服务

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: foocorp-gateway
  namespace: default
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
  servers:
  - port:
      number: 80
      name: http-example1
      protocol: HTTP
    hosts:
    - "example1.example.com"
  - port:
      number: 80
      name: http-example2
      protocol: HTTP
    hosts:
    - "example2.example.com"

编辑

您可以在命名空间ex1和ex2中创建网关,然后只需更改虚拟服务中的网关字段,它就可以工作了

记住添加名称空间/网关,而不仅仅是网关名称,如


如果这对您有帮助,请告诉我。

那么在我的情况下不可能设置两个网关?@zero\u编码我回答了您的问题,请检查编辑。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example1
  namespace: ex1
spec:
  hosts:
  - "example1.example.com"
  gateways:
  - foocorp-gateway
  http:
  - match:
    - uri:
        exact: /
    route:
    - destination:
        host: example1.ex1.svc.cluster.local
        port:
          number: 80
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example2
  namespace: ex2
spec:
  hosts:
  - "example2.example.com"
  gateways:
  - foocorp-gateway
  http:
  - match:
    - uri:
        exact: /
    route:
    - destination:
        host: example2.ex2.svc.cluster.local
        port:
          number: 80
gateways:
  - some-config-namespace/gateway-name