本文介紹使用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