已经设置了项目Prod和Project Staging,并且每个都运行一个GKE集群。安装证书管理器是为了按照官方文档中的说明自动执行证书颁发过程。
Project Prod具有映射到prod和临时群集istio网关IP地址的DNS。
在Project Prod中集群的DNS01质询中,管理身份验证,并成功颁发证书。
但是在Project Staging中运行的集群,由于没有足够的权限通过Project Prod中的云DNS设置进行认证和验证,导致无法获得证书。
在Project Prod中,有一个具有dns/admin角色的服务帐户,该帐户通过GKE secret设置,并在集群颁发者中进行访问,如下所示
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod-clusterissuer
namespace: cert-manager
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: name@name.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod-clusterissuer
solvers:
# ACME DNS-01 provider configurations
- dns01:
# Google Cloud DNS
cloudDNS:
# Secret from the google service account key
serviceAccountSecretRef:
name: cloud-dns-key
key: key.json
# The project in which to update the DNS zone
project: iprocure-server-prod在Project Prod GKE集群中成功颁发证书。
项目登台GKE集群,集群颁发者拥有其dns/admin角色的服务帐户,就像在项目生产中一样,但无法在项目生产DNS中执行dns01 challenge。
当使用kubectl describe challenge时,会看到以下错误
Type Reason Age From Message
---- ------ ---- ---- -------
Warning PresentError 2m56s (x19 over 7h14m) cert-manager Error presenting challenge: GoogleCloud API call failed: googleapi: Error 403: Forbidden, forbidden要在项目产品Clous DNS中执行dns01 challenge,应对项目过渡服务帐户执行哪些操作
发布于 2021-08-03 09:01:37
我也遇到过这个问题。我必须将我的Prod项目中具有DNS管理员权限的服务帐户复制到Staging Project,以便Staging中的GKE集群可以有足够的权限通过Prod项目中的Cloud DNS设置进行身份验证和验证
您必须在Prod项目中创建一个具有DNS ADMIN权限的SA,并掌握该SA的电子邮件,然后转到项目B,通过将其添加为具有DNS ADMIN权限的成员,使该SA电子邮件成为成员。
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: {{ .Values.app.certificate.issuer.name }}
namespace: {{ .Values.app.namespace }}
labels:
app.kubernetes.io/managed-by: "Helm"
spec:
acme:
email: {{ .Values.app.certificate.acme.email }}
privateKeySecretRef:
name: {{ .Values.app.certificate.issuer.name }}
server: {{ .Values.app.certificate.acme.server }}
solvers:
- dns01:
cloudDNS:
project: {{ .Values.app.project_id }} ## Make sure this is the project of where DNS is e.g Prod Project
serviceAccountSecretRef:
name: {{ .Values.secrets.name }}
# Secret from the google service account key
key: key.jsonhttps://stackoverflow.com/questions/65196988
复制相似问题