如何让LetsEncrypt在Traefik上使用通配符域?

时间:2019-05-01 12:28:38

标签: kubernetes lets-encrypt kubernetes-helm traefik

我正在尝试在Traefik实例上使用通配符域设置LetsEncrypt。 Traefik已从头盔图表stable/traefik安装。

我们正在使用Google Cloud for DNS,所以我想使用gcloud作为Traefik acme提供程序。

如上所述,它是一个通配符。我正在尝试让Traefik使用*.domain.com作为SAN管理domain.com的LetsEncrypt。

我目前正在使用K8s声明来存储acme.json文件,并且该文件已填充有私钥,但没有证书。

Traefik Helm值

# LetsEncrypt
acme:
  acmeLogging: true
  challengeType: 'dns-01'
  enabled: true
  domains:
    enabled: true
    main: '*.<domain>'
    sans:
        - <domain>
  defaultEntryPoints:
  - http
  - https
  dnsProvider:
    name: 'gcloud'
    gcloud:
      GCE_PROJECT: <redacted>
      GCE_SERVICE_ACCOUNT_FILE: /secrets/gcloud-credentials.json
  email: <redacted>
  entryPoint: 'https'
  entryPoints:
    http:
      address: ':80'
    https:
      address: ':443'
  persistence:
    enabled: true
    existingClaim: 'certificate-store'
  provider: 'gcloud'
  staging: true

# SSL configuration
ssl:
 enabled: true
 enforced: true

acme.json

{
  "Account": {
    "Email": "<redacted>",
    "Registration": {
      "body": {
        "status": "valid",
        "contact": [
          "mailto:<redacted>"
        ]
      },
      "uri": "https://acme-staging-v02.api.letsencrypt.org/acme/acct/9091953"
    },
    "PrivateKey": "<redacted>",
    "KeyType": "4096"
  },
  "Certificates": null,
  "HTTPChallenges": {},
  "TLSChallenges": {}
}

对于来自Traefik的所有响应,都应使用该域的通配符LetsEncrypt证书,该证书应自动续订。

要让Traefik开始生成证书,我还需要执行哪些其他步骤,并且如何配置Traefik在默认情况下使用此证书? (而不是内置的)

谢谢

2 个答案:

答案 0 :(得分:0)

您是否100%确定“域”节看起来像这样?在stable/traefik图表中,我稍微看到了另一种域格式:

  domains:
    enabled: false
    # List of sets of main and (optional) SANs to generate for
    # for wildcard certificates see https://docs.traefik.io/configuration/acme/#wildcard-domains
    domainsList:
    # - main: "*.example.com"
    # - sans:
    #   - "example.com"
    # - main: "*.example2.com"
    # - sans:
    #   - "test1.example2.com"
    #   - "test2.example2.com"

但是可能只是新图表版本的问题,我不知道...如果您有旧图表版本,则可以尝试升级...

答案 1 :(得分:0)

我想出了这个。 我在Helm图表覆盖YAML中设置了以下内容(对上述内容进行了补充或替换)。

acme:
  caServer: 'https://acme-v02.api.letsencrypt.org/directory'
  domains:
    enabled: true
    domainsList:
      - main: '*.<domain>'
      - sans:
          - <domain>

我也放弃了persistence.existingClaim,让Traefik提出自己的主张,但是如果您已经有一个保留此定义的人,那么不会给您带来任何问题!

所有Traefik入口现在都可以提供正确的LetsEncrypt证书,而无需任何其他配置。

感谢瓦西里·安加波夫(Vasily Angapov)的回应-在acme.domains.domainsList部分,您是正确的。 :-)