在腾讯云环境中,基于 VPC(Virtual Private Cloud)配置自定义容器网络,通常用于 Kubernetes 集群(如 TKE)、自建 Docker 环境或使用 CNI 插件的容器平台。目标是让容器与腾讯云 VPC 网络无缝集成,实现跨主机通信、安全组控制、负载均衡等能力。
以下是基于腾讯云 VPC 配置自定义容器网络的详细步骤和最佳实践:
一、前提条件
-
已创建腾讯云 VPC 和子网
- 登录 腾讯云控制台
- 创建 VPC(例如:10.0.0.0/16)
- 在 VPC 内创建子网(例如:10.0.1.0/24)
-
拥有 CVM 实例或已部署容器运行环境
- 至少一台 CVM 实例位于上述 VPC 子网中
- 已安装 Docker 或 Kubernetes(TKE / 自建 K8s)
-
了解容器网络模型(CNI)
- 容器网络依赖 CNI(Container Network Interface)插件实现 IP 分配、路由等
二、方案选择
方案 1:使用腾讯云 TKE(推荐)
TKE(Tencent Kubernetes Engine)原生支持 VPC-CNI 模式,可直接为 Pod 分配 VPC 内真实 IP。
步骤:
-
创建 TKE 集群时,选择 “VPC-CNI 网络模式”
- 不再使用默认的 Overlay 网络(如 Flannel)
- Pod 直接使用 VPC 子网中的 IP 地址
-
配置 ENI(弹性网卡)附加策略
- 启用“共享网卡模式”以提高 IP 密度
- 设置辅助 CIDR 或使用主子网分配 Pod IP
-
绑定安全组
- 为 Pod 设置独立的安全组规则,实现细粒度访问控制
✅ 优点:
- 原生集成,无需手动管理 CNI
- 支持服务发现、负载均衡、监控
- 可与 CLB、云数据库等其他产品互通
方案 2:自建 Kubernetes + 腾讯云 CNI 插件
适用于自建 K8s 集群,希望深度定制网络。
步骤:
-
部署腾讯云 CNI 插件(tke-cni-plugin)
GitHub 项目参考:https://github.com/tencentyun/tke-cni-plugin
-
准备环境
# 在每台 Node 上安装依赖 sudo apt-get install -y jq ipset iproute2 -
配置 CNI 插件参数
编辑/etc/cni/net.d/10-tke.conf:{ "name": "tke", "type": "tke", "vpcId": "vpc-xxxxxxxx", "subnetId": "subnet-xxxxxxxx", "eniIpLimit": 10, "securityGroupIds": ["sg-xxxxxxxx"] } -
部署 DaemonSet 运行 CNI 控制组件
apiVersion: apps/v1 kind: DaemonSet metadata: name: tke-cni-agent namespace: kube-system spec: selector: matchLabels: app: tke-cni-agent template: metadata: labels: app: tke-cni-agent spec: hostNetwork: true containers: - name: tke-cni-agent image: ccr.ccs.tencentyun.com/tke/tke-cni-agent:v1.0 securityContext: privileged: true env: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName volumeMounts: - name: cni-bin-dir mountPath: /opt/cni/bin - name: cni-net-dir mountPath: /etc/cni/net.d volumes: - name: cni-bin-dir hostPath: path: /opt/cni/bin - name: cni-net-dir path: /etc/cni/net.d -
重启 kubelet 使用 CNI
systemctl restart kubelet -
验证 Pod 是否获取 VPC IP
kubectl run test-pod --image=nginx kubectl get pod test-pod -o wide输出中
IP应属于 VPC 子网范围。
方案 3:Docker + Macvlan / IPVLAN(适用于单机场景)
若仅使用 Docker,可通过 Macvlan 实现容器直连 VPC 网络。
示例:使用 Macvlan
-
在 CVM 上创建 Macvlan 网络
docker network create -d macvlan --subnet=10.0.1.0/24 --gateway=10.0.1.1 -o parent=eth0 vpc-macvlan -
启动容器并指定静态 IP
docker run -d --name web --network vpc-macvlan --ip=10.0.1.100 nginx
⚠️ 注意:
- 必须开启 CVM 的混杂模式(Promiscuous Mode),可在腾讯云控制台设置:
- 进入“弹性网卡” → 选中主网卡 → 开启“混杂模式”
- 安全组需放行对应端口
三、关键配置要点
| 项目 | 说明 |
|---|---|
| IPAM | 使用腾讯云 VPC 子网作为 IP 地址池,避免 IP 冲突 |
| 安全组 | 为容器流量设置独立安全组,实现微隔离 |
| DNS | 配置 VPC 内 DNS(如 10.0.0.2)确保内网域名解析 |
| 路由 | 确保 VPC 路由表包含容器子网(若使用 Overlay 网络需添加路由) |
| 监控与日志 | 结合 CLS、Cloud Monitor 监控容器网络流量 |
四、常见问题排查
-
Pod 无法获取 IP
- 检查 ENI 配额、子网 IP 是否充足
- 查看 tke-cni-agent 日志
-
容器无法访问网络
- 检查子网是否绑定 NAT 网关或公网网关
- 确认安全组出方向规则允许
-
跨节点通信失败
- 若使用 Overlay 网络,检查 VXLAN 隧道状态
- 推荐使用 VPC-CNI 避免复杂隧道
五、总结
| 方案 | 适用场景 | 复杂度 | 推荐度 |
|---|---|---|---|
| TKE + VPC-CNI | 生产级 Kubernetes | 低 | ⭐⭐⭐⭐⭐ |
| 自建 K8s + tke-cni-plugin | 自定义集群 | 中 | ⭐⭐⭐⭐ |
| Docker Macvlan | 单机测试 | 中 | ⭐⭐ |
✅ 推荐生产环境使用 TKE 的 VPC-CNI 模式,实现高性能、高可用、易运维的容器网络。
如需进一步帮助,可提供你的具体架构(如是否使用 K8s、节点数量、网络规模),我可以给出更详细的配置模板。
PHPWP博客