ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

金融行业Kubernetes内网部署Calico CNI实战指南

2026/8/11 18:57:41 拓冰建站 浏览量
金融行业Kubernetes内网部署Calico CNI实战指南 1. 项目背景与需求分析去年在给某金融机构做私有云改造时遇到了一个典型的企业内网Kubernetes部署场景1个管理节点2个工作节点需要部署Calico作为CNI插件。这个看似简单的需求在实际操作中遇到了不少坑今天就把完整实施过程记录下来。为什么选择Calico在金融行业这种对网络性能和安全有严格要求的场景下Calico的纯三层网络方案相比Overlay网络有明显优势没有封包解包的性能损耗支持NetworkPolicy实现微隔离而且排查问题时路由信息清晰可见。客户环境是完全离线的内网所有镜像都需要提前下载好这对Calico的部署提出了额外挑战。2. 环境准备与前置条件2.1 硬件资源配置我们使用了3台物理服务器管理节点32核CPU/128GB内存/2块万兆网卡工作节点16核CPU/64GB内存/2块万兆网卡注意Calico对网络性能敏感建议至少使用千兆网卡万兆更佳。我们遇到过因为网卡性能不足导致的Pod间通信延迟问题。2.2 操作系统配置所有节点统一使用CentOS 7.9进行了以下基础配置关闭swapswapoff -a并注释/etc/fstab中的swap行设置SELinux为permissive模式加载必要的内核模块modprobe br_netfilter echo br_netfilter /etc/modules-load.d/br_netfilter.conf配置内核参数cat /etc/sysctl.d/k8s.conf EOF net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF sysctl --system3. Kubernetes集群部署3.1 使用kubeadm初始化集群在内网环境下我们需要先搭建本地镜像仓库。这里使用Harbor作为私有仓库# 在管理节点上 docker pull registry:2 docker run -d -p 5000:5000 --restartalways --name registry registry:2然后导入必要的Kubernetes镜像版本1.23.5# 将提前下载好的镜像包导入 docker load -i kube-apiserver.tar docker load -i kube-controller-manager.tar # ...其他组件镜像同理 # 重新打tag推送到本地仓库 docker tag k8s.gcr.io/kube-apiserver:v1.23.5 localhost:5000/kube-apiserver:v1.23.5 docker push localhost:5000/kube-apiserver:v1.23.5初始化管理节点kubeadm init \ --image-repositorylocalhost:5000 \ --kubernetes-versionv1.23.5 \ --pod-network-cidr192.168.0.0/16 \ --service-cidr10.96.0.0/123.2 工作节点加入集群在工作节点上执行管理节点初始化完成后输出的join命令kubeadm join 10.10.1.100:6443 --token xxxx \ --discovery-token-ca-cert-hash sha256:xxxx常见问题如果join时报错connection refused检查防火墙是否放行了6443端口。我们在生产环境遇到过因为iptables规则冲突导致节点无法加入的情况。4. Calico网络插件部署4.1 离线安装准备由于是内网环境需要提前下载Calico的manifest文件和镜像# 在外网机器上 curl https://docs.projectcalico.org/manifests/calico.yaml -O docker pull calico/node:v3.21.4 docker pull calico/cni:v3.21.4 docker pull calico/kube-controllers:v3.21.4 # 导出镜像并传输到内网 docker save -o calico-node.tar calico/node:v3.21.4 # ...其他镜像同理在内网环境中导入镜像并推送到本地仓库docker load -i calico-node.tar docker tag calico/node:v3.21.4 localhost:5000/calico-node:v3.21.4 docker push localhost:5000/calico-node:v3.21.44.2 修改部署文件编辑calico.yaml主要修改以下几处修改镜像地址image: localhost:5000/calico/node:v3.21.4配置IP池与kubeadm的--pod-network-cidr保持一致- name: CALICO_IPV4POOL_CIDR value: 192.168.0.0/16根据实际网卡修改IP自动检测方式- name: IP_AUTODETECTION_METHOD value: interfaceeth.*4.3 部署Calicokubectl apply -f calico.yaml验证部署状态kubectl get pods -n kube-system # 应该看到calico-node-xxx和calico-kube-controllers-xxx都Running kubectl get nodes # 所有节点状态应为Ready5. 网络策略配置实战5.1 基础策略隔离命名空间创建一个拒绝所有入口流量的策略apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-ingress namespace: production spec: podSelector: {} policyTypes: - Ingress5.2 微服务间访问控制允许frontend服务访问backend服务apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-frontend-to-backend spec: podSelector: matchLabels: app: backend policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 80806. 故障排查与性能优化6.1 常见问题排查Pod无法分配IPkubectl describe pod pod-name # 查看Events部分是否有IP分配失败信息 # 检查calico-node日志 kubectl logs -n kube-system calico-node-xxxx节点间网络不通# 在Pod内测试 kubectl exec -it pod-name -- ping other-pod-ip # 检查路由表 ip route show6.2 性能调优参数在calico.yaml中添加以下环境变量env: - name: FELIX_IPTABLESREFRESHINTERVAL value: 60s - name: FELIX_IPV6SUPPORT value: false - name: CALICO_STARTUP_LOGLEVEL value: info7. 生产环境经验总结镜像同步技巧使用skopeo工具可以更高效地同步镜像建立内部镜像仓库的定期同步机制网络规划建议Pod CIDR不要与现有物理网络重叠预留足够的IP空间每个节点默认分配/26子网监控配置# 启用Calico的Typha组件以提升大规模集群性能 kubectl scale deployment -n kube-system calico-typha --replicas3升级注意事项先在一个工作节点测试新版本Calico保留旧版本manifest文件以便回滚