15735631453177_upload.png

示例1:简单使用示例

envoy.yaml

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

Dockerfile:

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

示例2:envoy.echo

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.config.filter.network.tcp_proxy.v2.TcpProxy
          stat_prefix: tcp
          cluster: test_cluster

  clusters:
  - name: test_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: test_cluster
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address: { address: 127.0.0.1, port_value: 8081 }

docker-compose.yaml

version: '3'

services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.11.1
    volumes:
    - ./envoy.yaml:/etc/envoy/envoy.yaml
    network_mode: "service:mainserver"
    depends_on:
    - mainserver

  mainserver:
    image: ikubernetes/mini-http-server:v0.3
    networks:
      envoymesh:
        aliases:
        - webserver
        - httpserver

networks:
  envoymesh: {}

示例3:

http egress代理配置示例:

docker-compose.yaml

version: '3.3'
services:
  envoy:
    build:
      context: .
      dockerfile: Dockerfile-envoy
    volumes:
    - ./envoy.yaml:/etc/envoy/envoy.yaml
    networks:
      envoymesh:
        aliases:
        - envoy
    depends_on:
    - webserver1
    - webserver2
    expose:
    - "80"

  webserver1:
    image: ikubernetes/mini-http-server:v0.3
    networks:
      envoymesh:
        aliases:
        - webserver1
        - myservice
    expose:
    - "8081"

  webserver2:
    image: ikubernetes/mini-http-server:v0.3
    networks:
      envoymesh:
        aliases:
        - webserver2
        - myservice
    expose:
    - "8081"

networks:
  envoymesh: {}

envoy.yaml:

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 127.0.0.1, port_value: 80 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          stat_prefix: egress_http
          codec_type: AUTO
          route_config:
            name: test_route
            virtual_hosts:
            - name: web_service_1
              domains: ["*.ik8s.io","ik8s.io"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: web_cluster_1 }
            - name: web_service_2
              domains: ["*.k8scast.cn","k8scast.cn"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: web_cluster_2 }
          http_filters:
          - name: envoy.router

  clusters:
  - name: web_cluster_1
    connect_timeout: 0.25s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: web_cluster_1
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address: { address: myservice, port_value: 8081 }
  
  - name: web_cluster_2
    connect_timeout: 0.25s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: web_cluster_2
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address: { address: webserver1, port_value: 8081 }

Dockerfile-envoy:

FROM envoyproxy/envoy-alpine:v1.11.1
RUN apk update && apk --no-cache add curl

启动docker-compose:

docker-compose up
docker exec -it http_egress_envoy_1 sh
curl -H "host: www.ik8s.io" 127.0.0.1:80/hostname
curl -H "host: www.k8scast.cn" 127.0.0.1:80/hostname

http ingress服务暴露示例:

envoy.yaml

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 80 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: test_route
            virtual_hosts:
            - name: web_service_1
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: web_cluster }
          http_filters:
          - name: envoy.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: 127.0.0.1, port_value: 8081 }

docker-compose.yaml

version: '3'
services:
  envoy:
    image: envoyproxy/envoy-alpine:v1.11.1
    volumes:
    - ./envoy.yaml:/etc/envoy/envoy.yaml
    network_mode: "service:mainserver"
    depends_on:
    - mainserver

  mainserver:
    image: ikubernetes/mini-http-server:v0.3
    networks:
      envoymesh:
        aliases:
        - webserver
        - httpserver

networks:
  envoymesh: {}