1.Readme
# HTTP Front Proxy demo
### 环境说明
三个Service:
- envoy:Front Proxy,地址由docker-compose动态分配
- webserver01:第一个后端服务,地址由docker-compose动态分配,且将webserver01解析到该地址
- webserver02:第二个后端服务,地址由docker-compose动态分配,且将webserver02解析到该地址
### 运行和测试
1. 创建
```
docker-compose up
```
2. 测试
```
front_proxy_ip=$(docker container inspect --format '{{ $network := index .NetworkSettings.Networks "cluster-static-dns-discovery_envoymesh" }}{{ $network.IPAddress}}' envoy-cluster-static-dns-discovery-envoy-1)
或者
front_proxy_ip=$(docker container inspect --format '{{ $network := index .NetworkSettings.Networks "envoy-cluster-static-dns-discovery_envoymesh" }}{{ $network.IPAddress}}' envoy-cluster-static-dns-discovery-envoy-1)
curl http://${front_proxy_ip}
可以通过admin interface了解集群的相关状态,尤其是获取的各endpoint的相关信息
curl http://${front_proxy_ip}/clusters
```
3. 停止后清理
```
docker-compose down
```
2.docker-compose.yaml
[root@xksmaster1 cluster-static-dns-discovery]# cat docker-compose.yaml
version: '3.3'
services:
envoy:
image: envoyproxy/envoy-alpine:v1.21-latest
environment:
- ENVOY_UID=0
- ENVOY_GID=0
volumes:
- ./envoy.yaml:/etc/envoy/envoy.yaml
networks:
envoymesh:
aliases:
- front-proxy
depends_on:
- webserver01
- webserver02
webserver01:
image: ikubernetes/demoapp:v1.0
environment:
- PORT=8080
hostname: webserver01
networks:
envoymesh:
aliases:
- webserver01
webserver02:
image: ikubernetes/demoapp:v1.0
environment:
- PORT=8080
hostname: webserver02
networks:
envoymesh:
aliases:
- webserver02
networks:
envoymesh:
driver: bridge
ipam:
config:
- subnet: 172.31.10.0/24
3.envoy.yaml
# type: STRICT_DNS
# dns_lookup_family: V4_ONLY
[root@xksmaster1 cluster-static-dns-discovery]# cat envoy.yaml
admin:
access_log_path: "/dev/null"
address:
socket_address:
address: 0.0.0.0
port_value: 9901
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 80 }
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: web_service_1
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: local_cluster }
http_filters:
- name: envoy.filters.http.router
clusters:
- name: local_cluster
connect_timeout: 0.25s
type: STRICT_DNS
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: local_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: webserver01, port_value: 8080 }
- endpoint:
address:
socket_address: { address: webserver02, port_value: 8080 }
4.测试
[root@xksmaster1 cluster-static-dns-discovery]# front_proxy_ip=$(docker container inspect --format '{{ $network := index .NetworkSettings.Networks "cluster-static-dns-discovery_envoymesh" }}{{ $network.IPAddress}}' cluster-static-dns-discovery_envoy_1)
[root@xksmaster1 cluster-static-dns-discovery]# curl $front_proxy_ip
iKubernetes demoapp v1.0 !! ClientIP: 172.31.10.4, ServerName: webserver02, ServerIP: 172.31.10.3!
[root@xksmaster1 cluster-static-dns-discovery]# curl $front_proxy_ip
iKubernetes demoapp v1.0 !! ClientIP: 172.31.10.4, ServerName: webserver02, ServerIP: 172.31.10.3!
[root@xksmaster1 cluster-static-dns-discovery]# curl $front_proxy_ip
iKubernetes demoapp v1.0 !! ClientIP: 172.31.10.4, ServerName: webserver01, ServerIP: 172.31.10.2!
[root@xksmaster1 cluster-static-dns-discovery]# curl $front_proxy_ip
iKubernetes demoapp v1.0 !! ClientIP: 172.31.10.4, ServerName: webserver01, ServerIP: 172.31.10.2!
[root@xksmaster1 cluster-static-dns-discovery]# curl $front_proxy_ip
iKubernetes demoapp v1.0 !! ClientIP: 172.31.10.4, ServerName: webserver02, ServerIP: 172.31.10.3!
[root@xksmaster1 cluster-static-dns-discovery]# curl $front_proxy_ip
iKubernetes demoapp v1.0 !! ClientIP: 172.31.10.4, ServerName: webserver01, ServerIP: 172.31.10.2!