【问题标题】:Setup of Traefik 2, Kubernetes, LetsEncrypt and it's configuration questionTraefik 2、Kubernetes、LetsEncrypt 的设置及其配置问题
【发布时间】:2022-01-01 12:02:44
【问题描述】:

我对 Traefik 2 Ingress 控制器非常陌生,该控制器由我的云提供商部署:(此处的图表:https://github.com/civo/kubernetes-marketplace/tree/master/traefik2)。

我的应用程序 frontendbackend 服务正在运行。现在想加一个LetsEncrypt-certificate机制,不过好像挺难的。

如果我理解正确,我必须修改图表部署(traefik-controller),这是我不喜欢的,因为我稍后将以声明方式使用 GitOps。

• 是否有通过configMapsSecrets 配置Letsencrypt 的选项?

• 我需要Cert-Manager 吗?我还需要它吗?

• 如果不可能,我是否必须自己通过 Gitops 部署整个图表?

• 存储在volume 中的证书不应该是临时的吗?

我找不到说明我的具体问题的指南或 sn-p,大多数示例都使用 TOML 或 traefik-controller。这不可能吗? Traefik-V2 和 Letsencrypt 设置不涉及部署?

提前谢谢你

这是我当前的 IngressRoute,足以让我的应用运行:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  annotations:
    kubernetes.io/ingress.class: traefik
  name: demo-ingress-route
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - kind: Rule
      match: Host(`demo.mydomain.at`)
      priority: 0
      services:
        - name: frontend-app
          port: 80
    - kind: Rule
      match: Host(`demo.mydomain.at`) && PathPrefix(`/backend/`)
      middlewares:
        - name: demo-middleware-backend
      priority: 0
      services:
        - name: backend-api
          port: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: demo-middleware-backend
  namespace: default
spec:
  stripPrefix:
    prefixes:
      - /backend

【问题讨论】:

    标签: kubernetes traefik lets-encrypt traefik-ingress


    【解决方案1】:

    我没有你问题的所有答案,但我也许可以帮助展示我如何部署 Traefik:

    我使用 Traefik 作为 FluxCD 监视的掌舵图,仅针对基础设施实施 GitOps。

    我利用通配符匹配任何条目,然后我的应用程序可以选择任何入口路由,而无需更新我的 traefik 图表。

    这就是我的values.yaml 的样子:

      values:
        image:
          tag: 2.5.1
        additionalArguments:
          - "--certificatesresolvers.le.acme.storage=/data/acme.json"
          - --certificatesresolvers.le.acme.dnschallenge.provider=digitalocean
          - --certificatesresolvers.le.acme.email=xxxx@xxxxxx.com
        ports:
          traefik:
            expose: false
            exposedPort: 9000
            port: 9000
            protocol: TCP
          web:
            expose: true
            exposedPort: 80
            port: 8000
            protocol: TCP
            # redirects traffic to the HTTPS section by default
            redirectTo: websecure
          websecure:
            expose: true
            exposedPort: 443
            port: 8443
            protocol: TCP
            tls:
              certResolver: le
              domains:
              - main: my.domain.com
                sans:
                - '*.my.domain.com'
              enabled: true
              options: ""
    
        env:
          - name: DO_AUTH_TOKEN
            valueFrom:
              secretKeyRef:
                key: apiKey
                name: do-api-credentials  
    
        ingressRoute:
          dashboard:
            enabled: true
    
        persistence:
          enabled: true
          path: /data
          size: 1Gi
          accessMode: ReadWriteOnce
    
        deployment:
          initContainers:
            # The "volume-permissions" init container is required if you run into permission issues.
            # Related issue: https://github.com/containous/traefik/issues/6972
            - name: volume-permissions
              image: busybox:1.31.1
              command: ["sh", "-c", "chmod -Rv 600 /data/*"]
              volumeMounts:
                - name: data
                  mountPath: /data
    
    

    有了这个秘密:

    apiVersion: v1
    kind: Secret
    metadata:
      name: do-api-credentials
    type: Opaque
    stringData:
      email: xxxx@xxxxxx.com
      apiKey: xxxxxxxx
    

    应用程序库中的路由示例:

    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: app-ingress
    spec:
      entryPoints:
        - web
        - websecure
      routes:
      - match: Host(`{{ template "app.url" . }}`)
        kind: Rule
        services:
        - name: app
          port: 80
      tls:
        certResolver: le
    

    一个有用的资源:@​​987654321@

    证书管理器有助于避免单点故障,因为它用于存储和颁发证书。在 Traefik 社区中,您只有一个 pod,这可能会导致停机。因此,这取决于您对可用性的目标是什么。对你来说重要吗?我没有可提供的数字,但在我们的可用性 SLO 较低的集群上,单个 Traefik 实例足以满足我们的情况。

    所以是的,如果你需要它,你需要使用或不使用 GitOps 来部署它。

    希望我确实回答了你的一些问题,祝你有美好的一天

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多