K8S三大难点:网络、YAML、证书体系

admin
2
2026-06-29

K8S三大难点:网络、YAML、证书体系|分阶段落地学习路线

前置建议:先装好本地实验环境(推荐:Minikube / Kind,Windows/Mac用Docker Desktop内置K8s) 不要直接上云服务器集群,本地反复销毁重建成本最低

一、YAML(优先学!门槛最低,另外两个依赖它

核心痛点

缩进敏感、字段多、各种apiVersion/kind记不住,不知道该写什么

学习步骤(3天)

  1. 不要死背YAML
    # 万能命令生成模板(最重要!)
    kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deploy.yaml
    kubectl create service clusterip nginx --tcp=80:80 --dry-run=client -o yaml > svc.yaml
    
    看懂--dry-run=client -o yaml:只输出yaml不创建资源
  2. 必须吃透3个核心字段:
    • apiVersion:资源版本(apps/v1 / v1 / networking.k8s.io/v1)
    • kind:资源类型 Deployment/Pod/Service/Ingress
    • metadata:name/namespace/labels(标签选择器是重中之重)
    • spec:资源期望状态(K8s核心声明式API思想)
  3. 实操任务:
    • 修改副本数、镜像、资源限制resources.requests/limits
    • 学习kubectl apply -f xxx.yaml / kubectl delete -f xxx.yaml
    • 学习kubectl explain deployment.spec 查询字段文档(离线神器)
  4. 进阶:Helm(模板化YAML,解决重复复制粘贴问题)

💡避坑:不要手写完整yaml,先生成模板再修改


二、K8S网络(第二阶段,最抽象、面试高频)

四大网络模型(必须背通)

  1. Pod-to-Pod(同一节点/不同节点互通)
  2. Pod-to-Service(ClusterIP,iptables/ipvs模式)
  3. Pod-外网 / 外网-Pod(NodePort/LoadBalancer/Ingress)
  4. 集群内部DNS解析(coreDNS)

学习步骤(5~7天,必须抓包实操)

  1. 先理清K8S网络模型强制约定:

    所有Pod直接通信不使用NAT;所有节点和所有Pod互通

  2. 本地Kind环境安装网络插件:Calico(生产主流)
  3. 实操任务清单
    • 同一个Node两个Pod互相ping IP
    • 不同Node两个Pod互相ping IP(验证CNI插件)
    • 创建ClusterIP Service,用Pod访问Service名称(DNS)
    • 切换kube-proxy模式:iptables → ipvs,对比日志
    • 写NetworkPolicy(网络策略,Pod防火墙,Calico依赖)
  4. 底层知识前置(必须补) Linux基础:网络命名空间、网桥、iptables/ipvs、路由表

    如果不懂Linux网络,K8S网络永远只会停留在表面

工具

tcpdumpkubectl exec -it pod -- curlkubectl get endpoints

⚠️大坑:很多人只学K8S命令,不懂底层Linux网络,一问原理就崩


三、K8S证书体系(第三阶段,运维/集群管理员核心,开发可以浅学)

核心痛点

CA根证书、客户端证书、服务端证书、ServiceAccount Token容易混淆

学习步骤(3~5天)

  1. 先分清两套身份体系:
    • TLS X509证书:kube-apiserver、kubelet、etcd之间通信(真实证书文件 *.crt *.key)
    • ServiceAccount JWT Token:Pod内部访问API的短令牌(不用证书)
  2. 集群关键证书清单(kubeadm搭建集群场景)
    • ca.crt/ca.key:集群根CA(最高权限!)
    • apiserver.crt:API服务端证书
    • admin.crt:管理员客户端证书(kubectl ~/.kube/config 里面就是它)
  3. 实操环境:kubeadm创建集群(不要minikube!minikube隐藏了证书细节)
    kubeadm init --apiserver-advertise-address=192.168.x.x
    
    证书默认路径 /etc/kubernetes/pki
  4. 实操任务
    • 使用openssl x509 -in ca.crt -text查看证书内容
    • 使用kubeadm certs check-expiration 检查证书过期(运维重点!)
    • 使用kubeadm certs renew all 批量续期证书
    • 手写一个普通用户证书,创建RBAC权限绑定(面试高频)
  5. 进阶:
    • 外部CA签发证书(企业生产场景)
    • cert-manager:自动管理Ingress域名证书

💡区分重点:

  • 开发:了解证书作用即可
  • 运维/SRE:必须会生成、续期、排查证书过期、RBAC绑定证书用户

📅 完整学习顺序(最重要!不要颠倒)

  1. YAML基础 → Pod/Deployment/Service
  2. Linux网络基础 → K8S网络模型+CNI实操
  3. kubeadm搭建完整集群 → 证书体系 + RBAC

❌ 错误顺序:一上来啃证书/网络,看不懂直接放弃

📚免费资源推荐

  1. 文档:https://kubernetes.io/zh-cn/docs/home/
  2. 实操:Katacoda(在线K8s实验,不用本地装环境)
  3. 书籍:《Kubernetes权威指南》、《云原生网络实战》

面试高频问题预判(这三块必考)

  1. Service ClusterIP实现原理(iptables vs ipvs)
  2. NetworkPolicy为什么需要Calico
  3. kubeconfig里面证书三段内容是什么
  4. K8s证书过期怎么处理
  5. 写Deployment最小yaml文件

如果你需要,我可以给你一份【可直接复制执行的本地Kind一键脚本】用来做实验。

动物装饰