一、CNI
1.CNI是什么
Container NetWork Interface 容器网络接口,简单来说就是安排pod之间的网络通信
2.CNI如何使用
1.下载安装CNI插件即可使用
3.常见的CNI插件有哪些
1.Calico: 支持 NetworkPolicy,高性能 汉语意思:印花布
2.Flannel:简单易用,性能中等 功能单一(仅连通网络) 汉语意思:绒布
3.AWS:深度集成 AWS,无 Overlay 开销
4.Cilium:超高性能,支持网络观测
4.CNI的工作原理是什么
1.Pod 创建时,kubelet 调用 CNI 插件。
2.CNI 给 Pod 分配 IP,并把网络接口挂到 Pod 的网络命名空间里。
3.CNI 配置路由,让 Pod 能跨 Node 找到其他 Pod。
4.Pod 启动后,就可以用这个 IP 与其他 Pod 通信了。
Pod = 房子,IP = 地址,CNI = 给房子修路 + 分配地址,保证每个房子能互相访问。
5.CNI的网络模型有哪些
1.Overlay网络:在现有 Node 网络上“盖一层虚拟网络”,Pod A 的数据包先封装成 VXLAN/Geneve,再发送到目标Pod
2.原生路由网络:给每个 Pod 分配真实 IP,通过路由表让 Node 之间直接找到 Pod
二、Calico
1.Calico如何安装
1.kubectl apply -f projectcalico.docs.tigera.io/manifests/c…
2.kubectl get pods -n kube-system
3.等看到 calico-node 状态为 Running 就安装成功
2.如何规定哪些pod可以访问
1.给Pod打标签:比如 role=frontend
2.写NetworkPolicy:规则写明谁可以访问谁
例子
假设:Pod A:role=frontend, Pod B:role=backend
规则:只有 frontend 可以访问 backend
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
namespace: default
spec:
podSelector:
matchLabels:
role: backend # 哪些 Pod 受保护
ingress:
- from:
- podSelector:
matchLabels:
role: frontend # 允许访问的 Pod
ports:
- protocol: TCP
port: 80