长期支持版本

    为安全容器配置网络

    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-iface.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备份