ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • envoy 환경설정하기
    Envoy & Istio 2020. 3. 27. 09:00

    envoy 컨테이너로 실행하기

     

    docker image를 이용해서 다음처럼 간단하게 실행해 볼 수 있습니다.

    docker run --rm -d -p 10000:10000 -p 9901:9901 envoyproxy/envoy-dev

     

    브라우저에서 http://localhost:10000 으로 접근하면 기본 설정인 google 페이지가 뜨는걸 볼 수 있습니다.

     

    현재 envoy의 설정내용은 다음처럼 컨테이너 id를 확인해서 cat 명령으로 설정파일 내용을 확인할 수 있습니다.

    $ docker ps
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                              NAMES
    d31c8d8d7168        envoyproxy/envoy-dev   "/docker-entrypoint.…"   41 minutes ago      Up 41 minutes       0.0.0.0:9901->9901/tcp, 0.0.0.0:10000->10000/tcp   great_mccarthy
    $ docker exec d31c8d8d7168 cat /etc/envoy/envoy.yaml
    admin:
      access_log_path: /tmp/admin_access.log
      address:
        socket_address:
          protocol: TCP
          address: 127.0.0.1
          port_value: 9901
    static_resources:
      listeners:
      - name: listener_0
        address:
          socket_address:
            protocol: TCP
            address: 0.0.0.0
            port_value: 10000
        filter_chains:
        - filters:
          - name: envoy.filters.network.http_connection_manager
            typed_config:
              "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
              stat_prefix: ingress_http
              route_config:
                name: local_route
                virtual_hosts:
                - name: local_service
                  domains: ["*"]
                  routes:
                  - match:
                      prefix: "/"
                    route:
                      host_rewrite: www.google.com
                      cluster: service_google
              http_filters:
              - name: envoy.filters.http.router
      clusters:
      - name: service_google
        connect_timeout: 0.25s
        type: LOGICAL_DNS
        # Comment out the following line to test on v6 networks
        dns_lookup_family: V4_ONLY
        lb_policy: ROUND_ROBIN
        load_assignment:
          cluster_name: service_google
          endpoints:
          - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    address: www.google.com
                    port_value: 443
        transport_socket:
          name: envoy.transport_sockets.tls
          typed_config:
            "@type": type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext
            sni: www.google.com

    envoy 설정파일로 설정 변경하기

    앞서 확인한 envoy.yaml 내용을 변경해서 적용해 보기 위해서 우선 envoy.yaml파일을 만듭니다.

    그런 후 위 내용을 복사해서 붙여넣은 다음 아래 내용중 adress 부분을 127.0.0.1에서 0.0.0.0으로 변경합니다.

    admin:
      access_log_path: /tmp/admin_access.log
      address:
        socket_address:
          protocol: TCP
          address: 0.0.0.0
          port_value: 9901

     

    그리고 이 내용을 적용한 컨테이너 이미지를 만들기 위한 다음 내용을 가진 dockerfile을 만듭니다.

    FROM envoyproxy/envoy-dev
    COPY envoy.yaml /etc/envoy/envoy.yaml

    이 내용을 가지고 새로운 컨테이너 이미지를 만든 후 실행합니다. 기존에 실행중이던 컨테이너가 있으면 호스트의 포트를 사용하고 있을거라서 새로운 컨테이너가 실행되지 않습니다. 그런 경우 기존 컨테이너를 정지시킨후 새로운 컨테이너를 실행시켜야 합니다.

    $ docker build -t envoy:test .                             
    Sending build context to Docker daemon  4.608kB
    Step 1/2 : FROM envoyproxy/envoy-dev
    ---> cf1a51560cb5
    Step 2/2 : COPY envoy.yaml /etc/envoy/envoy.yaml
    ---> Using cache
    ---> 83987602a860
    Successfully built 83987602a860
    Successfully tagged envoy:test
    $ docker run --rm -d -p 10000:10000 -p 9901:9901 envoy:test
    9677376df9b5b5245b8978640992caf0193f956c3b64b0dcca155f39603f1d8c

    설정을 변경해서 컨테이너를 실행한 후 http:localhost:9901로 접근하면 다음처럼 관리자 페이지를 확인할 수 있습니다.

    envoy 관련 여러가지 정보들을 확인할 수 있습니다.

    envoy xDS로 설정 변경하기

    별도의 management server 를 실행하고 envoy가 해당 서버를 바라보도록 설정해야 합니다.

    다음처럼 dynamic_resource의 xds_config에서 management server군을 바라보도록 설정해야 합니다.

    admin:
      access_log_path: /tmp/admin_access.log
      address:
        socket_address: { address: 0.0.0.0, port_value: 9901 }
    
    
    dynamic_resources:
      lds_config:
        api_config_source:
          api_type: GRPC
          grpc_services:
            envoy_grpc:
              cluster_name: xds_cluster
      cds_config:
        api_config_source:
          api_type: GRPC
          grpc_services:
            envoy_grpc:
              cluster_name: xds_cluster
    
    
    static_resources:
      clusters:
      - name: xds_cluster
        connect_timeout: 0.25s
        type: STATIC
        lb_policy: ROUND_ROBIN
        http2_protocol_options: {}
        upstream_connection_options:
          # configure a TCP keep-alive to detect and reconnect to the admin
          # server in the event of a TCP socket half open connection
          tcp_keepalive: {}
        load_assignment:
          cluster_name: xds_cluster
          endpoints:
          - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    address: 127.0.0.1
                    port_value: 5678

    참고

    https://www.envoyproxy.io/docs/envoy/latest/start/start#simple-configuration

    https://www.envoyproxy.io/docs/envoy/v1.11.1/start/start

    https://www.envoyproxy.io/docs/envoy/latest/configuration/overview/examples

    https://medium.com/@salmaan.rashid/envoy-control-plane-hello-world-2f49b2865f29

     

    댓글

Designed by Tistory.