k8s的calico是什么作用,举例一下
Calico 是 Kubernetes 中广泛使用的开源网络插件,通过高性能三层网络和细粒度网络策略,为容器提供跨主机通信、安全隔离及网络管理功能。以下是其核心作用与使用方法:
一、Calico 的核心作用
- 高性能容器网络
- 技术原理:基于 BGP(边界网关协议)或 eBPF 技术实现三层网络,直接通过节点路由表转发数据包,无需覆盖网络(如 VXLAN)封装,减少性能损耗。
- 优势:相比 Flannel 的 UDP/VXLAN 模式,Calico 在大规模集群中延迟更低、吞吐量更高,适合高流量场景(如 AI 训练、大数据分析)。
- 细粒度网络策略
- 功能:支持 Kubernetes NetworkPolicy,可基于标签(Label)定义容器间的访问规则(如允许/拒绝特定端口、IP 的流量)。
- 示例:
此策略仅允许标签为apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: allow-frontend-to-backend spec:podSelector:matchLabels:app: backendpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: frontendports:- protocol: TCPport: 80
app=frontend
的 Pod 访问app=backend
的 80 端口。
- 多网络模式支持
- BGP 直连模式:节点间通过 BGP 协议交换路由信息,适合同子网环境(如私有云)。
- IPIP/VXLAN 覆盖模式:跨子网时封装数据包,解决物理网络限制(如公有云跨可用区)。
- 混合模式:自动选择直连或覆盖,平衡性能与兼容性。
- IPv6 与多云集成
- 支持原生 IPv6 地址分配,兼容 AWS、Azure、GCP 等云平台,实现跨云网络统一管理。
二、Calico 在 Kubernetes 中的使用方法
1. 安装 Calico
- 使用 Helm 安装(推荐):
helm repo add projectcalico https://docs.tigera.io/charts
helm install calico projectcalico/tigera-operator --version v3.26.1
- 使用 YAML 文件安装:
从 Calico 官方文档 下载 YAML 文件并应用:kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
2. 配置网络策略
- 基础示例:隔离
policy-demo
命名空间中的所有 Pod,仅允许特定流量:# 创建命名空间 kubectl create ns policy-demo# 部署 Nginx 和测试 Pod kubectl create deployment nginx --image=nginx --replicas=2 -n policy-demo kubectl expose deployment nginx --port=80 -n policy-demo kubectl run access --rm -ti --image=busybox --namespace=policy-demo -- /bin/sh# 应用网络策略(拒绝所有入口流量) kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: default-denynamespace: policy-demo spec:podSelector: {}policyTypes:- Ingress EOF# 允许从标记为 `run=access` 的 Pod 访问 Nginx kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: access-nginxnamespace: policy-demo spec:podSelector:matchLabels:app: nginxingress:- from:- podSelector:matchLabels:run: accessports:- protocol: TCPport: 80 EOF
3. 验证网络策略
-
# 在 access Pod 中测试访问 Nginx
kubectl exec access -n policy-demo -- wget -q nginx:80 -O - # 成功
kubectl exec access -n policy-demo -- wget -q nginx:22 -O - # 失败(被策略阻止)
# 在未标记的 Pod 中测试访问 Nginx
kubectl run cant-access --rm -ti --image=busybox --namespace=policy-demo -- /bin/sh
/ # wget -q nginx:80 -O - # 失败(被默认策略阻止)
4. 高级功能
- 节点防火墙管理:通过
HostEndpoint
和GlobalNetworkPolicy
控制节点级流量(如仅允许特定 IP 访问节点端口 22):apiVersion: projectcalico.org/v3 kind: HostEndpoint metadata:name: node1-eth0labels:kubernetes-host: ingress spec:interfaceName: eth0node: node1expectedIPs: ["192.168.1.100"]apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata:name: allow-ssh-only spec:order: 10ingress:- action: Allowprotocol: TCPsource:nets: ["192.168.1.0/24"]destination:ports: [22]- action: Denyprotocol: TCPsource:notNets: ["192.168.1.0/24"]selector: has(kubernetes-host)
三、Calico 与其他插件对比
特性 | Calico | Flannel | Cilium |
---|---|---|---|
网络模型 | 三层(BGP/eBPF) | 二层覆盖(VXLAN/UDP) | eBPF 加速 |
网络策略 | 原生支持 Kubernetes NP | 需结合 Calico 或 Canal | 原生支持 |
性能 | 高(无封装) | 中(封装开销) | 极高(eBPF 优化) |
适用场景 | 大规模、安全敏感型 | 中小规模、简单网络 | 高性能、服务网格集成 |
四、总结
Calico 以其高性能、强安全性和灵活性,成为 Kubernetes 网络插件的首选之一。无论是金融、电商等对安全要求严格的行业,还是 AI、大数据等需要低延迟的场景,Calico 均能通过三层网络和精细策略提供可靠解决方案。对于中小规模集群,其部署复杂度略高于 Flannel,但长期运维中网络策略的优势显著。