harbor服务,cloudfoundry的dea和warden实现UDP的端口映射

来源:互联网 发布:ios抓取网页数据 编辑:程序博客网 时间:2024/06/05 08:29


背景

最近在研究stackato的harbor端口服务器,于是将其部署到cloudfoundry中进行研究。

目标

进过测试,harbor在CF中对tcp的支持正常,但是CF的dea和warden对udp不支持,所以需要改造dea和warden。

dea和warden的通讯流程

先说说dea和warden的通讯流程吧,下面借用论坛中另外一个博客的图片:


warden协议改造

这个好理解,dea收到harbor的消息后,必须知道需要映射tcp还是udp的端口。

        所修改的协议为:Warden::Protocol::NetInRequest

dea端warden接口改造

dea与warden交互的接口在“dea_next\lib\container”目录下,所需要修改的主要是NetInRequest协议对应的接口。

具体可以看代码

warden内部net.sh脚本改造

进入一个部署好的应用的warden内部,如下图所示:



其中要修改的脚步是:net.sh

主要是一下一个“in”和“out”内容:

  "in")
    if [ -z "${HOST_PORT:-}" ]; then
      echo "Please specify HOST_PORT..." 1>&2
      exit 1
    fi

    if [ -z "${CONTAINER_PORT:-}" ]; then
      echo "Please specify CONTAINER_PORT..." 1>&2
      exit 1
    fi

    iptables -t nat -A ${nat_instance_chain} \
      --protocol tcp \
      --destination "${external_ip}" \
      --destination-port "${HOST_PORT}" \
      --jump DNAT \
      --to-destination "${network_container_ip}:${CONTAINER_PORT}"
    ;;


  "out")
    if [ -z "${NETWORK:-}" ] && [ -z "${PORT:-}" ]; then
      echo "Please specify NETWORK and/or PORT..." 1>&2
      exit 1
    fi

    opts=""
    if [ -n "${NETWORK:-}" ]; then
      opts="${opts} --destination ${NETWORK}"
    fi

    # Restrict protocol to tcp when port is specified
    if [ -n "${PORT:-}" ]; then
      opts="${opts} --protocol tcp"
      opts="${opts} --destination-port ${PORT}"
    fi

    iptables -I ${filter_instance_chain} 1 ${opts} --jump RETURN
    ;;


其实内容可以不变,再将tcp改为udp,再加2个“udp_in” “udp_out”分支应该就可以了。

warden内部接口修改

当然,也要修改warden内部调用net.sh的接口,我初步看了看,应该是修改src\warden\warden\lib\warden\container\features目录下的net.rb文件。

具体修改,可以看看代码。

harbor->dea>warden的udp测试

环境建立

当然,首先创建harbor服务实例,部署APP应用。


查看warden内部应用运行情况



看见udp端口已经建立。


查看warden的iptables列表

通过iptables命令,查看端口信息:

iptables  -t  nat  -nL

会发现4000端口是tcp类型,图我就不显示了。

所以用iptables删除该条规则,重新建立udp规则映射,如下图


harbor后端连接的端口是10.10.23.64:37654。所以harbor就可以通过访问10.10.23.64:37654映射端口,就可以访问warden内部的10.254.2.14:4000应用端口。



0 0
原创粉丝点击