Служба Knative со шлюзом Kong и маршрутизацией на основе путей

#kong #knative #knative-serving

Вопрос:

Допустим, у нас есть много микросервисов, работающих на k8s, с развертываниями, службами и входами, доступными через входной шлюз kong на api.localhost.

Каждая микросервисная служба выполняется по определенному пути, например

  • api.localhost/foo для микросервиса foo
  • api.localhost/bar для микросервиса бара

Как добиться этого с помощью Knative с сетевым уровнем Kong? Что-то вроде этого не работает:

 apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: foo-api  
  labels:
    networking.knative.dev/visibility: cluster-local
spec:
  template:    
    spec:
      containers:
        - image: foo-image
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:    
    kubernetes.io/ingress.class: kong
    konghq.com/strip-path: "true"
    ingress.kubernetes.io/service-upstream: "true"
  name: foo  
spec:
  rules:
    - host: api.localhost
      http:
        paths:
          - backend:
              service:
                name: foo-api
                port:
                  number: 80
            path: /foo
            pathType: ImplementationSpecific
 

https://github.com/Kong/kubernetes-ingress-controller/issues/584
https://knative.dev/docs/serving/samples/knative-routing-go/

Комментарии:

1. Я неправильно спрашиваю?

Ответ №1:

Я нашел это решение

 apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: knative-service-test
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: ealen/echo-server:latest
---
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
  name: request-transformer-example
  namespace: kong
plugin: request-transformer
config:
  replace:
    headers:
      - 'host:knative-service-test.default.example.com'
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo
  namespace: kong
  annotations:
    kubernetes.io/ingress.class: kong
    plugins.konghq.com: request-transformer-example
spec:
  rules:
  - http:
      paths:
      - path: /temp
        backend:
          serviceName: kong-proxy
          servicePort: 80
 

https://github.com/Kong/kubernetes-ingress-controller/issues/706

Но мне нужен правильный заголовок хоста в моем сервисе в вопросе мультитенантности.