当前位置: 首页 > news >正文

通过具体场景、操作示例和实际命令来具象化 Calico 的功能

下面通过具体场景操作示例实际命令来具象化 Calico 的功能,帮助你更直观地理解它的作用。


一、Calico 的核心功能具体化

1. Pod 网络通信:跨节点直连

问题场景:
  • 默认的 Docker 网络或 Flannel(VXLAN 模式)通过隧道封装跨节点流量,存在性能损耗。

  • Calico 如何解决? 直接通过路由表让节点间 Pod 互通。

操作验证:
  1. 查看节点路由表(Calico BGP 模式):

    # 在任意节点执行
    ip route

    输出示例:

    10.244.1.0/24 via 192.168.1.2 dev eth0  # 表示去往 10.244.1.0/24 的 Pod 需经过 192.168.1.2(另一个节点)
    • Calico 自动学习并同步了其他节点上 Pod 子网的路由。

  2. 测试跨节点 Pod 通信

    kubectl run test-pod --image=alpine -- sleep 3600
    kubectl exec -it test-pod -- ping <另一个节点的PodIP>
    • 直接 Ping 通(无需 NAT 或隧道封装),延迟显著低于 Overlay 网络。


2. 网络策略:实现 Pod 间隔离

问题场景:
  • 默认情况下,Kubernetes 中所有 Pod 可以互相访问,存在安全隐患。

  • Calico 如何解决? 通过 NetworkPolicy 定义规则。

操作示例:
  1. 创建一个拒绝所有入站流量的策略

    # deny-all.yaml
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:name: deny-all
    spec:podSelector: {}policyTypes:- Ingress
    
    kubectl apply -f deny-all.yaml
    • 此时所有 Pod 将无法被其他 Pod 访问(包括同一 Namespace 内)。

  2. 放行特定 Pod 的访问(例如前端访问后端):

    # allow-frontend-to-backend.yaml
    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 的 Pod 的 80 端口。


3. 网络策略高级用法:基于 IP/CIDR 限制访问

场景:
  • 只允许公司内网(如 192.168.1.0/24)访问数据库 Pod。

操作:
# allow-office-to-db.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-office-to-db
spec:podSelector:matchLabels:app: mysqlpolicyTypes:- Ingressingress:- from:- ipBlock:cidr: 192.168.1.0/24ports:- protocol: TCPport: 3306

4. BGP 模式与公有云集成

场景:
  • 在 AWS/GCP 中,Calico 默认使用 IP-in-IP 封装,但某些云支持 BGP 直连。

操作:
  1. 修改 Calico 配置

    kubectl edit configmap calico-config -n kube-system

    修改 ipipMode 和 natOutgoing

    ipipMode: Never  # 禁用 IP-in-IP
    natOutgoing: false
  2. 配置 BGP 对等(以 AWS 为例):

    • 在 AWS 中启用 Direct Connect 或 Transit Gateway,将 Calico 的 BGP 路由广播到企业网络。


二、常见问题排查

1. Pod 无法跨节点通信

  • 检查步骤

    # 确认 Calico Pod 正常运行
    kubectl get pods -n kube-system | grep calico# 查看 Calico 节点状态
    calicoctl get nodes# 检查 BGP 对等状态(如果使用 BGP)
    calicoctl node status

2. 网络策略未生效

  • 检查步骤

    # 查看策略是否已应用
    kubectl get networkpolicy --all-namespaces# 检查 Calico 的 Felix 日志(负责策略执行)
    kubectl logs -l k8s-app=calico-node -n kube-system -c felix

三、性能调优建议

1. 启用 eBPF 模式(替代 iptables)

# 要求:Linux 内核 >= 4.18,Calico >= 3.13
calicoctl patch kubecontrollersconfiguration default --patch='{"spec": {"controllers": {"node": {"hostEndpoint": {"autoCreate": "Enabled"}}}}}'

2. 调整 BGP 路由反射器

  • 在大规模集群中,为避免全节点 BGP 对等:

    calicoctl create -f - <<EOF
    apiVersion: projectcalico.org/v3
    kind: BGPConfiguration
    metadata:name: default
    spec:logSeverityScreen: InfonodeToNodeMeshEnabled: false  # 关闭全互联asNumber: 63400serviceClusterIPs:- cidr: 10.96.0.0/12
    EOF

四、总结:Calico 的核心操作

功能具体操作
查看 Pod 网络ip route 或 calicoctl get ippool -o wide
隔离 Pod定义 NetworkPolicy 并应用 kubectl apply -f policy.yaml
放行特定流量在策略中指定 podSelector 和 ports
跨集群互通配置 Calico 的 BGP Peer 或使用 WireGuard 加密
监控网络流量部署 Calico Enterprise 或使用 Hubble(Cilium 配合)

通过以上具体操作,你可以直接验证 Calico 的能力,而不再停留在理论层面。如果需要更深入的场景(如与 Istio 集成或网络性能测试),可以进一步探讨!

http://www.xdnf.cn/news/255637.html

相关文章:

  • 动态规划之路径问题1
  • 从括号匹配看栈:数据结构入门的实战与原理
  • 中小企业MES系统需求文档
  • 数控滑台:将制造业推向智能化的关键装备
  • C++_STL
  • 每日算法-250502
  • 【免费】2007-2021年上市公司对外投资数据
  • 专题二十二:DHCP协议
  • (13)Element Plus详细使用方法
  • leetcode 838. 推多米诺 中等
  • 【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session
  • 英一真题阅读单词笔记 22-23年
  • Java 泛型:T、E、K、V 的使用与示例(深入理解)
  • 2025年五一数学建模A题【支路车流量推测】原创论文讲解(含完整python代码)
  • 组件通信-<slot>
  • SX24C01.UG-PXI程控电阻桥板卡
  • BLE协议栈的解析
  • 流水线相关计算【计算机组成与体系结构】
  • SpringTask
  • MySQL — 数据库建库与建表
  • html:table表格
  • B站Michale_ee——ESP32_IDF SDK——FreeRTOS_8 消息缓冲区
  • 神州趣味地名-基于天地图和LeafLet的趣味地名探索
  • 软件工程中的 QFD
  • 力扣面试150题--分隔链表
  • 深度学习视角下魔幻手机的实现探索与技术实践
  • python常用科学计算库及使用示例
  • 第六章 配置能力增强
  • C语言数据类型与内存布局
  • Linux系统中的用户分类、为什么Linux系统中有很多我没有创建的用户?