Kubernetes 使用Let';的相同主机名但不同路径;s加密

Kubernetes 使用Let';的相同主机名但不同路径;s加密,kubernetes,kubernetes-ingress,lets-encrypt,Kubernetes,Kubernetes Ingress,Lets Encrypt,我已经在集群中配置了Let's Encrypt using cert manager,它可以很好地用于我的大多数用例。但是,我有一个应用程序,它多次安装在同一主机名上,但路径不同 我的入口定义如下 {{- if .Values.ingress.enabled -}} {{- $fullName := include "whoami-go.fullname" . -}} {{- $svcPort := .Values.service.port -}} {{- $tls := h

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

我的入口定义如下

{{- 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
其中,
路径
对于每个安装都会更改

问题是

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证书

更多信息请访问:

因此,它显示了速率限制的错误。对于重复证书,我们可以每周申请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
保留到一个入口,而另一个入口只需附加机密。

是的,我得到了该部分。这就是为什么我想让cert manager在主机名相同的情况下重用现有证书的原因。@user672009上面的共享示例入口也可以在其中使用secret。要重用现有证书,您只需使用存储证书的现有机密即可。此证书的密钥使用的机密名称相同。在我的例子中,我将其命名为与主机名相同的名称。这样证书管理器就不会多次请求让我们对同一主机名进行加密是的,对,相同的机密名。