Атрибуты strip_path и preserve_host в объекте KongIngress. Что они делают? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть KongIngress атрибуты конфигурации объекта, относящиеся к ресурсу Ingress, которые вызывают kong как контроллер Ingress. У меня фактически есть эта конфигурация:

apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
  name: echo-site-ingress
  namespace: hello-world
  annotations:
    kubernetes.io/ingress.class: "kong"
proxy:
  protocols:
    - http
    - https
#  path: /
route:
  methods:
    - POST
    - GET
  strip_path: true
  preserve_host: true
---
#My Ingress resource
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: kong
    plugins.konghq.com: helloworld-customer-acceptance-basic-auth, hello-world-customer-acceptance-acl
  name: echo-site-ingress
  namespace: hello-world
spec:
  rules:
  - host: hello-world.bgarcial.me
    http:
      paths:
      - backend:
          serviceName: echo
          servicePort: 80
        path: /
  tls: 
  - hosts:
    - hello-world.bgarcial.me
    secretName: letsencrypt-prod

Вопросы:

Что делают в моем kind:KongIngress объектном ресурсе атрибуты strip_path и preserve_host?

Я прочитал документацию здесь , но мне не ясно:

Относительно strip_path Я вижу это:

При сопоставлении маршрута через один из путей удалите соответствующий префикс из URL-адреса вышестоящего запроса. По умолчанию true. но, как мы видим, я не использую атрибут path внутри моего объекта KongIngress (я прокомментировал в целях иллюстрации мой вопрос)

Итак, как здесь применяется значение атрибута strip_path?

Это потому, что я использую в своем ресурсе Ingress атрибут path: /, а мои ресурсы Ingress и KongIngress работают вместе?

У меня действительно нет ни малейшего понятия об этом, но я бы хотел хотел бы знать, как это за кулисами.

1 Ответ

2 голосов
/ 21 апреля 2020

Когда включена аннотация preserv_host, заголовок host запроса будет отправлен как есть в Службу в Кубернетес. Подробное объяснение в документации .

strip_path может быть настроено на удаление соответствующей части вашего пути из HTTP-запроса перед его прокси.

Если установлено значение "true", часть пути, указанная в правиле Ingress, будет удалена перед отправкой запроса в службу. Например, если для него установлено значение "true", у правила Ingress есть путь /foo, а у HTTP-запроса, соответствующего правилу Ingress, есть путь /foo/bar/something, тогда запрос, отправленный службе Kubernetes, будет иметь путь /bar/something. Поэтому, когда вы используете curl $YOUR_HOST/foo/bar/something, под реальным значением пути в выходных данных вы увидите /bar/something

И если установлено значение false, никакие манипуляции с путями не выполняются и в вашем случае могут быть изменены на такие, как никаких манипуляций не требуется.

...