使用 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 需要附加。
我已经在我的集群中使用 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 需要附加。