如何基于腾讯云VPC网络配置自定义容器网络?

在腾讯云环境中,基于 VPC(Virtual Private Cloud)配置自定义容器网络,通常用于 Kubernetes 集群(如 TKE)、自建 Docker 环境或使用 CNI 插件的容器平台。目标是让容器与腾讯云 VPC 网络无缝集成,实现跨主机通信、安全组控制、负载均衡等能力。

以下是基于腾讯云 VPC 配置自定义容器网络的详细步骤和最佳实践:


一、前提条件

  1. 已创建腾讯云 VPC 和子网

    • 登录 腾讯云控制台
    • 创建 VPC(例如:10.0.0.0/16)
    • 在 VPC 内创建子网(例如:10.0.1.0/24)
  2. 拥有 CVM 实例或已部署容器运行环境

    • 至少一台 CVM 实例位于上述 VPC 子网中
    • 已安装 Docker 或 Kubernetes(TKE / 自建 K8s)
  3. 了解容器网络模型(CNI)

    • 容器网络依赖 CNI(Container Network Interface)插件实现 IP 分配、路由等

二、方案选择

方案 1:使用腾讯云 TKE(推荐)

TKE(Tencent Kubernetes Engine)原生支持 VPC-CNI 模式,可直接为 Pod 分配 VPC 内真实 IP。

步骤:
  1. 创建 TKE 集群时,选择 “VPC-CNI 网络模式”

    • 不再使用默认的 Overlay 网络(如 Flannel)
    • Pod 直接使用 VPC 子网中的 IP 地址
  2. 配置 ENI(弹性网卡)附加策略

    • 启用“共享网卡模式”以提高 IP 密度
    • 设置辅助 CIDR 或使用主子网分配 Pod IP
  3. 绑定安全组

    • 为 Pod 设置独立的安全组规则,实现细粒度访问控制

✅ 优点:

  • 原生集成,无需手动管理 CNI
  • 支持服务发现、负载均衡、监控
  • 可与 CLB、云数据库等其他产品互通

方案 2:自建 Kubernetes + 腾讯云 CNI 插件

适用于自建 K8s 集群,希望深度定制网络。

步骤:
  1. 部署腾讯云 CNI 插件(tke-cni-plugin)

    GitHub 项目参考:https://github.com/tencentyun/tke-cni-plugin

  2. 准备环境

    # 在每台 Node 上安装依赖
    sudo apt-get install -y jq ipset iproute2
  3. 配置 CNI 插件参数
    编辑 /etc/cni/net.d/10-tke.conf

    {
      "name": "tke",
      "type": "tke",
      "vpcId": "vpc-xxxxxxxx",
      "subnetId": "subnet-xxxxxxxx",
      "eniIpLimit": 10,
      "securityGroupIds": ["sg-xxxxxxxx"]
    }
  4. 部署 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
  5. 重启 kubelet 使用 CNI

    systemctl restart kubelet
  6. 验证 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
  1. 在 CVM 上创建 Macvlan 网络

    docker network create -d macvlan 
      --subnet=10.0.1.0/24 
      --gateway=10.0.1.1 
      -o parent=eth0 
      vpc-macvlan
  2. 启动容器并指定静态 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 监控容器网络流量

四、常见问题排查

  1. Pod 无法获取 IP

    • 检查 ENI 配额、子网 IP 是否充足
    • 查看 tke-cni-agent 日志
  2. 容器无法访问网络

    • 检查子网是否绑定 NAT 网关或公网网关
    • 确认安全组出方向规则允许
  3. 跨节点通信失败

    • 若使用 Overlay 网络,检查 VXLAN 隧道状态
    • 推荐使用 VPC-CNI 避免复杂隧道

五、总结

方案 适用场景 复杂度 推荐度
TKE + VPC-CNI 生产级 Kubernetes ⭐⭐⭐⭐⭐
自建 K8s + tke-cni-plugin 自定义集群 ⭐⭐⭐⭐
Docker Macvlan 单机测试 ⭐⭐

推荐生产环境使用 TKE 的 VPC-CNI 模式,实现高性能、高可用、易运维的容器网络。


如需进一步帮助,可提供你的具体架构(如是否使用 K8s、节点数量、网络规模),我可以给出更详细的配置模板。