首页主机资讯CentOS K8s容器网络接口解析

CentOS K8s容器网络接口解析

时间2025-12-12 17:23:04发布访客分类主机资讯浏览843
导读:CentOS 上 Kubernetes 容器网络接口解析 一 基础概念与网络模型 Pod 是最小调度单元:每个 Pod 拥有一个独立的 IP,同一 Pod 内的多个容器共享同一个网络命名空间,可直接通过 localhost 互通,端口在同...

CentOS 上 Kubernetes 容器网络接口解析

一 基础概念与网络模型

  • Pod 是最小调度单元:每个 Pod 拥有一个独立的 IP,同一 Pod 内的多个容器共享同一个网络命名空间,可直接通过 localhost 互通,端口在同一 Pod 内必须唯一。跨 Pod 通信以 Pod IP 直连为目标。Kubernetes 假设网络是“扁平”的,即任意 Pod ↔ 任意 PodNode ↔ 任意 Pod 可直接通信,且尽量不使用 NAT。这些能力由 CNI 插件落地实现。
  • Service 与 kube-proxyService 提供稳定的访问入口(ClusterIP/NodePort/LoadBalancer),后端为 Endpoints(匹配 Pod 的 IP:Port 列表)。kube-proxy 通过 iptables 或 IPVS 将 Service 的虚拟 IP 负载均衡到后端 Pod。
  • 网络命名空间与 veth 对Network Namespace 隔离网络栈(网卡、路由表、iptables 等);veth 对像“虚拟网线”把不同命名空间连接起来,常与 网桥配合完成二层互通。

二 关键网络接口与组件

  • Pod 侧接口:每个 Pod 内常见到 eth0(由 CNI 插件创建并接入网桥/隧道),以及 lo(回环)。同一 Pod 内容器共享这些接口与网络栈。
  • 宿主机侧接口:常见组件包括
    • cni0 / docker0:节点本地的 网桥,用于连接本节点上的 Pod 网络接口(不同插件命名可能不同)。
    • flannel.1 / vxlan 设备:在使用 Flannel VXLAN 时,节点会创建 flannel.1 等 VTEP 设备用于 Overlay 封装/解封装
    • tunl0 / ipip 设备:在使用 IPIP 模式(如 Calico 某些部署)时出现的隧道设备。
    • 物理网卡(eth0 等):承载节点间真实三层转发。
  • CNI 插件与 IPAM:Kubernetes 通过 CNI 标准调用插件完成网络配置。常见二进制位于 /opt/cni/bin,配置位于 /etc/cni/net.d/。插件负责创建 veth 对/网桥/隧道、调用 IPAM(如 host-local)分配 Pod IP,并在 Pod 销毁时回收。
  • Service 侧接口kube-proxy 在主机上维护 iptables/IPVS 规则,对 ClusterIP/NodePort 的访问做 DNAT 到后端 Pod IP:Port

三 典型数据路径

  • 同节点 Pod 间通信:PodA:eth0 → veth 对 → 节点网桥(如 cni0/docker0)→ veth 对 → PodB:eth0,二层互通,无需经过物理网卡。
  • 跨节点 Pod 间通信(Flannel VXLAN 示例)
    • 源节点:PodA:eth0 → 网桥 → flannel.1(封装为 VXLAN)→ 物理网卡 eth0 → 目标节点
    • 目标节点:物理网卡 eth0flannel.1(解封装)→ 网桥 → PodB:eth0 该路径依赖 flanneld 为每个节点分配 Pod CIDR 并在节点间维护 Overlay 隧道
  • 跨节点 Pod 间通信(Calico BGP 示例):每个节点通过 BGP Speaker 向集群宣告本节点 Pod 子网,节点路由表出现类似“10.244.2.0/24 via 192.168.0.2 dev eth0”的直连路由;数据包经物理网络直达目标节点后,按本地路由进入目标 Pod,全程通常 无 NAT
  • Pod 访问 Service:访问 ClusterIP:Port → 主机 iptables/IPVS 规则 → 目标 Pod IP:targetPort(DNAT/负载均衡);NodePort 则在每个节点开放相同端口,经 Node IP:NodePort 进入后再转发到后端 Pod。

四 CentOS 上的快速排障命令

  • 查看节点网络命名空间与接口:ip netns、ip link、bridge link、ip addr;进入命名空间:ip netns exec 。
  • 查看 CNI 配置与插件:ls /etc/cni/net.d/、ls /opt/cni/bin/;检查 kubelet CNI 配置(如 --cni-bin-dir、–cni-conf-dir)。
  • 查看路由与隧道:ip route、ip -d link show flannel.1 / tunl0;确认 Pod CIDR 与节点间路由是否正确。
  • 检查 Service 与 Endpoints:kubectl get svc -o wide、kubectl get endpoints ;确认标签选择器匹配到期望的 Pod IP:Port
  • 检查 kube-proxy 模式与规则:kubectl get pods -n kube-system -l k8s-app=kube-proxy;ss -lntp | grep :;iptables-save | grep 或 ipvsadm -ln(IPVS 模式)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS K8s容器网络接口解析
本文地址: https://pptw.com/jishu/770692.html
CentOS K8s持久化卷使用指南 CentOS K8s资源限制设置方法

游客 回复需填写必要信息