我正在将Traefik用作入口控制器,并具有与以下类似的入口设置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
traefik.ingress.kubernetes.io/error-pages: |
test:
status:
- "404"
backend: my-service
query: "/404.json"
name: my-ingress
spec:
rules:
- host: dev.mydomain.com
http:
paths:
- backend:
serviceName: my-service
servicePort: 80
path: /
我希望这会将错误页面替换为my-service / 404.json的结果,但它会从后端返回正常的404响应,并且后端日志甚至不会显示对/404.json的请求。我能够使它返回其他任何内容的唯一方法是将后端设置为dev.mydomain.com/
,并且得到响应Forbidden
,并且Traefik日志中的消息如
time="2018-06-20T10:57:54Z" level=debug msg="request &{Method:GET URL:http://0.0.0.0/404.json Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[User-Agent:[curl/7.60.0] Accept:[*/*]] Body:<nil> GetBody:<nil> ContentLength:0 TransferEncoding:[] Close:false Host:0.0.0.0 Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI:/404.json TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc420b7a0f0} - rejecting: missing port in address"
我在做什么错?如果我必须指定域而不是服务名称,为什么它与指定后端的其他地方不同?