Envoy 基于文件系统的订阅

 

  • Envoy动态配置及配置源

    • cat docker-compose.yaml 
      version: '3.3'
      
      services:
        envoy:
          image: envoyproxy/envoy-alpine:v1.21-latest
          environment:
            - ENVOY_UID=0
            - ENVOY_GID=0
          volumes:
          - ./front-envoy.yaml:/etc/envoy/envoy.yaml
          - ./eds.conf.d/:/etc/envoy/eds.conf.d/
          networks:
            envoymesh:
              ipv4_address: 172.31.11.2
              aliases:
              - front-proxy
          depends_on:
          - webserver01-sidecar
          - webserver02-sidecar
      
        webserver01-sidecar:
          image: envoyproxy/envoy-alpine:v1.21-latest
          environment:
            - ENVOY_UID=0
            - ENVOY_GID=0
          volumes:
          - ./envoy-sidecar-proxy.yaml:/etc/envoy/envoy.yaml
          hostname: webserver01
          networks:
            envoymesh:
              ipv4_address: 172.31.11.11
              aliases:
              - webserver01-sidecar
      
        webserver01:
          image: ikubernetes/demoapp:v1.0
          environment:
            - PORT=8080
            - HOST=127.0.0.1
          network_mode: "service:webserver01-sidecar"
          depends_on:
          - webserver01-sidecar
      
        webserver02-sidecar:
          image: envoyproxy/envoy-alpine:v1.21-latest
          environment:
            - ENVOY_UID=0
            - ENVOY_GID=0
          volumes:
          - ./envoy-sidecar-proxy.yaml:/etc/envoy/envoy.yaml
          hostname: webserver02
          networks:
            envoymesh:
              ipv4_address: 172.31.11.12
              aliases:
              - webserver02-sidecar
      
        webserver02:
          image: ikubernetes/demoapp:v1.0
          environment:
            - PORT=8080
            - HOST=127.0.0.1
          network_mode: "service:webserver02-sidecar"
          depends_on:
          - webserver02-sidecar
      
      networks:
        envoymesh:
          driver: bridge
          ipam:
            config:
              - subnet: 172.31.11.0/24
      cat envoy-sidecar-proxy.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
      
      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: local_service 
                    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 }
      cat front-envoy.yaml 
      node:
        id: envoy_front_proxy
        cluster: MageEdu_Cluster
      
      admin:
        profile_path: /tmp/envoy.prof
        access_log_path: /tmp/admin_access.log
        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_01
                    domains: ["*"]
                    routes:
                    - match: { prefix: "/" }
                      route: { cluster: webcluster }
                http_filters:
                - name: envoy.filters.http.router
      
        clusters:
        - name: webcluster
          connect_timeout: 0.25s
          type: EDS
          lb_policy: ROUND_ROBIN
          eds_cluster_config:
            service_name: webcluster
            eds_config:
              path: '/etc/envoy/eds.conf.d/eds.yaml'
      
      cat eds.conf.d/eds.yaml
      resources:
      - "@type": type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment
        cluster_name: webcluster
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: 172.31.11.11
                  port_value: 80
      cat eds.conf.d/eds.yaml.v1
      resources:
      - "@type": type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment
        cluster_name: webcluster
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: 172.31.11.11
                  port_value: 80
      cat eds.conf.d/eds.yaml.v2
      version_info: '2'
      resources:
      - "@type": type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment
        cluster_name: webcluster
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: 172.31.11.11
                  port_value: 80
          - endpoint:
              address:
                socket_address:
                  address: 172.31.11.12
                  port_value: 80
    • 启动
    • docker-compose up

       

    • 启动之后直接访问看只有172.31.11.11
    •  
    • 进入到容器替换配置文件,替换之后curl访问可以发现已经有172.31.11.12了
    • docker-compose exec envoy /bin/sh
      cd /etc/envoy/eds.conf.d/
      mv eds.yaml.v2 eds.yaml

    • 将配置文件改回来,进行curl访问
    • cp eds.yaml.v1 eds.yaml
      mv eds.yaml temp && mv temp eds.yaml

       

posted @ 2022-07-27 10:46  Maniana  阅读(40)  评论(0编辑  收藏  举报