使用Istio挂载不同路径的应用程序

时间:2019-03-02 13:51:55

标签: kubernetes routing kubernetes-ingress istio

我们已经在AWS的Kubernetes集群上安装了Istio(正在使用EKS)。我们已经部署了多个应用程序,例如:Airflow,Jenkins,Grafana等,我们可以通过port-forward来访问它们。因此,它们按预期工作。

现在,我们要实现的是将应用程序安装在特定路径上的可能性,以便我们可以通过唯一的入口点访问它们。

这里有一个例子来解释“独特的入口点”的含义:

我们尝试的是以下

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: apps-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: airflow-virtual-service  
spec:
  hosts:
  - "*"
  gateways:
  - apps-gateway
  http:
  - match:
    - uri:
        prefix: /airflow
    route:
    - destination:
        host: webserver.airflow.svc.cluster.local
        port:
          number: 8080
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: grafana-virtual-service  
spec:
  hosts:
  - "*"
  gateways:
  - apps-gateway
  http:
  - match:
    - uri:
        prefix: /grafana
    route:
    - destination:
        host: grafana.grafana.svc.cluster.local
        port:
          number: 3306
---
and so on

通过这种方式,但根据服务的不同,我仍然拥有Aiflow 404 = lots of circles或类似的东西。

您知道如何用Istio实现这样的结果吗?我们也开放使用Nginx或Traefik。

1 个答案:

答案 0 :(得分:1)

因此,根据评论:

公开前端和后端的最佳方法是使用*.domain.com之类的通配符域将两者分开。

对于前端:

my-app.domain.com/

对于后端服务,它将始终以api之类的子域开头:

api.domain.com/foo

对于后端服务,如果您的后端服务没有提供路径,则需要使用rewrite

rewrite:
  uri: "/"

检查Istio文档以获取有关重写https://istio.io/docs/reference/config/istio.networking.v1alpha3/#Destination

的更多信息