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文件示例:

envoy实现C++服务间的socket消息转发_第1张图片

生成容器镜像:

docker build -t envoytcptest:v1.0.0 .

4. 运行容器,测试即可。

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

你可能感兴趣的:(服务网格)