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

2023年 1月 4日 51.3k 0

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

    • 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. 参考

    • https://github.com/jetstack/cert-manager/issues/2109

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论