【问题标题】:k3s redirect http to httpsk3s 将 http 重定向到 https
【发布时间】:2021-07-29 11:56:57
【问题描述】:

我正在尝试在 k3s 上部署 AWX,一切正常,但是我想强制执行 SSL - 所以,将 HTTP 重定向到 HTTPS。

我一直在尝试测试 SSL 强制部分,但是它不能正常工作。这是我的 traefik 配置:

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: traefik-crd
  namespace: kube-system
spec:
  chart: https://%{KUBERNETES_API}%/static/charts/traefik-crd-9.18.2.tgz
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: traefik
  namespace: kube-system
spec:
  chart: https://%{KUBERNETES_API}%/static/charts/traefik-9.18.2.tgz
  set:
    global.systemDefaultRegistry: ""
  valuesContent: |-
    ssl:
      enforced: true
    rbac:
      enabled: true
    ports:
      websecure:
        tls:
          enabled: true
    podAnnotations:
      prometheus.io/port: "8082"
      prometheus.io/scrape: "true"
    providers:
      kubernetesIngress:
        publishedService:
          enabled: true
    priorityClassName: "system-cluster-critical"
    image:
      name: "rancher/library-traefik"
    tolerations:
    - key: "CriticalAddonsOnly"
      operator: "Exists"
    - key: "node-role.kubernetes.io/control-plane"
      operator: "Exists"
      effect: "NoSchedule"
    - key: "node-role.kubernetes.io/master"
      operator: "Exists"
      effect: "NoSchedule"

根据此处的 Helm 图表 https://github.com/helm/charts/tree/master/stable/traefik#configuration,ssl.enforced 参数应该可以解决问题,但是当我使用 http 访问我的主机时,它仍然没有将我重定向到 https。我可以看到 Rancher 也在为 traefik 部署一个 LB 服务,我需要修改它吗?

【问题讨论】:

    标签: kubernetes traefik k3s


    【解决方案1】:

    我努力让重定向工作,终于找到了一个有效的配置。

    您应该在 kubernetes 中定义一个中间件对象,并且您的 Ingress 对象必须引用它。请注意,因为 traefik 中的文档在这里非常具有误导性,因为在许多页面上发现的中间件清单忘记了“命名空间”注释,所以他们保证这是“默认”(顺便说一句,这是愚蠢的,没有认真的人在默认命名空间上工作)。

    因此,这是一个有效的配置:

    apiVersion: traefik.containo.us/v1alpha1
    kind: Middleware
    metadata:
      name: redirect
      namespace: some_namespace
    spec:
      redirectScheme:
        scheme: https
        permanent: true
    

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: wordpress
      namespace: your_app_namespace
      annotations:
        kubernetes.io/ingress.class: traefik
        traefik.ingress.kubernetes.io/router.middlewares: some_namespace-redirect@kubernetescrd
    spec:
      tls:
        - secretName: your_certificate
          hosts:
            - www.your_website.com
      rules:
        - host: www.your_website.com
          http:
            paths:
              - path: /
                backend:
                  service:
                    name: your_service
                    port:
                      number: 80
                pathType: ImplementationSpecific
    

    所以诀窍是:

    • 定义一个中间件对象(在您想要的任何命名空间中,但可能与您的应用在同一个命名空间中)
    • traefik.ingress.kubernetes.io/router.middlewares 中使用语法 <NAMESPACE>-<NAME>@kubernetescrd 引用它(其中 NAMESPACE 和 NAME 是中间件对象的那些)

    【讨论】:

    • 谢谢,很高兴它对你有用,但是我找到了一个更简单的解决方案,但不幸的是我忘了发布它。我已经修改了 k3s 自带的原始 traefik 部署,并将其添加到 helm chart ports.web.redirectTo: websecure 并且它可以工作。
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2013-11-05
    • 2012-11-02
    • 2011-03-29
    相关资源
    最近更新 更多