envoy實現C++服務間的socket消息轉發

本文介紹使用envoy中的tcp代理實現C++服務間的socket消息轉發。

1. 確定宿主機與容器間網絡

由於C++服務中的客戶端及服務器程序直接在宿主機上運行,所有需要提前確定好宿主機與docker容器是否能正常通信

2. envoy.yaml配置文件,注意監聽過濾器及clusters中配置的是容器網絡的IP地址

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 127.0.0.1, port_value: 9901 }

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 172.17.0.2, port_value: 10000 }
    filter_chains:
    - filters:
      - name: envoy.tcp_proxy
        typed_config:
          "@type": type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp_stats
          cluster: cluster_0
  clusters:
  - name: cluster_0
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    hosts: [{ socket_address: { address: 172.17.0.1, port_value: 5000 }}]

3. 新建文件夾,將.yaml文件複製到本地,創建Dockefile文件,生成容器鏡像

Dockerfile文件示例:

生成容器鏡像:

docker build -t envoytcptest:v1.0.0 .

4. 運行容器,測試即可。

docker run -p 10000:10000 --name envoytcptest envoytcptest:v1.0.0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章