cert-manager使用
集群入口是 nginx-ingress
参考这个官方文档
域名有公网解析
域名无公网解析
说明
使用kind安装的k8s集群,并且使用 nginx-ingress
作为入口控制器,所有的域名解析都是 127.0.0.1
,因域名无公网解析导致CA机构(Let's Encrypt、HashiCorp Vault等)无法验证域名,此时就需要使用 SelfSigned 作为本地CA了
创建issuer
在安装完 cert-manager 之后,第一件需要配置的就是 Issuer
或 ClusterIssuer
。这些资源代表了能够对证书签名请求进行签发的证书颁发机构(CA)
说明
Issuer
是作用于特定命名空间,ClusterIssuer
是作用于全局SelfSigned
不依赖于任何资源,因此只需要在资源清单中spec
下填写selfSigned
即可
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-cluster-issuer
namespace: devops
spec:
selfSigned: {}
这个 Issuer 将用于签发自签名证书
创建certificate
说明
这个 Certificate
资源将使用 selfsigned-cluster-issuer
签发一个自签名的根证书,并将其存储在 root-secret
Secret 中
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-selfsigned-ca
namespace: devops
spec:
isCA: true
commonName: my-selfsigned-ca
secretName: root-secret
privateKey:
algorithm: ECDSA
size: 256
issuerRef:
name: selfsigned-cluster-issuer
kind: Issuer
group: cert-manager.io
创建CA issuer
说明
这个 Issuer
将使用之前创建的根证书 root-secret
作为 CA 来签发其他证书
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: my-ca-cluster-issuer
namespace: devops
spec:
ca:
secretName: root-secret
没有部署cert-manager
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
meta.helm.sh/release-name: gitea
meta.helm.sh/release-namespace: devops
creationTimestamp: "2025-04-28T09:01:45Z"
generation: 1
labels:
app: gitea
app.kubernetes.io/instance: gitea
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: gitea
app.kubernetes.io/version: "1.23"
helm.sh/chart: gitea-11.0.1
version: "1.23"
name: gitea
namespace: devops
resourceVersion: "637205"
uid: 6222cb73-3ac9-4498-a759-672361d9f2a0
spec:
ingressClassName: nginx
rules:
- host: gitea.ops.com
http:
paths:
- backend:
service:
name: gitea-http
port:
number: 3000
path: /
pathType: Prefix
status:
loadBalancer: {}