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 wideOperator 安装结束不代表 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/策略,依官方支持路径演练后滚动进行。