高性能且具备一系列安全策略的网关对于承载具体业务至关重要,对于个人开发者而言,你的入口更是决定着你收益的稳定性,因此,选择一款合适的Api网关来承载自身不断扩展的业务就成了首要任务,在对比了Nginx、Kong、Tyk、Gloo、Apache Apisix之后,果断入坑apisix, apisix无论在性能、配置效率、还是功能层面,都领先其他产品,尽管在使用的时候遇到了很多坑,官方的文档也很糟乱,不过在部署完成后,就不需要管那些了。

部署apisix首选docker compose方式,可以在官方的github上面下载demo

一、克隆仓库

git clone https://github.com/apache/apisix-docker.git
cd example 

##其中docker-compose.yml就是部署需要的文件,由于官网的这份compose中没有dashboard容器,而部署apisix的目的就是为了方便配置,所以dashboard是必须的,我在官网基础上加入了dashboard

二、拷贝dashboard配置文件
将all-in-one中apisix-dashboard文件夹拷贝到example目录中,下面dashboard容器需要挂载使用

三、编写compose文件
最终修改后的docker-compose.yml 如下

version: "3"

services:
  apisix:
    ##这边写死为最新的版本
    image: apache/apisix:3.8.0-debian
    restart: always
    volumes:
      - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
    depends_on:
      - etcd
    ##network_mode: host
    #9180 admin port, 9080 api端口,9443 https端口
    ports:
      - "9180:9180/tcp"
      - "9080:9080/tcp"
      - "9091:9091/tcp"
      - "9443:9443/tcp"
      - "9092:9092/tcp"
    networks:
      apisix:

  etcd:
    image: bitnami/etcd:3.5.11
    restart: always
    volumes:
      - etcd_data:/bitnami/etcd
    environment:
      ETCD_ENABLE_V2: "true"
      ALLOW_NONE_AUTHENTICATION: "yes"
      ETCD_ADVERTISE_CLIENT_URLS: "http://etcd:2379"
      ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
    ports:
      - "2379:2379/tcp"
    networks:
      apisix:
  ##这是新增的,注意必须别用3.0.1有bug,插件市场是加载不出来的
  dashboard:
    image: "apache/apisix-dashboard:3.0.0-centos"
    restart: always
    depends_on:
      - etcd
    volumes:
     ##这里的配置文件使用all-in-one/apisix-dashboard/conf.yaml即可
      - ./apisix-dashboard/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml:ro
    ports:
      - "9000:9000/tcp"
    networks:
      - apisix
###测试用的服务,测完负载均衡可删除
  web1:
    image: nginx:1.19.0-alpine
    restart: always
    volumes:
      - ./upstream/web1.conf:/etc/nginx/nginx.conf
    ports:
      - "8081:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:
###测试用的服务,测完负载均衡可删除
  web2:
    image: nginx:1.19.0-alpine
    restart: always
    volumes:
      - ./upstream/web2.conf:/etc/nginx/nginx.conf
    ports:
      - "8082:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:
###监控工具,很有必要
  prometheus:
    image: prom/prometheus:v2.25.0
    restart: always
    volumes:
      - ./prometheus_conf/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    networks:
      apisix:
###上面这个监控工具的图形化展示,很有必要
  grafana:
    image: grafana/grafana:7.3.7
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - "./grafana_conf/provisioning:/etc/grafana/provisioning"
      - "./grafana_conf/dashboards:/var/lib/grafana/dashboards"
      - "./grafana_conf/config/grafana.ini:/etc/grafana/grafana.ini"
    networks:
      apisix:
####使用独立的网络名为apisix
networks:
  apisix:
    driver: bridge

volumes:
  etcd_data:
    driver: local

四、如果只是跑起来试一下,以上就OK了,接着就是启动

##在当前目录下执行,前提是安装了docker和compose
docker-compose -p docker-apisix up -d

五、如果要用到生产环境,有几个地方必须要改一下
apisix_conf/config.yaml中

 .......
 admin_key:
        ##这个名称也最好改掉
      - name: "admin"
        ##这个key改掉,随便找个md5工具,输个字符串,输出32位哈希值即可使用
        key: edd1c9f034335f136f87ad84b625c8f1
        role: admin                 # admin: manage all configuration data
        ##名称最好也改掉
      - name: "viewer"
       ##上面都改了,这边也干脆改下
        key: 4054f7cf07e344346cd3f287985e76a2
        role: viewer
.......

apisix-dashboard/conf.yaml中

authentication:
  secret:
  ##看了注释,这个secret也改掉
    secret              # secret for jwt token generation.
                        # NOTE: Highly recommended to modify this value to protect `manager api`.
                        # if it's default value, when `manager api` start, it will generate a random string to replace it.
  expire_time: 3600     # jwt token expire time, in second
  users:
  ###这四个值都改掉,随便你怎么定义,这是dashboard管理页面要输入的地址
    - username: admin   # username and password for login `manager api`
      password: admin
    - username: user
      password: user

web1、web2两个容器可以删掉,留着没必要,docker-compose.yaml文件中配置删除即可。
另外更安全的做法是把端口全部改掉,一是因为apisix使用到的端口很常见,很难避免不与其他服务端口冲突。
如果没有冲突,或者你的端口不会暴露到公网,不改也没事,但是暴露到公网的端口尽量改掉。
修改端口只要修改docker-compose.yaml中的冒号前面部分,至于配置中的端口号大部分都不需要改,因为他们同属于一个网络组,他们内部通信使用容器端口是可以访问的。

注意点:
apisix-dashboard:3.0.0请使用3.0.0版本,不要用最新的3.0.1,有插件显示空白bug,这个问题在github issue中有人提到。

具体配置请看第二篇 Docker compose部署最新版Apisix网关(二)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注