ubuntu18.04安装构建envoy环境

  • 安装docker环境

1. 先确定环境中是否存在docker旧版本,如果存在就先卸载。笔者使用的是最新安装的虚拟机系统,不需要执行此步骤

sudo apt-get remove docker docker-engine docker-ce docker.io

2. 更新apt包。关于镜像仓库,ubuntu默认的是美国的地址,比较慢且容易出现网络下载问题,建议改成国内的镜像仓库,笔者使用的是阿里云的镜像仓库。

sudo apt-get update

3. 先将用户切换到root权限,防止出现访问权限问题。安装以下包确保apt可以通过HTTPS使用存储库(repository)

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

4. 添加Docker官方的GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

5. 使用以下命令来设置stable存储库

sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \stable"

6. 再更新以下apt包后,安装最新版本的docker ce

sudo apt-get update

sudo apt-get install -y docker-ce

7. 验证docker服务是否启动,如未启动,则使用start命令启动

systemctl status docker

sudo systemctl start docker

8. 运行hello world容器,有如下显示则安装成功

sudo docker run hello-world

ubuntu18.04安装构建envoy环境_第1张图片

  • 安装envoy(镜像)及启动

1. 在https://hub.docker.com/r/envoyproxy/envoy-alpine/镜像网站中的tag页面中查询最新版镜像

ubuntu18.04安装构建envoy环境_第2张图片

使用如下命令拉取镜像(镜像名称tag默认为latest,测试发现拉取不到镜像,后修改为具体的版本):

docker pull envoyproxy/envoy-alpine:v1.14.1

2. 查找镜像二进制安装目录,进入目录后将自定义的envoy.yaml配置文件挂载到指定目录下(注:<>中的为指定目录,如笔者用的是/etc/envoy。-l debug为设置日记级别,方便调试),命令如下:

./envoy -c .{json,yaml,pb,pb_text} --v2-config-only -l debug

3. 做一个最简化的静态配置测试envoy。编辑envoy.yaml做如下配置

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 127.0.0.1, port_value: 9901 }

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 10000 }
    filter_chains:
    - filters:
      - name: envoy.http_connection_manager
        config:
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: some_service }
          http_filters:
          - name: envoy.router
  clusters:
  - name: some_service
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    hosts: [{ socket_address: { address: 127.0.0.1, port_value: 80 }}]

在此基础上启动两个容器,envoyproxy容器和nginx容器,nginx容器共享envoyproxy容器的网络,以此来模拟sidecar。 

docker run -d -p 10000:10000 -v `pwd`/envoy.yaml:/etc/envoy/envoy.yaml --name envoyproxy envoyproxy/envoy-alpine:v1.14.1

docker run -d --network=container:envoyproxy --name nginx nginx

根据配置文件的规则,envoy监听10000端口,同时该端口也暴露在主机上。当有请求到达监听上后,envoy会对所有请求路由到some_service这个cluster上,而该cluster的上游指向本地的80端口,也就是nginx服务上。访问nginx如下:

ubuntu18.04安装构建envoy环境_第3张图片

你可能感兴趣的:(服务网格)