Envoy-cluster-static-dns-discovery【三】

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!

 

posted @ 2023-05-12 10:54  しみずよしだ  阅读(37)  评论(0)    收藏  举报