1. 自动签发 Ingress 证书
安装 cert-manager
1
2
3
4
5
6
7
8
9
10
|
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.10/deploy/manifests/00-crds.yaml
kubectl create namespace cert-manager
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \
--name cert-manager \
--namespace cert-manager \
--version v0.10.0 \
jetstack/cert-manager
|
创建一个全局的签发机构
新建文件 issuer.yaml
1
2
3
4
5
6
7
8
9
10
11
12
|
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-prod
http01: {}
|
创建签发机构
1
|
kubectl apply -f issuer.yaml
|
签发证书
新建文件 cert.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: ingress-cert-name
namespace: app-namespace
spec:
secretName: ingress-cert-app
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- ingress-app.domain.com
acme:
config:
- http01:
ingressClass: traefik
domains:
- ingress-app.domain.com
|
签发证书
1
|
kubectl apply -f cert.yaml
|
2. Kubernetes 常见故障排查
2.1 Node 异常
故障可能:
- kubelet 进程异常
- 未安装 cni 插件
- docker 异常
- 磁盘空间不足
- 内存不足
定位方式:
kubectl describe node
,查看节点事件
systemctl status kubelet
,查看 kubelet 状态
journalctl -u kubelet -f
,查看系统日志
top
,查看系统 cpu、内存占用情况
du -sh、df -h
,查看磁盘使用情况
2.2 Pod 异常
Pod 可能处于三种非正常运行状态,长时间 Pending、Waiting、CrashBackoff
kubectl describe pod
,查看事件。可能原因:可用资源不足、不满足亲和性策略,节点 taints 不允许调度
可能原因:镜像拉取失败。请尝试人工拉取镜像,检查镜像名、权限、网络是否符合预期。
可能原因:服务启动失败,依赖不能完全满足。请查看 kubectl logs
日志,或进入 Pod 、Docker 调试。
2.3 Service 异常
可能原因:Pod 异常或选择器没有选中任何 Pod。检查 service 的选择器配置;执行 kubectl describe service\endpoints\pod
查看是否有异常事件。
检查 service 端口映射,是否与 Pod 端口、访问的端口一致。
检查 kube-proxy 、iptables 或 ipvs 是否异常。
3. 参考
- https://github.com/jetstack/cert-manager/issues/2109