envoy静态配置实例

2023-02-21  本文已影响0人  程序员札记

提示:为便于建立测试环境,示例将以 docker-compose工具编排运行,相关的代码位于

[https://github.com/ikubernetes/servicemesh_in_practice.git]

1、envoy-echo

telnet ip 端口,输入什么信息,会显示什么信息

envoy.yaml

static_resources:
  listeners: - name: listener_0
    address:
      socket_address:
        address: 0.0.0.0 port_value: 8080 filter_chains: - filters: - name: envoy.filters.network.echo

Dockerfile

FROM envoyproxy/envoy-alpine:v1.20.0 ADD envoy.yaml /etc/envoy/

docker-compose.yaml

version: '3.3' services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.4.2 aliases: - envoy-echo networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.4.0/24

运行envoy-echo实验

root@test:/apps/servicemesh_in_practise/Envoy-Basics/envoy-echo# docker-compose up

telnet envoy的ip+端口

root@test:~# telnet 172.31.4.2 8080 Trying 172.31.4.2...
Connected to 172.31.4.2.
Escape character is '^]'.
#输入什么,会显示什么
root@test:~# telnet 172.31.4.2 8080 Trying 172.31.4.2...
Connected to 172.31.4.2.
Escape character is '^]'.
abc
abc
ni hao
ni hao

修改envoy配置文件在envoy容器中测试

root@test:/apps/servicemesh_in_practise/Envoy-Basics/envoy-echo# docker-compose down

编辑envoy-v2.yaml

admin:
  access_log_path: /dev/null address:
    socket_address:
      address: 127.0.0.1 port_value: 0 static_resources:
  clusters:
    name: cluster_0
    connect_timeout: 0.25s
    load_assignment:
      cluster_name: cluster_0
      endpoints: - lb_endpoints: - endpoint:
            address:
              socket_address:
                address: 127.0.0.1 port_value: 0 listeners: - name: listener_0
    address:
      socket_address:
        address: 127.0.0.1 port_value: 8080 filter_chains: - filters: - name: envoy.filters.network.echo

docker-cpmpose.yaml

version: '3.3' services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 volumes: - ./envoy-v2.yaml:/etc/envoy/envoy.yaml  #使用envoy-v2.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.4.2 aliases: - envoy-echo networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.4.0/24

再次运行

root@test:/apps/servicemesh_in_practise/Envoy-Basics/envoy-echo# docker-compose up

进去容器

root@test:/apps/servicemesh_in_practise/Envoy-Basics/envoy-echo# docker-compose exec envoy sh
/ # nc 127.0.0.1 8080 abv
abv
ni hao world
ni hao world
#输入什么,就显示什么

2、http-ingress

实验环境

两个Service:

envoy:Sidecar Proxy
webserver01:第一个后端服务,地址为127.0.0.1

访问enovy的ip+端口,便可访问enovy后端的服务

envoy.yaml

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: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: local_cluster
      endpoints: - lb_endpoints: - endpoint:
            address:
              socket_address: { address: 127.0.0.1, port_value: 8080 }

docker-compose.yaml

version: '3' services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 environment: - ENVOY_UID=0 #docker-compose up报error initializing configuration '/etc/envoy/envoy.yaml': cannot bind '0.0.0.0:80': Permission denied需要添加该环境变量

    volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.3.2 aliases: - ingress

  webserver01:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
      - HOST=127.0.0.1 network_mode: "service:envoy" depends_on: - envoy

networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.3.0/24

访问172.31.3.2:80,可以被envoy转发到后端webserver01上

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/http-ingress# docker-compose up
#重新克隆一个窗口多访问几次
root@test:/apps/servicemesh_in_practise/Envoy-Basics/http-ingress# curl 172.31.3.2 iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.1, ServerName: d4eda0b2b84c, ServerIP: 172.31.3.2! root@test:/apps/servicemesh_in_practise/Envoy-Basics/http-ingress# curl 172.31.3.2 iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.1, ServerName: dc4bd7a1316f, ServerIP: 172.31.3.2! root@test:/apps/servicemesh_in_practise/Envoy-Basics/http-ingress# curl 172.31.3.2 iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.1, ServerName: dc4bd7a1316f, ServerIP: 172.31.3.2! root@test:/apps/servicemesh_in_practise/Envoy-Basics/http-ingress# curl 172.31.3.2 iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.1, ServerName: dc4bd7a1316f, ServerIP: 172.31.3.2! #在前台运行的envoy程序上查看日志信息
......
webserver01_1 |  * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
webserver01_1  | 127.0.0.1 - - [01/Dec/2021 08:36:37] "GET / HTTP/1.1" 200 - webserver01_1 | 127.0.0.1 - - [01/Dec/2021 08:38:49] "GET / HTTP/1.1" 200 - webserver01_1 | 127.0.0.1 - - [01/Dec/2021 08:38:50] "GET / HTTP/1.1" 200 -

3、http-egress

实验环境

三个Service:

envoy:Front Proxy,地址为172.31.4.2 webserver01:第一个外部服务,地址为172.31.4.11 webserver02:第二个外部服务,地址为172.31.4.12

访问envoy的ip,可以转发到webserver01和webserver02上

envoy.yaml

static_resources:
  listeners: - name: listener_0
    address:
      socket_address: { address: 127.0.0.1, 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: web_cluster }
          http_filters: - name: envoy.filters.http.router

  clusters: - name: web_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: web_cluster
      endpoints: - lb_endpoints: - endpoint:
            address:
              socket_address: { address: 172.31.4.11, port_value: 80 } - endpoint:
            address:
              socket_address: { address: 172.31.4.12, port_value: 80 }

docker-compose.yaml

version: '3.3' services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 environment: - ENVOY_UID=0 volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.4.2 aliases: - front-proxy
    depends_on: - webserver01 - webserver02

  client:
    image: ikubernetes/admin-toolbox:v1.0 network_mode: "service:envoy" depends_on: - envoy

  webserver01:
    image: ikubernetes/demoapp:v1.0
    hostname: webserver01
    networks:
      envoymesh:
        ipv4_address: 172.31.4.11 aliases: - webserver01

  webserver02:
    image: ikubernetes/demoapp:v1.0
    hostname: webserver02
    networks:
      envoymesh:
        ipv4_address: 172.31.4.12 aliases: - webserver02

networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.4.0/24

实验验证

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/http-egress# docker-compose up

另外克隆一个窗口,进入容器

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/http-egress# docker-compose exec client sh [root@b8f9b62f2771 /]# 
[root@b8f9b62f2771 /]# curl 127.0.0.1 iKubernetes demoapp v1.0 !! ClientIP: 172.31.4.2, ServerName: webserver01, ServerIP: 172.31.4.11! [root@b8f9b62f2771 /]# curl 127.0.0.1 iKubernetes demoapp v1.0 !! ClientIP: 172.31.4.2, ServerName: webserver02, ServerIP: 172.31.4.12! [root@b8f9b62f2771 /]# curl 127.0.0.1 iKubernetes demoapp v1.0 !! ClientIP: 172.31.4.2, ServerName: webserver01, ServerIP: 172.31.4.11! [root@b8f9b62f2771 /]# curl 127.0.0.1 iKubernetes demoapp v1.0 !! ClientIP: 172.31.4.2, ServerName: webserver02, ServerIP: 172.31.4.12! #在容器访问127.0.0.1,envoy会把请求以轮询的方式转发到webserver01和webserver02上

4、http-front-proxy

实验环境

三个Service:

envoy:Front Proxy,地址为172.31.2.2 webserver01:第一个后端服务,地址为172.31.2.11 webserver02:第二个后端服务,地址为172.31.2.12 #把域名www.ik8s.io和www.magedu.com映射到172.31.2.2 #访问域名www.ik8s.io会轮询转发到webserver01和webserver02上
#访问域名www.magedu.com会跳转到www.ik8s.io,并轮询转发到webserver01和webserver02上

envoy.yaml

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: ["*.ik8s.io", "ik8s.io"]
              routes: - match: { prefix: "/" }
                route: { cluster: local_cluster } - name: web_service_2
              domains: ["*.magedu.com",“magedu.com"]
 routes: - match: { prefix: "/" }
                redirect:
                  host_redirect: "www.ik8s.io" http_filters: - name: envoy.filters.http.router
  clusters: - name: local_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: local_cluster
      endpoints: - lb_endpoints: - endpoint:
            address:
              socket_address: { address: 172.31.2.11, port_value: 8080 } - endpoint:
            address:
              socket_address: { address: 172.31.2.12, port_value: 8080 }

docker-compose.yaml

version: '3.3' services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 environment: - ENVOY_UID=0 volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.2.2 aliases: - front-proxy
    depends_on: - webserver01 - webserver02

  webserver01:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver01
    networks:
      envoymesh:
        ipv4_address: 172.31.2.11 aliases: - webserver01

  webserver02:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver02
    networks:
      envoymesh:
        ipv4_address: 172.31.2.12 aliases: - webserver02

networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.2.0/24

实验验证

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/http-front-proxy# docker-compose up

另外克隆一个窗口

#访问域名www.ik8s.io,envoy会以轮询的方式转发到webserver01和webserver02上
root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/http-front-proxy# curl -H "host: www.ik8s.io" 172.31.2.2 iKubernetes demoapp v1.0 !! ClientIP: 172.31.2.2, ServerName: webserver01, ServerIP: 172.31.2.11! root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/http-front-proxy# curl -H "host: www.ik8s.io" 172.31.2.2 iKubernetes demoapp v1.0 !! ClientIP: 172.31.2.2, ServerName: webserver02, ServerIP: 172.31.2.12! #访问域名www.magedu.com会跳转到www.ik8s.io上
root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/http-front-proxy# curl -I -H "host: www.magedu.com" 172.31.2.2 HTTP/1.1 301 Moved Permanently
location: http://www.ik8s.io/   #跳转到了www.ik8s.io上
date: Wed, 01 Dec 2021 14:07:55 GMT
server: envoy
transfer-encoding: chunked

5、tcp-front-proxy

实验环境

 三个Service:

envoy:Front Proxy,地址为172.31.1.2 webserver01:第一个后端服务,地址为172.31.1.11 webserver02:第二个后端服务,地址为172.31.1.12 #访问envoy的ip:172.31.1.2,会以轮询的方式转发到webserver01和webserver02上

envoy.yaml

static_resources:
  listeners:
    name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 80 }
    filter_chains: - filters: - name: envoy.tcp_proxy
        typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
          stat_prefix: tcp
          cluster: local_cluster

  clusters: - name: local_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: local_cluster
      endpoints: - lb_endpoints: - endpoint:
            address:
              socket_address: { address: 172.31.1.11, port_value: 8080 } - endpoint:
            address:
              socket_address: { address: 172.31.1.12, port_value: 8080 }

docker-compose.yaml

version: '3.3' services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 environment: - ENVOY_UID=0 volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.1.2 aliases: - front-proxy
    depends_on: - webserver01 - webserver02

  webserver01:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver01
    networks:
      envoymesh:
        ipv4_address: 172.31.1.11 aliases: - webserver01

  webserver02:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver02
    networks:
      envoymesh:
        ipv4_address: 172.31.1.12 aliases: - webserver02

networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.1.0/24

实验验证

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/tcp-front-proxy# docker-compose up

另外克隆一个窗口,访问envoy的ip:17231.1.2会已轮询的方式转发到webserver01和webserver02上

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/tcp-front-proxy# curl 172.31.1.2 iKubernetes demoapp v1.0 !! ClientIP: 172.31.1.2, ServerName: webserver01, ServerIP: 172.31.1.11! root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/tcp-front-proxy# curl 172.31.1.2 iKubernetes demoapp v1.0 !! ClientIP: 172.31.1.2, ServerName: webserver02, ServerIP: 172.31.1.12!

6、admin-interface

实验环境

三个Service:

envoy:Front Proxy,地址为172.31.5.2 webserver01:第一个后端服务,地址为172.31.5.11 webserver02:第二个后端服务,地址为172.31.5.12 #访问envoy的9901端口可以个获取相应的信息

envoy.yaml

admin:
  profile_path: /tmp/envoy.prof
  access_log_path: /tmp/admin_access.log
  address:
    socket_address:
       address: 0.0.0.0   #在生产环境配置127.0.0.1;否则不安全
       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: ["*.ik8s.io", "ik8s.io"]
              routes: - match: { prefix: "/" }
                route: { cluster: local_cluster } - name: web_service_2
              domains: ["*.magedu.com",“magedu.com"]
 routes: - match: { prefix: "/" }
                redirect:
                  host_redirect: "www.ik8s.io" http_filters: - name: envoy.filters.http.router
   clusters: - name: local_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: local_cluster
      endpoints: - lb_endpoints: - endpoint:
            address:
              socket_address: { address: 172.31.5.11, port_value: 8080 } - endpoint:
            address:
              socket_address: { address: 172.31.5.12, port_value: 8080 } 

docker-compose.yaml

 services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 environment: - ENVOY_UID=0 volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.5.2 aliases: - front-proxy
    depends_on: - webserver01 - webserver02

  webserver01:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver01
    networks:
      envoymesh:
        ipv4_address: 172.31.5.11 aliases: - webserver01

  webserver02:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver02
    networks:
      envoymesh:
        ipv4_address: 172.31.5.12 aliases: - webserver02

networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.5.0/24

实验验证

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/admin-interface# docker-compose up

另外克隆一个窗口访问172.31.5.1:9901

#显示帮助信息
root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/admin-interface# curl 172.31.5.2:9901/help
admin commands are: /: Admin home page /certs: print certs on machine /clusters: upstream cluster status /config_dump: dump current Envoy configs (experimental) /contention: dump current Envoy mutex contention stats (if enabled) /cpuprofiler: enable/disable the CPU profiler /drain_listeners: drain listeners /healthcheck/fail: cause the server to fail health checks /healthcheck/ok: cause the server to pass health checks /heapprofiler: enable/disable the heap profiler /help: print out list of admin commands /hot_restart_version: print the hot restart compatibility version /init_dump: dump current Envoy init manager information (experimental) /listeners: print listener info
  /logging: query/change logging levels /memory: print current allocation/heap usage /quitquitquit: exit the server /ready: print server state, return 200 if LIVE, otherwise return 503
  /reopen_logs: reopen access logs /reset_counters: reset all counters to zero /runtime: print runtime values /runtime_modify: modify runtime values /server_info: print server version/status information /stats: print server stats /stats/prometheus: print server stats in prometheus format /stats/recentlookups: Show recent stat-name lookups /stats/recentlookups/clear: clear list of stat-name lookups and counter /stats/recentlookups/disable: disable recording of reset stat-name lookup names /stats/recentlookups/enable: enable recording of reset stat-name lookup names

# 查看完成的配置信息
root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/admin-interface# curl 172.31.5.2:9901/config_dump
......
         }
        ]
       },
       { "name": "web_service_2", "domains": [ "*.magedu.com", "“magedu.com\"" ], "routes": [
         { "match": { "prefix": "/" }, "redirect": { "host_redirect": "www.ik8s.io" }
         }
        ]
       }
      ]
     }, "last_updated": "2021-12-01T14:26:32.586Z" ......

#列出各Listener
root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/admin-interface# curl 172.31.5.2:9901/listeners
listener_0::0.0.0.0:80 #列出各cluster
root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/admin-interface# curl 172.31.5.2:9901/clusters
local_cluster::observability_name::local_cluster
local_cluster::default_priority::max_connections::1024 local_cluster::default_priority::max_pending_requests::1024 local_cluster::default_priority::max_requests::1024 local_cluster::default_priority::max_retries::3 local_cluster::high_priority::max_connections::1024 local_cluster::high_priority::max_pending_requests::1024 local_cluster::high_priority::max_requests::1024 local_cluster::high_priority::max_retries::3 local_cluster::added_via_api::false local_cluster::172.31.5.11:8080::cx_active::0 local_cluster::172.31.5.11:8080::cx_connect_fail::0 local_cluster::172.31.5.11:8080::cx_total::0 local_cluster::172.31.5.11:8080::rq_active::0 local_cluster::172.31.5.11:8080::rq_error::0 local_cluster::172.31.5.11:8080::rq_success::0 local_cluster::172.31.5.11:8080::rq_timeout::0 local_cluster::172.31.5.11:8080::rq_total::0 local_cluster::172.31.5.11:8080::hostname::
local_cluster::172.31.5.11:8080::health_flags::healthy
local_cluster::172.31.5.11:8080::weight::1 local_cluster::172.31.5.11:8080::region::
local_cluster::172.31.5.11:8080::zone::
local_cluster::172.31.5.11:8080::sub_zone::
local_cluster::172.31.5.11:8080::canary::false local_cluster::172.31.5.11:8080::priority::0 local_cluster::172.31.5.11:8080::success_rate::-1.0 local_cluster::172.31.5.11:8080::local_origin_success_rate::-1.0 local_cluster::172.31.5.12:8080::cx_active::0 local_cluster::172.31.5.12:8080::cx_connect_fail::0 local_cluster::172.31.5.12:8080::cx_total::0 local_cluster::172.31.5.12:8080::rq_active::0 local_cluster::172.31.5.12:8080::rq_error::0 local_cluster::172.31.5.12:8080::rq_success::0 local_cluster::172.31.5.12:8080::rq_timeout::0 local_cluster::172.31.5.12:8080::rq_total::0 local_cluster::172.31.5.12:8080::hostname::
local_cluster::172.31.5.12:8080::health_flags::healthy
local_cluster::172.31.5.12:8080::weight::1 local_cluster::172.31.5.12:8080::region::
local_cluster::172.31.5.12:8080::zone::
local_cluster::172.31.5.12:8080::sub_zone::
local_cluster::172.31.5.12:8080::canary::false local_cluster::172.31.5.12:8080::priority::0 local_cluster::172.31.5.12:8080::success_rate::-1.0 local_cluster::172.31.5.12:8080::local_origin_success_rate::-1.0

7、layered-runtime

实验环境

三个Service:

envoy:Front Proxy,地址为172.31.14.2 webserver01:第一个后端服务,地址为172.31.14.11 webserver02:第二个后端服务,地址为172.31.14.12

envoy.yaml

admin:
  profile_path: /tmp/envoy.prof
  access_log_path: /tmp/admin_access.log
  address:
    socket_address:
       address: 0.0.0.0 port_value: 9901 layered_runtime:
  layers: - name: static_layer_0
    static_layer:
      health_check:
        min_interval: 5
  - name: admin_layer_0
    admin_layer: {}

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: ["*.ik8s.io", "ik8s.io"]
              routes: - match: { prefix: "/" }
                route: { cluster: local_cluster } - name: web_service_2
              domains: ["*.magedu.com",“magedu.com"]
 routes: - match: { prefix: "/" }
                redirect:
                  host_redirect: "www.ik8s.io" http_filters: - name: envoy.filters.http.router
  clusters: - name: local_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: local_cluster
      endpoints: - lb_endpoints: - endpoint:
            address:
              socket_address: { address: 172.31.14.11, port_value: 8080 } - endpoint:
            address:
              socket_address: { address: 172.31.14.12, port_value: 8080 }

docker-compose.yaml

version: '3.3' services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.20.0 environment: - ENVOY_UID=0 volumes: - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        ipv4_address: 172.31.14.2 aliases: - front-proxy
    depends_on: - webserver01 - webserver02

  webserver01:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver01
    networks:
      envoymesh:
        ipv4_address: 172.31.14.11 aliases: - webserver01

  webserver02:
    image: ikubernetes/demoapp:v1.0 environment: - PORT=8080
    hostname: webserver02
    networks:
      envoymesh:
        ipv4_address: 172.31.14.12 aliases: - webserver02

networks:
  envoymesh:
    driver: bridge
    ipam:
      config: - subnet: 172.31.14.0/24

实验验证

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/layered-runtime# docker-compose up

另外克隆一个窗口

root@test:/apps/servicemesh_in_practise-develop/Envoy-Basics/layered-runtime# curl 172.31.14.2:9901/runtime
{ "entries": { "health_check.min_interval": { "final_value": "5", "layer_values": [ "5", "" ]
  }
 }, "layers": [ "static_layer_0", "admin_layer_0" ]
}
上一篇下一篇

猜你喜欢

热点阅读