Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kubernetes中的traefik入口自定义错误_Kubernetes_Traefik_Kubernetes Helm_Kubernetes Ingress - Fatal编程技术网

kubernetes中的traefik入口自定义错误

kubernetes中的traefik入口自定义错误,kubernetes,traefik,kubernetes-helm,kubernetes-ingress,Kubernetes,Traefik,Kubernetes Helm,Kubernetes Ingress,我需要在kubernetes上的traefik ingress中设置一个自定义错误,以便在没有端点或状态为“404”或“[500-600]”时,它重定向到另一个错误服务或另一个自定义错误消息。我使用了注释,因为它在ingress文件中的文档中是这样的(注意:这是在values.yaml文件中将注释作为yaml传递的helm模板输出) 正确的语法是: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: frontend

我需要在kubernetes上的traefik ingress中设置一个自定义错误,以便在没有端点或状态为“404”或“[500-600]”时,它重定向到另一个错误服务或另一个自定义错误消息。我使用了注释,因为它在ingress文件中的文档中是这样的(注意:这是在values.yaml文件中将注释作为yaml传递的helm模板输出)

正确的语法是:

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: /


请注意,当前不支持此功能。

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
将显示为错误页面。

Ingress不支持你们在那里使用的注释!
注释仅支持服务,Ingress使用主机部分。

@Idez什么是
foo
bar
bir
假设的?它对
http://frontend.domain.com
?我们如何将
映射到静态
错误
页面模板?@Idez因此后端可以是另一个查询服务/但我仍然没有得到
foo
fii
应该是什么?是错误的类型吗?还是名称?
foo
bar
是组配置的任意名称。我尝试了这一点,创建了没有头盔的入口,但在检查页面时仍然得到了
坏网关
错误为
502(坏网关)
入口有一个端点服务和pod,但pod没有打开此特定端口。它们受支持:
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