使用 Let's Encrypt 的主机名相同但路径不同

Same hostname but different path with Let's Encrypt

我已经在我的集群中使用 cert-manager 配置了 Let's Encrypt,它适用于我的大多数用例。但是我有一个应用程序在同一主机名上多次安装,但路径不同。

我的入口定义如下

{{- if .Values.ingress.enabled -}}
{{- $fullName := include "whoami-go.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- $tls := hasKey .Values.ingress "certIssuer" -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "whoami-go.labels" . | nindent 4 }}
  annotations:
  {{- if $tls }}
    cert-manager.io/cluster-issuer: {{ .Values.ingress.certIssuer | quote }}
    ingress.kubernetes.io/ssl-redirect: "true"
  {{- end }}
spec:
  {{- if $tls }}
  tls:
    - secretName: {{ $fullName }}-tls
      hosts:
        - {{ .Values.ingress.hostname | quote }}
  {{- end }}
  rules:
    - host: {{ .Values.ingress.hostname | quote }}
      http:
        paths:
          - path: {{ .Values.ingress.path }}
            pathType: Prefix
            backend:
              service:
                name: {{ $fullName }}
                port:
                  number: {{ $svcPort }}
{{- end }}

它使用如下值实例化

ingress:
  enabled: true
  hostname: whoami-go.c.dhis2.org
  path: /something
  certIssuer: letsencrypt-prod

每个安装都会更改 path

问题...

E0520 03:13:49.242770 1 sync.go:210] cert-manager/controller/orders "msg"="failed to create Order resource due to bad request, marking Order as failed" "error"="429 urn:ietf:params:acme:error:rateLimited: Error creating new order :: too many certificates already issued for exact set of domains: whoami-go.c.dhis2.org: see https://letsencrypt.org/docs/rate-limits/" "resource_kind"="Order" "resource_name"="finland-whoami-go-tls-tzvk6-4169341110" "resource_namespace"="whoami" "resource_version"="v1"

由于只更新了路径,我希望 cert-manager 会重用证书,但显然不是这样。我能否以某种方式将我的应用程序配置为在同一图表的多个安装中对同一主机名使用同一证书?

错误意思

urn:ietf:params:acme:error:rateLimited: Error creating new order :: too many certificates already issued for exact set of domains: whoami-go.c.dhis2.org:

我们只能在一周内向 let's encrypt 申请一定数量的 SSL/TLS 证书。

阅读更多信息:https://letsencrypt.org/docs/rate-limits/

因此,显示限速错误。我们可以每周申请 5 个证书以获取重复证书。

您正在使用 certIssuer: letsencrypt-prod 或集群发行者,它将把秘密存储到 Kubernetes 秘密.

在使用不同路径创建入口时,只需根据需要更改秘密或将秘密添加到入口,您的入口将使用 HTTPS。

同时仅保留一个与集群颁发者或颁发者的入口,因此如果证书被探索,它可以自动更新为秘密,并且该秘密将被其他入口使用。

我的简单入口与他 SSL/TLS 证书存储在秘密中。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: sls-dev
    nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-body-size: "15m"
  name: sls-function-ingress
spec:
  rules:
  - host: app.dev.example.io
    http:
      paths:
      - path: /api/v1/
        backend:
          serviceName: test-service
          servicePort: 80
  tls:
  - hosts:
    - app.dev.example.io
    secretName: sls-secret

您可以将 cert-manager.io/cluster-issuer: sls-dev 保留到一个入口,而其他入口仅 secret 需要附加。