在 CentOS 上运行 Kubernetes(k8s)时,“管理证书”通常包含 两类场景:
下面按场景给你一套实用管理方案。
默认在:
/etc/kubernetes/pki/
常见证书:
ca.crt / ca.keyapiserver.crt / apiserver.keyetcd/ 目录front-proxy*sa.key / sa.pubopenssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
kubeadm certs check-expiration
kubeadm certs renew all
续期后需重启相关组件:
systemctl restart kubelet
如 apiserver 不生效,可删除 pod 让其重建:
kubectl delete pod -n kube-system kube-apiserver-*
初始化时:
kubeadm init --config kubeadm.yaml
kubeadm.yaml 中可指定:
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
certificatesDir: /etc/kubernetes/pki
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
检查:
kubectl get pods -n cert-manager
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: you@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
申请证书:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-tls
spec:
secretName: example-tls
dnsNames:
- www.example.com
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
spec:
tls:
- hosts:
- www.example.com
secretName: example-tls
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-svc
port:
number: 80
kubectl create secret tls example-tls \
--cert=example.crt \
--key=example.key \
-n default
timedatectl
chronyc sources
✅ kubeadm 集群:定期 kubeadm certs renew
✅ 业务证书:用 cert-manager
✅ 监控证书过期(Prometheus + alert)
❌ 不建议手动改 ca 证书
如果你愿意,可以告诉我:
我可以直接给你可复制的一套配置。