пользовательская ошибка входа в traefik в Куберне - PullRequest
0 голосов
/ 21 мая 2018

Мне нужно установить пользовательскую ошибку при входе в traefik на kubernetes, чтобы при отсутствии конечной точки или при статусе «404» или «[500-600]» она перенаправляла на другую службу ошибок или другое пользовательское сообщение об ошибкеЯ использовал аннотацию, так как она находится в документации во входном файле, как это (Примечание: это вывод шаблона helm для передачи аннотации в виде yaml в файле values.yaml)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend
  namespace: "default"
  annotations:
      external-dns.alpha.kubernetes.io/target: "domain.com"
      kubernetes.io/ingress.class: "traefik"
      traefik.ingress.kubernetes.io/error-pages: "map[/:map[backend:hello-world status:[502 503]]]"
spec:
  rules:
  - host: frontend.domain.com
    http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 3000
        path: /

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Ответ от ldez правильный, но есть несколько предостережений:

  • Во-первых, эти аннотации работают только для traefik> = 1.6.x (более ранние версии могут поддерживать страницы с ошибками, но недля бекенда kubernetes)
  • Во-вторых, бэкэнд traefik должен быть настроен через kubernetes.Вы не можете создать бэкэнд в конфигурационном файле и использовать его с kubernetes, по крайней мере, в traefik 1.6.x

Вот как выглядит все это.foo - это просто имя, как объяснено в другом ответе, и может быть любым:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend
  namespace: "default"
  annotations:
      external-dns.alpha.kubernetes.io/target: "domain.com"
      kubernetes.io/ingress.class: "traefik"
      traefik.ingress.kubernetes.io/error-pages: |-
        foo:
          status:
          - "404"
          - "500"
          # See below on where "error-pages" comes from
          backend: error-pages
          query: "/{{status}}.html"
spec:
  rules:
   # This creates an ingress on an non-existing host name,
   # which binds to a service. As part of this a traefik
   # backend "error-pages" will be created, which is the one
   # we use above
   - host: error-pages
     http:
       paths:
       - backend:
         serviceName: error-pages-service
         servicePort: https
- host: frontend.domain.com
    http:
    # The configuration for your "real" Ingress goes here

# This is the service to back the ingress defined above
# Note that you can use anything for this, including an internal app
# Also: If you use https, the cert on the other side has to be valid
---
kind: Service
apiVersion: v1
metadata:
  name: error-pages-service
  namespace: default
spec:
  ports:
  - name: https
    port: 443
  type: ExternalName
  externalName: my-awesome-errors.mydomain.test

Если вы используете эту конфигурацию и ваше приложение отправляет 404, тогда https://my-awesome-errors.mydomain.test/404.html будет отображаться какстраница ошибки.

0 голосов
/ 16 сентября 2018

Ingress не поддерживает аннотации, которые вы, ребята, используете там!Что аннотации поддерживаются только службой, Ingress использует раздел host.

0 голосов
/ 21 мая 2018

Правильный синтаксис:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend
  namespace: "default"
  annotations:
      external-dns.alpha.kubernetes.io/target: "domain.com"
      kubernetes.io/ingress.class: "traefik"
      traefik.ingress.kubernetes.io/error-pages: |-
        foo:
          status:
          - "404"
          backend: bar
          query: /bar
        fii:
          status:
          - "500-600"
          backend: bar
          query: /bir
spec:
  rules:
  - host: frontend.domain.com
    http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 3000
        path: /

https://docs.traefik.io/v1.6/configuration/backends/kubernetes/#general-annotations

Обратите внимание, что в настоящее время Схемы шлема не поддерживают эту функцию.

...