我正在使用带有 gitlab autodevops 的 kubernetes 集群 GCP。管道正在运行,帮助安装 triller、ingress 和 cert-manager 区域。
我已经有一个域“xpto.com.br”,它已经为所有子域提供了 ssl 证书,但是它被配置到 iis 应用程序中,所以我不能在我的 gcp 应用程序中使用这个证书。所以我使用 lets encrypt with cert manager 来为 k8s 集群生成证书。
一切都已设置,但我的应用程序没有使用 https 响应。如果我尝试强制“https”来执行应用程序,网络浏览器会显示“后端 404”。
经过一些尝试,我决定从集群中删除 cert-manager 以再次尝试设置。但是 gitlab 没有启用再次安装证书管理器的选项,如下图所示:
请您参考如下方法:
GitLab 不提供 uninstall
选项,因此您必须在 gitlab-managed-apps
中手动重新安装 cert-manager 或重新附加你的集群到你的 GitLab 项目。如果您想手动执行此操作,请运行:
helm install \
--name cert-manager \
--namespace gitlab-managed-apps \
stable/cert-manager
这只处理证书管理器部分。另一件需要注意的事情是 cert-manager 不会奇迹般地认识到您对证书的需求并创建一个。您将需要创建所需的资源,例如入口、clusterIssuer 和证书资源。还需要注意的一件事是,您可以为所有子域使用单个 tls 通配符证书。不要生成冗余证书,这会影响您的配额。尝试使用以下简单模板(例如,假设您使用 route53 作为您的 dns 提供商):
issuer.yaml
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
namespace: default
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: <your email>
privateKeySecretRef:
name: letsencrypt-staging
dns01:
providers:
- name: route53
route53:
region: us-east-1
accessKeyID: <access key id>
secretAccessKeySecretRef:
name: <secret name>
key: secret-access-key
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: <ingress name>
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
certmanager.k8s.io/cluster-issuer: letsencrypt-staging
spec:
tls:
- hosts:
- "*.example.com"
secretName: cert-wildcard-secret
rules:
- host: "sub.example.com"
http:
paths:
- path: /
backend:
serviceName: <service name>
servicePort: <port number>
certificate.yaml
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: cert-wildcard
spec:
secretName: cert-wildcard-secret
issuerRef:
name: letsencrypt-staging
kind: ClusterIssuer
dnsNames:
- '*.example.com'
acme:
config:
- dns01:
provider: route53
domains:
- '*.example.com'
一旦您确认这有效(使用 FAKE 暂存证书),请将您的颁发者中的 URL 更改为 https://acme-v02.api.letsencrypt.org/directory这样您就可以创建合法的证书。进行更改后,删除旧的 FAKE 证书密码,以便新的证书密码可以替换它。