Cilium 企业网络隔离与可观测性

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
AZ Availability Zone 可用区
BPF Berkeley Packet Filter 伯克利包过滤器技术
CIDR Classless Inter-Domain Routing 无类别域间路由,用于表示网段
CNI Container Network Interface 容器网络接口
DNS Domain Name System 域名系统
eBPF extended Berkeley Packet Filter 扩展 BPF,用于内核可编程观测等场景
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
ENI Elastic Network Interface AWS 弹性网络接口
GKE Google Kubernetes Engine Google 托管 Kubernetes 服务
IP Internet Protocol 网际协议;IP 地址是网络寻址标识
K8s Kubernetes 容器编排平台;8 表示 K 与 s 之间的八个字母
MTU Maximum Transmission Unit 最大传输单元
PDB Pod Disruption Budget Pod 中断预算,约束自愿驱逐
STS Security Token Service 安全令牌服务,用于签发或交换短期凭据
TCP Transmission Control Protocol 传输控制协议
TLS Transport Layer Security 传输层安全协议
UDP User Datagram Protocol 用户数据报协议
VPC Virtual Private Cloud 虚拟私有云网络

场景:订单命名空间默认隔离,只允许入口、DNS、数据库与指定监控流量,并用 Hubble 定位拒绝。前置:基线。CNI 是集群基础设施;本安装仅用于新建、尚未安装 CNI 的 kubeadm 集群,保留 kube-proxy。已有 Calico/EKS VPC CNI/GKE Dataplane V2 不可直接覆盖安装。

安装前的设计#

确定 Pod/Service/主机 CIDR 不重叠、MTU、隧道端口、防火墙、内核/eBPF 支持和各节点 IP。生产替换 CNI 采用独立新集群迁移,或供应商明确支持的迁移流程;helm rollback 不能恢复已经改变的网络状态。

EKS 的 ENI/native/chaining 与自建 overlay 是不同方案,GKE Dataplane V2 已由平台管理。选择依据:Cilium 安装。

helm repo add cilium https://helm.cilium.io/
helm repo update
helm search repo cilium/cilium --versions
export CILIUM_VERSION='1.18.6' # 本文渲染基线;先核对集群兼容矩阵
helm show values cilium/cilium --version "$CILIUM_VERSION" > cilium-defaults.yaml

保存 cilium-values.yaml;示例复用 kubeadm 分配的 Node PodCIDR,因此须先确认 Node 的 .spec.podCIDr 非空:

下载完整 cilium-values.yaml;替换 REPLACE_ 环境输入后保存到当前目录。配置包含资源预算、双副本、单节点故障分散和中断预算。资源是压测起点,不能替代容量测试。

kubectl get nodes -o custom-columns=NAME:.metadata.name,PODCIDR:.spec.podCIDr
helm upgrade --install cilium cilium/cilium -n kube-system --version "$CILIUM_VERSION" -f cilium-values.yaml --wait --timeout 15m
cilium status --wait
cilium connectivity test

连接测试会创建探测资源,只证明基础网络;后续必须验证真实业务。配套 values 已包含 agent/Envoy/operator/relay 资源与控制器 PDB;operator 和 relay 跨节点,跨 AZ 故障仍需至少两区有可调度容量。

Hands-on:只放行订单 API 的必要路径#

先按真实流量建立允许矩阵。保存 orders-cilium.yaml;将 10.40.8.0/24 改成专用数据库子网。Gateway 篇默认 Envoy 数据面位于 envoy-gateway-system,不是 Gateway 对象所在的 edge;按实际 Pod namespace 核对来源。Prometheus 位于 monitoring。数据库必须 TLS 和独立账号;CIDR 允许并不等于数据库授权。

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata: {name: orders-api, namespace: orders}
spec:
  endpointSelector:
    matchLabels: {app.kubernetes.io/name: orders-api}
  ingress:
    - fromEndpoints:
        - matchLabels: {k8s:io.kubernetes.pod.namespace: envoy-gateway-system}
      toPorts:
        - ports: [{port: "8080", protocol: TCP}]
    - fromEndpoints:
        - matchLabels: {k8s:io.kubernetes.pod.namespace: monitoring}
      toPorts:
        - ports: [{port: "8080", protocol: TCP}]
  egress:
    - toEndpoints:
        - matchLabels:
            k8s:io.kubernetes.pod.namespace: kube-system
            k8s:k8s-app: kube-dns
      toPorts:
        - ports: [{port: "53", protocol: UDP}, {port: "53", protocol: TCP}]
    - toCIDR: [10.40.8.0/24]
      toPorts:
        - ports: [{port: "5432", protocol: TCP}]

这会把选中的 API Pod 转为默认拒绝;如果 API 还调用 STS、队列、外部服务,先补允许规则再发布。NodeLocal DNS 使用本地 IP,不能直接套用上面的 DNS selector;以实际 DNS 路径调整。策略语义

kubectl apply --dry-run=server -f orders-cilium.yaml
kubectl apply -f orders-cilium.yaml
cilium hubble port-forward
# 另一终端,已安装兼容 hubble CLI:
hubble observe --namespace orders --verdict DROPPED --follow

验收:合法入口完成订单读写;其他团队 Pod 连接 API/数据库被拒绝;TCP/UDP DNS 都成功;跨节点/AZ 与最大业务报文正常;业务压测无 MTU/重传异常。记录 flow verdict,不记录敏感请求体。

故障与恢复#

先只在预生产目标工作负载加策略,误封时恢复 Git 中的上一策略并观察连接恢复;不要删除全局策略或重装 CNI。演练节点 drain 后跨节点通信,检查 agent 状态、BPF map 压力、丢包和 DNS 延迟。升级需逐 minor 核对 Cilium/K8s/内核兼容与回退限制,保持控制器/agent 版本受控。

配置复核#

安装前按 配置验收 渲染并检查;节点资源不足导致反亲和性 Pending 时先扩容,不删除保护条件。

搜索文档

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

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