容器引擎CCE

    VPC-CNI模式集群访问公网实践

    VPC-CNI 模式集群访问公网实践

    概述

    在一些场景中,用户需要让 VPC-CNI 模式集群中的节点或 Pod 具备访问公网的能力,如通过 yum install 等命令访问外部源地址下载安装软件、容器需要访问公网中的某些服务等等。

    对于节点访问公网的操作,请参考 CCE-访问公网实践

    由于 VPC-CNI 模式集群中的 Pod 流量全部流经挂载在节点上的弹性网卡,因此对于集群内 Pod 访问公网的需求,我们提供了以下两种方案配置弹性网卡,用户可以根据具体需求自行选择。

    相关概念

    EIP:EIP是百度智能云提供的弹性公网IP服务,EIP可以挂载到CCE节点、BLB、NAT网关等服务,提供可以访问公网的地址。

    NAT网关:百度智能云 NAT 网关支持用户VPC子网中的BCC、DCC等实例连接公网,通过NAT网关实现内网IP转换为公网IP地址。

    节点子网:用户在创建CCE工作节点时,可以选择节点所在的VPC子网。子网通常会有两种类型:通用型子网、NAT专属型子网。通用型子网中的节点可以挂载EIP直接访问公网,NAT专属型子网中的节点则只能通过NAT网关实现公网访问。

    弹性网卡: 弹性网卡为用户单独创建并挂载在虚机实例上,用户可以在虚机创建、虚机停机或运行时挂载弹性网卡,用户挂载并配置好网卡后通过配置系统路由即可实现不同流量走不同网卡。 CCE VPC-CNI 模式集群中的 Pod 流量正是通过挂载在节点上的弹性网卡流入流出。

    方案一:通用型子网 + EIP

    在 VPC-CNI 模式集群创建成功后,进入【节点列表】页:

    node_list.png

    点击其中 Pod 想要访问公网的节点名称,进入节点管理页面,点击左侧【网卡】栏目:

    node_nic.png

    点击弹性网卡主IP一行中【公网IP】按钮即可给弹性网卡主IP添加 EIP。在弹性网卡主IP绑定了 EIP 之后,节点内会动态生成一条 iptables 规则,保证 Pod 内所有访问 VPC 网段以外的流量都经过该 EIP 进行 SNAT, 从而能够实现 Pod 访问公网。如果弹性网卡主IP解绑了 EIP,该 iptables SNAT 规则将会被删除。

    您也可以同时给弹性网卡的辅助IP添加 EIP,拥有绑定了 EIP 的辅助IP的 Pod 将会通过 SNAT 直接访问公网,并且能够在公网上被直接访问。

    目前 iptables SNAT 同步的默认时间间隔是 1 分钟。如果您想修改该时间间隔,可以通过以下命令修改cce-vpc-cni-backend daemonset参数,

    kubectl edit daemonset cce-vpc-cni-backend -n kube-system

    添加或修改环境变量 IPTABLES_INTERVAL (单位为秒),并重启 cce-vpc-cni-backend 的所有 Pod 即可。

     spec:
          containers:
          - command:
            - /usr/bin/cce-vpc-cni-backend
            - -log-level
            - debug
            - -daemon-mode
            - ENI
            env:
            - name: IPTABLES_INTERVAL
              value: "120" # 时间间隔 2 分钟
            - name: CLUSTER_CIDR
              value: 10.0.0.0/8
            - name: SERVICE_CIDR
              value: 172.16.0.0/16
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: spec.nodeName

    方案二:NAT专属型子网 + NAT 网关

    如果不希望 Pod 在访问公网时暴露弹性网卡的公网IP,可以通过 NAT 网关为私有网络提供访公网访问服务。参考 NAT网关最佳实践

    目前 VPC-CNI 模式集群中弹性网卡与节点处于同一子网中,通过在创建集群时节点子网选择“NAT专属子网”类型,创建出的集群节点以及挂载的弹性网卡都可以通过子网的NAT网关访问公网。

    如果您不知道如何创建 NAT专属型子网 与 NAT 网关,可以参考 方案二:NAT专属型子网 + NAT 网关

    注意:NAT专属型子网内的节点和弹性网卡将无法绑定EIP,必须创建NAT网关并且建立路由表规则后,才能访问公网。

    优缺点分析

    方案 优点 缺点
    通用型子网 + EIP 操作简单
    弹性网卡或者 Pod 能够被公网访问
    需要暴露弹性网卡或者 Pod 的 EIP,存在安全风险
    NAT专属子网 + NAT网关 节点完全没有EIP,安全性高
    弹性网卡和 Pod 无法绑定EIP,无法被公网访问
    上一篇
    CCE集群备份
    下一篇
    CCE容器网络模式选择