Traefik unabe to create none www to www redirect

8/5/2019

I am having trouble to create a none www redirect. I tried examples which worked for others but in my case there is nothing happening. Can anybody help me? I am Using Kubernetes 1.13.5 with traefik:1.7.8-alpine. The Config looks as following.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/redirect-entry-point: https
    traefik.ingress.kubernetes.io/redirect-permanent: "true"
    traefik.ingress.kubernetes.io/redirect-regex: ^https?://xn--neophytenbekmpfung-wtb.ch/?(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://www.xn--neophytenbekmpfung-wtb.ch${1}
    traefik.ingress.kubernetes.io/redirect-permanent: "true"
    ingress.kubernetes.io/protocol: http
    traefik.backend.loadbalancer.sticky: "true"
    traefik.ingress.kubernetes.io/affinity: "true"
    traefik.ingress.kubernetes.io/session-cookie-name: neophytenbekaempfung-sticky
    traefik.ingress.kubernetes.io/error-pages: |-
        fives:
          status:
          - "500-600"
          backend: global-default-backend
          query: "/500s.html"
        fouro3:
          status:
          - "403"
          backend: global-default-backend
          query: "/403.html"
        fours:
          status:
          - "400-499"
          backend: global-default-backend
          query: "/400s.html"
  name: neophytenbekaempfung-sitebuilder-ingress
  namespace:    sitebuilder
spec:
  rules:
  - host: xn--neophytenbekmpfung-wtb.ch
    http:
      paths:
      - backend:
          serviceName: sitebuilder-app-service
          servicePort: 80
        path: /
  - host: www.xn--neophytenbekmpfung-wtb.ch
    http:
      paths:
      - backend:
          serviceName: sitebuilder-app-service
          servicePort: 80
        path: /    

Kind regards Gradlon

-- Gradlon von Kaenel
kubernetes-ingress
traefik
traefik-ingress

1 Answer

8/8/2019

Ok. The reason for the problem is simple. You can not use

    traefik.ingress.kubernetes.io/redirect-entry-point: https
    traefik.ingress.kubernetes.io/redirect-permanent: "true"

and

    traefik.ingress.kubernetes.io/redirect-regex: ^https?://xn--neophytenbekmpfung-wtb.ch/?(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://www.xn--neophytenbekmpfung-wtb.ch${1}
    traefik.ingress.kubernetes.io/redirect-permanent: "true"

together. The reason for this can be found here: https://github.com/containous/traefik/blob/v1.7/provider/kubernetes/kubernetes.go#L992

The solution for this Particulare case looks like this.

    traefik.ingress.kubernetes.io/redirect-regex: ^http://.*?xn--neophytenbekmpfung-wtb.ch/|^https://xn--neophytenbekmpfung-wtb.ch/(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://www.xn--neophytenbekmpfung-wtb.ch/$1
    traefik.ingress.kubernetes.io/redirect-permanent: "true"

I need to make both none www to www but also http to https, with this config I am able to achieve both.

Hope this helps ohters faced with the same problem.

-- Gradlon von Kaenel
Source: StackOverflow