以下是describe我clusterissuer和certificate资源的输出。我是 cert-manager 的新手,所以不能 100% 确定它设置正确 - 我们需要使用http01验证但是我们没有使用 nginx 控制器。现在我们只有 2 个微服务,所以面向公众的 IP 地址只属于一个 k8s 服务(负载均衡器类型),该服务将流量路由到一个 pod,其中一个可扩展服务代理容器位于运行应用程序代码的容器前面。使用此设置我无法获得除以下错误之外的任何信息,但是正如我所提到的,我是 cert-manager 和 ESP 的新手,因此这可能配置不正确...
Name: clusterissuer-dev
Namespace:
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
API Version: cert-manager.io/v1beta1
Kind: ClusterIssuer
Metadata:
Creation Timestamp: 2020-08-07T18:46:29Z
Generation: 1
Resource Version: 4550439
Self Link: /apis/cert-manager.io/v1beta1/clusterissuers/clusterissuer-dev
UID: 65933d87-1893-49af-b90e-172919a18534
Spec:
Acme:
Email: email@test.com
Private Key Secret Ref:
Name: letsencrypt-dev
Server: https://acme-staging-v02.api.letsencrypt.org/directory
Solvers:
http01:
Ingress:
Class: nginx
Status:
Acme:
Last Registered Email: email@test.com
Uri: …Run Code Online (Sandbox Code Playgroud) Waiting for http-01 challenge propagation: failed to perform self check GET request,它类似于此错误https://github.com/jetstack/cert-manager/issues/656,
但 GitHub 票证评论中的所有解决方案都没有帮助。
我正在尝试CertManager按照本教程中的说明在 DigitalOcean 上进行设置:https : //www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on -digitalocean-kubernetes
我没有收到任何错误,但是来自的请求CertManager在挂起状态等待了 40 多个小时。
我已经使用 Nginx 成功配置了 Ingress,然后我创建了一个命名空间并创建了CertManagerCRD:
$ kubectl create namespace cert-manager
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.12.0/cert-manager.yaml
Run Code Online (Sandbox Code Playgroud)
我可以CertManager按预期看到所有豆荚:
$ kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c47f46f57-gxhwv 1/1 Running 0 42h
cert-manager-cainjector-6659d6844d-xp75s 1/1 Running 0 42h
cert-manager-webhook-547567b88f-k4dv2 1/1 Running 0 42h
Run Code Online (Sandbox Code Playgroud)
然后我创建了登台发行者:
$ kubectl …Run Code Online (Sandbox Code Playgroud) kubernetes lets-encrypt kubernetes-ingress cert-manager nginx-ingress
我正在尝试设置 K3s 集群。当我有一个主控和代理设置时,证书管理器没有任何问题。现在我正在尝试使用嵌入式 etcd 进行 2 主设置。我为两个虚拟机打开了 TCP 端口6443并2379-2380执行了以下操作:
VM1: curl -sfL https://get.k3s.io | sh -s server --token TOKEN --cluster-init
VM2: curl -sfL https://get.k3s.io | sh -s server --token TOKEN --server https://MASTER_IP:6443
Run Code Online (Sandbox Code Playgroud)
# k3s kubectl get nodes
NAME STATUS ROLES AGE VERSION
VM1 Ready control-plane,etcd,master 130m v1.22.7+k3s1
VM2 Ready control-plane,etcd,master 128m v1.22.7+k3s1
Run Code Online (Sandbox Code Playgroud)
安装 cert-manager 工作正常:
# k3s kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
# k3s kubectl get pods --namespace cert-manager
NAME READY STATUS
cert-manager-b4d6fd99b-c6fpc 1/1 Running
cert-manager-cainjector-74bfccdfdf-gtmrd 1/1 …Run Code Online (Sandbox Code Playgroud) 最近,我尝试在裸机服务器上使用 microk8s 和默认入口控制器设置 LetsEncrypt。
我在网上找到了一些非常有用的指南,但似乎最近对 microk8s 进行了更新,改变了入口控制器的配置方式。
为了节省大家的时间,我准确地写下了我所做的事情。
如果您遇到困难或需要更好地理解,这里有一些有用的资源。
https://cert-manager.io/docs/installation/kubernetes/
https://cert-manager.io/docs/tutorials/acme/ingress/
该链接对于故障排除非常有用
我正在尝试使用 cert-manager 通过 LetsEncrypt 颁发证书。
我已按照此处的步骤进行操作http://docs.cert-manager.io/en/latest/getting-started/index.html
但是,我现有的入口没有被修改(我认为由于添加了.well-known/....
相反,我看到为此创建的入口,名称如下:cm-acme-http-solver-kgpz6?哪个比较令人困惑?
如果我获得该入口的 yaml,我会看到以下规则:
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: cm-acme-http-solver-2dd97
servicePort: 8089
path: /.well-known/acme-challenge/2T2D_XK1-zIJJ9_f2ANlwR-AcNTm3-WenOExNpmUytY
Run Code Online (Sandbox Code Playgroud)
这究竟是如何运作的?由于文档看起来相当稀疏。
目前,Istio不支持完全自动化的证书程序.标准入口通过cert-manager支持这一点.是否可以将用于认证管理的标准入口配置与用于其他内容的istio相结合?这种组合的缺点是什么?
ssl-certificate kubernetes google-kubernetes-engine istio cert-manager
我似乎无法让证书管理器工作:
$ kubectl get certificates -o wide
NAME READY SECRET ISSUER STATUS AGE
example-ingress False example-ingress letsencrypt-prod Waiting for CertificateRequest "example-ingress-2556707613" to complete 6m23s
$ kubectl get CertificateRequest -o wide
NAME READY ISSUER STATUS AGE
example-ingress-2556707613 False letsencrypt-prod Referenced "Issuer" not found: issuer.cert-manager.io "letsencrypt-prod" not found 7m7s
Run Code Online (Sandbox Code Playgroud)
在日志中我看到:
I1025 06:22:00.117292 1 sync.go:163] cert-manager/controller/ingress-shim "level"=0 "msg"="certificate already exists for ingress resource, ensuring it is up to date" "related_resource_kind"="Certificate" "related_resource_name"="example-ingress" "related_resource_namespace"="default" "resource_kind"="Ingress" "resource_name"="example-ingress" "resource_namespace"="default"
I1025 06:22:00.117341 1 sync.go:176] cert-manager/controller/ingress-shim "level"=0 "msg"="certificate resource …Run Code Online (Sandbox Code Playgroud) 当我从 Chrome 浏览我的网站时,它说证书无效,如果我检查详细信息,我会看到以下内容:
Issued to:
Common Name (CN) test.x.example.com
Organization (O) cert-manager
Organizational Unit (OU) <Not Part Of Certificate>
Issued by:
Common Name (CN) cert-manager.local
Organization (O) cert-manager
Organizational Unit (OU) <Not Part Of Certificate>
Run Code Online (Sandbox Code Playgroud)
我不明白出了什么问题。从 cert-manager 的输出看来一切都很顺利:
I1002 15:56:52.761583 1 start.go:76] cert-manager "level"=0 "msg"="starting controller" "git-commit"="95e8b7de" "version"="v0.9.1"
I1002 15:56:52.765337 1 controller.go:169] cert-manager/controller/build-context "level"=0 "msg"="configured acme dns01 nameservers" "nameservers"=["10.44.0.10:53"]
I1002 15:56:52.765777 1 controller.go:134] cert-manager/controller "level"=0 "msg"="starting leader election"
I1002 15:56:52.767133 1 leaderelection.go:235] attempting to acquire leader lease cert-manager/cert-manager-controller...
I1002 15:56:52.767946 …Run Code Online (Sandbox Code Playgroud) google-cloud-platform kubernetes google-kubernetes-engine lets-encrypt cert-manager
我的 GKE 中有一个 NGINX Ingress。我想让我的 URL 安全。但不幸的是我无法通过证书管理器实现这一点。我看到一个创建托管证书的选项。但我不确定是否有注释允许我在 NGINX Ingress 中使用 google 管理的证书。控制器。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-https
namespace: non-default
annotations:
kubernetes.io/ingress.allow-http: "false"
kubernetes.io/ingress.class: "nginx"
networking.gke.io/managed-certificates: "managed-certificate"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
cert-manager.io/issuer: "letsencrypt-production"
spec:
tls:
- hosts:
- example.com
secretName: selfsigned-cert-tls
rules:
- host: example.com
http:
paths:
- path: "/"
backend:
serviceName: hello-service
servicePort: hello-port
- path: "/kube"
backend:
serviceName: hello-kubernetes
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
当我使用 cert-manager 创建证书时,证书状态显示“Kubernetes Ingress Controller Fake Certificate”
我在使用 cert-manager 处理 tls 证书时遇到了一个问题,我正在关注文档并添加了一些额外的东西Traefik作为入口。
目前,我有这个YAML文件:
cluster-issuer.yaml
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
namespace: secure-alexguedescom
spec:
acme:
email: user@gmail.com
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource used to store the account's private key.
name: letsencrypt-staging
# Add a single challenge solver, HTTP01 using nginx
solvers:
- selector: {}
http01:
ingress:
class: traefik-cert-manager
Run Code Online (Sandbox Code Playgroud)
traefik-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
# add an annotation indicating the issuer to use.
cert-manager.io/cluster-issuer: letsencrypt-staging
name: secure-alexguedescom-ingress-http
namespace: secure-alexguedescom
spec:
rules: …Run Code Online (Sandbox Code Playgroud)