Please enable Javascript to view the contents

Kubernetes 签发 Ingress 证书及日常故障运维

 ·  ☕ 2 分钟

1. 自动签发 Ingress 证书

  1. 安装 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
  1. 创建一个全局的签发机构

新建文件 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
  1. 签发证书

新建文件 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

  • Pending

kubectl describe pod,查看事件。

可能原因:可用资源不足、不满足亲和性策略,节点 taints 不允许调度

  • Waiting

可能原因:镜像拉取失败。请尝试人工拉取镜像,检查镜像名、权限、网络是否符合预期。

  • CrashBackoff

可能原因:服务启动失败,依赖不能完全满足。请查看 kubectl logs 日志,或进入 Pod 、Docker 调试。

2.3 Service 异常

  • endpoint 未正常添加

可能原因:Pod 异常或选择器没有选中任何 Pod。检查 service 的选择器配置;执行 kubectl describe service\endpoints\pod 查看是否有异常事件。

  • service 端口映射错误

检查 service 端口映射,是否与 Pod 端口、访问的端口一致。

  • 网络配置问题

检查 kube-proxy 、iptables 或 ipvs 是否异常。

3. 参考


微信公众号
作者
微信公众号