Calico 企业网络策略与运维

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
ASN Autonomous System Number 自治系统编号
AZ Availability Zone 可用区
BGP Border Gateway Protocol 边界网关协议
CIDR Classless Inter-Domain Routing 无类别域间路由,用于表示网段
CNI Container Network Interface 容器网络接口
DNS Domain Name System 域名系统
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
GKE Google Kubernetes Engine Google 托管 Kubernetes 服务
MTU Maximum Transmission Unit 最大传输单元
SNAT Source Network Address Translation 源网络地址转换
SSH Secure Shell 安全远程登录协议
TCP Transmission Control Protocol 传输控制协议
UDP User Datagram Protocol 用户数据报协议
VXLAN Virtual Extensible LAN 虚拟可扩展局域网;LAN 为 Local Area Network(局域网)

场景:采用 Calico 的企业集群实施默认拒绝与团队隔离。前置:基线。与 Cilium 的默认安装方案二选一;本例仅用于新建 kubeadm 集群,无其他 CNI,Pod CIDR 为待确认的 10.244.0.0/16。

网络设计与安装#

VXLAN 模式需要节点间相应 UDP 通路,MTU 按底层网络确定。若企业要求 BGP,先设计 ASN、路由反射器、路由汇总和防火墙,不能把 VXLAN 参数直接改名当成 BGP 上线方案。EKS/GKE policy-only 模式另按供应商限制实施。

helm repo add projectcalico https://docs.tigera.io/calico/charts
helm repo update
helm search repo projectcalico/tigera-operator --versions
export CALICO_VERSION='REPLACE_CHART_VERSION'
helm show values projectcalico/tigera-operator --version "$CALICO_VERSION" > calico-defaults.yaml

保存 calico-values.yaml,确认 CIDR 与 kubeadm 一致且不与主机/Service/企业网重叠:

installation:
  enabled: true
  calicoNetwork:
    bgp: Disabled
    ipPools:
      - cidr: 10.244.0.0/16
        encapsulation: VXLAN
        natOutgoing: Enabled
        nodeSelector: all()
helm upgrade --install calico projectcalico/tigera-operator --namespace tigera-operator --create-namespace --version "$CALICO_VERSION" -f calico-values.yaml --wait --timeout 15m
kubectl get tigerastatus
kubectl -n calico-system get pods -o wide

Operator 安装结束不代表 dataplane 就绪;检查每个节点 calico-node、Typha/controller 健康,再放入业务。参考 Operator Helm 安装。

Hands-on:可移植的团队隔离#

优先用标准 NetworkPolicy,便于迁移;平台才有权调整 namespace 标签。以下只处理 API 入站,保存 orders-ingress-policy.yaml:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: {name: orders-api-ingress, namespace: orders}
spec:
  podSelector:
    matchLabels: {app.kubernetes.io/name: orders-api}
  policyTypes: [Ingress]
  ingress:
    - from:
        - namespaceSelector:
            matchLabels: {kubernetes.io/metadata.name: envoy-gateway-system}
      ports: [{protocol: TCP, port: 8080}]
    - from:
        - namespaceSelector:
            matchLabels: {kubernetes.io/metadata.name: monitoring}
      ports: [{protocol: TCP, port: 8080}]

再为 API 单独建立 Egress 默认拒绝和 DNS/数据库/身份/队列的允许规则;与 Cilium 篇相同,先列真实流量矩阵。不要先全 namespace deny 再摸索生产依赖。NetworkPolicy 的规则是叠加允许,其他宽泛策略可能让你的“拒绝测试”失效。Calico 策略入门

kubectl apply --dry-run=server -f orders-ingress-policy.yaml
kubectl apply -f orders-ingress-policy.yaml
kubectl get networkpolicy -A
kubectl get tigerastatus
验收 证据
Envoy 入口访问 数据面默认在 envoy-gateway-system,真实订单创建/查询成功;确认流量没有被 SNAT 成其他身份
非授权 namespace TCP 建连失败,且没有其他 allow-all 策略
节点/AZ 迁移 重调度后策略仍生效,DNS/数据库正常
MTU/吞吐 大请求与长期连接稳定,记录重传与 p95

若采用 Calico 专有 GlobalNetworkPolicy/tier,必须演练优先级、Pass/Deny 和 host endpoint 的效果,再做全局推广;host 策略误配可隔断 SSH/API,必须保留带外入口。

故障先恢复上一版策略,查 calico-node/Felix、IPPool 地址耗尽、VXLAN 防火墙及 Typha;不要删除 IPPool 或换 CIDR“修复”已运行集群。CNI 切换优先新集群迁移。升级前备份 Installation/IPPool/策略,依官方支持路径演练后滚动进行。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭