如何在我的 kubernetes 服务中使用 Cert manager letsencrypt-prod?
How can I use Cert manager letsencrypt-prod in my kubernetes service?
我有 4 个 yaml 文件
- Deployment.yaml
- Service.yaml
- Ingress.yaml
- issuer.yaml
我想为我的服务使用 letsencrypt-prod 进行认证。但是没用。
当我用来确定入口是否正常工作或发行者是否正常工作时,两者都已完成!
kubectl get ing
kubectl get issuer
但是当我运行:
kubectl get cert
2 天内未读取证书。像下面这样:
它会产生如下问题。认证没有绑定 mandrakee.xyz.Mandrakee.xyz 看起来还是不安全!如何通过证书管理器使我的网站安全?
Deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: echo-server
template:
metadata:
labels:
app: echo-server
spec:
containers:
- name: httpapi-host
image: jmalloc/echo-server
imagePullPolicy: Always
resources:
requests:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
Service.yaml:
apiVersion: v1
kind: Service
metadata:
name: echo-service
spec:
ports:
- name: http-port
port: 80
targetPort: 8080
selector:
app: echo-server
Ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: ambassador
cert-manager.io/issuer: letsencrypt-prod
name: test-ingress
spec:
tls:
- hosts:
- mandrakee.xyz
secretName: letsencrypt-prod
rules:
- host: mandrakee.xyz
http:
paths:
- backend:
service:
name: echo-service
port:
number: 80
path: /
pathType: Prefix
issuer.yaml:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: ykaratoprak@sphereinc.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- dns01:
digitalocean:
tokenSecretRef:
name: digitalocean-dns
key: ce28952b5b4e33ea7d98de190f3148a7cc82d31f030bde966ad13b22c1abc524
如果您向我们保证正确设置了您的颁发者,您将在您的命名空间中看到一个属于证书管理器的 pod。这将创建一个 pod,它将验证请求证书的服务器是否解析为 DNS 记录。
在您的情况下,您需要将 DNS 指向您的入口。
如果成功完成,那么下一阶段的调试是验证 443 和 80 是否都可以解析。 Cert Manager 创建的 Validation Pod 使用端口 80 来验证通信。人们犯的一个常见错误是假设他们只会将端口 443 用于 ssl 并出于安全原因禁用 80,以便稍后发现 letsencrypt 无法验证没有端口 80 的主机名。
否则,常见的情况是cert-manager安装在命名空间cert-manager中,因此您应该检查manager的日志。这将提供有限数量的日志,有时可能难以找到解决问题的方法。
要查找直接错误,cert-manager 在您部署入口的命名空间中产生的 pod 是一个很好的关注点。
我想 运行 的测试是同时使用 80 和 443 设置入口,如果您从浏览器使用您的域,您应该在端口 443 上收到一些无效的 kubernetes 通用证书响应,并且只是“不在 80 端口上找到”。如果成功,则排除了我之前提到的限制。
我有 4 个 yaml 文件
- Deployment.yaml
- Service.yaml
- Ingress.yaml
- issuer.yaml
我想为我的服务使用 letsencrypt-prod 进行认证。但是没用。
当我用来确定入口是否正常工作或发行者是否正常工作时,两者都已完成!
kubectl get ing
kubectl get issuer
但是当我运行:
kubectl get cert
2 天内未读取证书。像下面这样:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: echo-server
template:
metadata:
labels:
app: echo-server
spec:
containers:
- name: httpapi-host
image: jmalloc/echo-server
imagePullPolicy: Always
resources:
requests:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
Service.yaml:
apiVersion: v1
kind: Service
metadata:
name: echo-service
spec:
ports:
- name: http-port
port: 80
targetPort: 8080
selector:
app: echo-server
Ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: ambassador
cert-manager.io/issuer: letsencrypt-prod
name: test-ingress
spec:
tls:
- hosts:
- mandrakee.xyz
secretName: letsencrypt-prod
rules:
- host: mandrakee.xyz
http:
paths:
- backend:
service:
name: echo-service
port:
number: 80
path: /
pathType: Prefix
issuer.yaml:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: ykaratoprak@sphereinc.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- dns01:
digitalocean:
tokenSecretRef:
name: digitalocean-dns
key: ce28952b5b4e33ea7d98de190f3148a7cc82d31f030bde966ad13b22c1abc524
如果您向我们保证正确设置了您的颁发者,您将在您的命名空间中看到一个属于证书管理器的 pod。这将创建一个 pod,它将验证请求证书的服务器是否解析为 DNS 记录。
在您的情况下,您需要将 DNS 指向您的入口。
如果成功完成,那么下一阶段的调试是验证 443 和 80 是否都可以解析。 Cert Manager 创建的 Validation Pod 使用端口 80 来验证通信。人们犯的一个常见错误是假设他们只会将端口 443 用于 ssl 并出于安全原因禁用 80,以便稍后发现 letsencrypt 无法验证没有端口 80 的主机名。
否则,常见的情况是cert-manager安装在命名空间cert-manager中,因此您应该检查manager的日志。这将提供有限数量的日志,有时可能难以找到解决问题的方法。
要查找直接错误,cert-manager 在您部署入口的命名空间中产生的 pod 是一个很好的关注点。
我想 运行 的测试是同时使用 80 和 443 设置入口,如果您从浏览器使用您的域,您应该在端口 443 上收到一些无效的 kubernetes 通用证书响应,并且只是“不在 80 端口上找到”。如果成功,则排除了我之前提到的限制。