长期支持版本

    社区创新版本

      为安全容器配置网络

      tap设备网络支持

      安全容器技术是基于Qemu VM实现的,对于物理机系统来说,安全容器就相当于是一个VM,所以安全容器可以在Neutron网络中将VM通过TAP技术接入外部网络。我们这里不需要关心TAP设备的创建和网桥对接等问题,只需要将指定的TAP设备(host已经存在)热插进pause容器的VM,并更新网卡信息即可。

      相关命令行如下:

      1. 为已经启动的容器添加一个tap网卡(interface)

        $ cat ./test-iface.json | kata-runtime kata-network add-iface 6ec7a98 -
        

        其中:6ec7a98是容器ID的截断,test-infs.json是描述网卡信息的文件,举例如下:

        {
            "device": "tap-test", 
            "name": "eth-test", 
            "IPAddresses": [
                {
                    "address": "172.16.0.3", 
                    "mask": "16"
                }
            ], 
            "hwAddr":"02:42:20:6f:a3:69",
            "mtu": 1500,
            "vhostUserSocket":"/usr/local/var/run/openvswitch/vhost-user1",
            "queues":5
        }
        

        上述json文件中各个字段的含义说明如下:

        字段

        是否可选

        说明

        device

        必选

        设置网卡的主机端名字。支持字母、数字、下划线“\_”、“-” 以及“.”字符,必须以字母开头,且长度不超过15。需要确保同一个宿主机上device不能重复。

        name

        必选

        设置网卡的容器内名称。支持字母、数字、下划线“\_”、“-” 以及“.”字符,必须以字母开头,且长度不超过15。需要确保同一个Sandbox内name不能重复。

        IPAddresses

        可选

        设置网卡的IP地址。暂时支持一张网卡配置一个IP,如果不配置IP,则不会在容器内部配置IP。

        hwAddr

        必选

        设置网卡的mac地址值。

        mtu

        必选

        设置网卡的mtu值。允许范围为[46, 9600]之间

        vhostUserSocket

        可选

        设置dpdk轮询socket路径。路径最大长度128字节,命名规则支持数字、字母、“-”。必须以字母开头。

        queues

        可选

        设置网卡多队列的队列数目。如果不配置,默认为0。

        kata-runtime kata-network add-iface添加网卡命令执行返回结果说明:

        • 命令执行成功:从命令的标准输出返回json格式插入网卡的信息,json格式内容和传入的网卡信息相同。

          例如:

          $ kata-runtime kata-network add-iface <container-id> net.json 
          {"device":"tap_test","name":"eth-test","IPAddresses":[{"Family":2,"Address":"173.85.100.1","Mask":"24"}],"mtu":1500,"hwAddr":"02:42:20:6e:03:01","pciAddr":"01.0/00"}
          
        • 命令执行失败:从命令的标准输出返回字符串null。

          例如:

          $ kata-runtime kata-network add-iface <container-id> netbad.json 2>/dev/null
          null
          

        说明:
        当网卡添加成功时,如果为其指定了IP地址,则kata会为新添加的网卡添加一条destination为同网段地址的默认路由,如上例中添加网卡之后容器内有如下路由被添加:

        [root@6ec7a98 /]# ip route  
        172.16.0.0/16 dev eth-test proto kernel scope link src 172.16.0.3  
        
      2. 列出已经添加的网卡

        $ kata-runtime kata-network list-ifaces 6ec7a98
        [{"name":"eth-test","mac":"02:42:20:6f:a3:69","ip":["172.16.0.3/16"],"mtu":1500}]
        

        可以查询到我们刚才添加的网卡信息。

        kata-runtime kata-network list-ifaces列出已添加网卡命令执行返回结果说明:

        • 命令执行成功:从命令的标准输出返回json格式的Pod中所有插入网卡的信息。

          如果Pod中插入了多个网卡设备,返回的是一个json数组格式的网卡信息

          $ kata-runtime kata-network list-ifaces <container-id>
          [{"name":"container_eth","mac":"02:42:20:6e:a2:59","ip":["172.17.25.23/8"],"mtu":1500},{"name":"container_eth_2","mac":"02:90:50:6b:a2:29","ip":["192.168.0.34/24"],"mtu":1500}]
          

          如果Pod中没有插入任何网卡设备,从命令的标准输出返回字符串null。

          $ kata-runtime kata-network list-ifaces <container-id>
          null
          
        • 命令执行失败:从命令的标准输出返回字符串null,从命令的标准错误输出返回错误描述信息。

          例如:

          $ kata-runtime kata-network list-ifaces <container-id>
          null
          
      3. 为指定网卡添加一条路由

        $ cat ./test-route.json | kata-runtime kata-network add-route 6ec7a98 -
        [{"dest":"default","gateway":"172.16.0.1","device":"eth-test"}]
        

        kata-runtime kata-network add-route为指定网卡添加一条路由命令执行返回结果说明:

        • 命令执行成功:从命令的标准输出返回json格式的添加的路由信息。

          例如:

          $ kata-runtime kata-network add-route <container-id> route.json 
          [{"dest":"177.17.0.0/24","gateway":"177.17.25.1","device":"netport_test_1"}]
          
        • 命令执行失败:从命令的标准输出返回字符串null,从命令的标准错误输出返回错误描述信息。

          例如:

          $ kata-runtime kata-network add-route <container-id> routebad.json 2>/dev/null
          null
          

        字段说明如下:

        • dest:设置路由对应的网段。格式为<ip>/<mask>,<ip>必选。分如下3种情况:

          1. 配置<ip>/<mask>;
          2. 只配置<ip>,则默认掩码为32;
          3. 若配置了"dest":"default",默认无dest,需传入gateway。
        • gateway:设置路由的下一跳网关。设置"dest":"default"时,gateway必选;其他情况可选。

        • device:必选。设置路由对应的网卡名称,最长支持15字符。

        说明:
        如果为容器内的回环设备lo添加路由时,路由配置文件中的"device"字段对应的设备名称为"lo"。

      4. 删除指定路由

        $ cat ./test-route.json | kata-runtime kata-network del-route 6ec7a98 -
        

        test-route.json字段与添加路由输入json文件的字段相同。

        kata-runtime kata-network del-route删除指定路由命令执行返回结果说明:

        • 命令执行成功:从命令的标准输出返回json格式的添加的路由信息。

          例如:

          $ kata-runtime kata-network del-route <container-id> route.json 
          [{"dest":"177.17.0.0/24","gateway":"177.17.25.1","device":"netport_test_1"}]
          
        • 命令执行失败:从命令的标准输出返回字符串null,从命令的标准错误输出返回错误描述信息。

          例如:

          $ kata-runtime kata-network del-route <container-id> routebad.json 2>/dev/null
          null
          

        说明:

        • 输入字段中dest为必选,device/gateway均为可选。kata根据不同字段进行模糊匹配,删除对应的路由规则。例如指定了dest为某个IP,则所有该IP的规则都会被删除。
        • 如果删除的是容器内回环设备lo的路由时,路由配置文件中的"device"字段对应的设备名称为"lo"。
      5. 删除已经添加的网卡

        $ cat ./test-iface.json | kata-runtime kata-network del-iface 6ec7a98 -
        

        说明:
        删除网卡时,仅根据网卡容器内名称(name字段)来删除。即便填写其他字段,kata也不会使用。

        kata-runtime kata-network del-iface删除网卡命令执行返回结果说明:

        • 命令执行成功:从命令标准输出返回null字符串。

          例如:

          $ kata-runtime kata-network del-iface <container-id> net.json
          null
          
        • 命令执行失败:从命令标准输出返回删除失败网卡json格式的信息,从命令的标准错误输出返回错误描述信息。

          例如:

          $ kata-runtime kata-network del-iface <container-id> net.json
          {"device":"tapname_fun_012","name":"netport_test_1","IPAddresses":[{"Family":0,"Address":"177.17.0.1","Mask":"8"}],"mtu":1500,"hwAddr":"02:42:20:6e:a2:59","linkType":"tap"}
          

      以上为常用场景和命令行示例,具体命令行接口“附录 > 接口列表”。

      kata IPVS子系统

      安全容器提供添加ipvs命令的接口,支持对容器设置ipvs规则。功能包含对虚拟服务的添加/编辑/删除、对真实服务器的添加/编辑/删除、查询ipvs服务信息、设置连接超时、清理系统连接缓存,并支持对规则的批量导入。

      1. 为容器添加一个虚拟服务地址

        kata-runtime kata-ipvs ipvsadm --parameters "--add-service --tcp-service 172.17.0.7:80 --scheduler rr --persistent 3000" <container-id>
        
      2. 修改容器虚拟服务参数

        kata-runtime kata-ipvs ipvsadm --parameters "--edit-service --tcp-service 172.17.0.7:80 --scheduler rr --persistent 5000" <container-id>
        
      3. 删除容器虚拟服务地址

        kata-runtime kata-ipvs ipvsadm --parameters "--delete-service --tcp-service 172.17.0.7:80" <container-id>
        
      4. 为虚拟服务地址添加一个真实服务器

        kata-runtime kata-ipvs ipvsadm --parameters "--add-server --tcp-service 172.17.0.7:80 --real-server 172.17.0.4:80 --weight 100" <container-id>
        
      5. 修改容器真实服务器参数

        kata-runtime kata-ipvs ipvsadm --parameters "--edit-server --tcp-service 172.17.0.7:80 --real-server 172.17.0.4:80 --weight 200" <container-id>
        
      6. 删除容器真实服务器

        kata-runtime kata-ipvs ipvsadm --parameters "--delete-server --tcp-service 172.17.0.7:80 --real-server 172.17.0.4:80" <container-id>
        
      7. 查询服务信息

        kata-runtime kata-ipvs ipvsadm --parameters "--list" <container-id>
        
      8. 逐条导入耗时太久,可将规则写入文件后,批量导入

        kata-runtime kata-ipvs ipvsadm --restore -  <  <规则文件路径> <container-id>
        

        说明:
        单条添加时默认使用NAT模式,批量导入时添加真实服务器需手动添加-m参数使用NAT模式。
        规则文件内容示例:
        -A -t 10.10.11.12:100 -s rr -p 3000
        -a -t 10.10.11.12:100 -r 172.16.0.1:80 -m
        -a -t 10.10.11.12:100 -r 172.16.0.1:81 -m
        -a -t 10.10.11.12:100 -r 172.16.0.1:82 -m

      9. 清理系统连接缓存

        kata-runtime kata-ipvs cleanup --parameters "--orig-dst 172.17.0.4 --protonum tcp" <container-id>
        
      10. 为tcp/tcpfin/udp连接设置超时

        kata-runtime kata-ipvs ipvsadm --parameters "--set 100 100 200" <container-id>
        

        说明:

        1. 每个容器支持iptables规则数量最大为20000条(5k service,3个server/service),add-service和add-server都算作规则。
        2. 批量导入前需清空已有规则。
        3. 不存在并发测试场景。
        4. 以上为常用命令示例,具体命令行接口请参见“附录 > 接口列表”。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份