开箱即用的云原生微服务网关Kong | 留言送书

Posted 分布式实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开箱即用的云原生微服务网关Kong | 留言送书相关的知识,希望对你有一定的参考价值。

‍‍


图灵奖获得者、美国国家科学院院士、计算机科学家巴特勒・兰普森(Butler Lampson)有句著名的格言:“计算机科学中的任何问题大都可以通过增加中间层解决(Any problem in computer science can be solved with another level of indirection)”,分层使我们有更多想象空间,实现了 “不可能” 到 “可能”,从逻辑电路、硬件体系、汇编语言、高级语言,到操作系统、软件设计、软件架构、网络协议、网络设备等,都充分体现了分层的思想。分层不仅可以使彼此之间边界清晰、职责分离、共享复用,而且可以进行进一步的信息处理、流程控制、行为控制,还有助于后期的移植扩展、维护管理。最为常见的有交换机、路由器、计算机主板、缓存、队列、虚拟内存管理、CDN、CPU Cache、TCP、HTTP、HTTPS、HTTP2、WebSocket、Thrift、Protobuf、AOP、JIT、JVM、LVS、HAProxy、Envoy、Docker、CGroup、Ingress 等。

开箱即用的云原生微服务网关Kong | 留言送书


网关是上承后端服务下接前端用户的咽喉之地、关隘要道,是所有客户端请求响应出入流量的必经之路。它除了可以做最基础的反向代理之外,还可以处理通用的公共服务逻辑,如负载均衡、认证授权、动态路由、流量调度、数据缓存、限流限频、灰度发布、蓝绿发布、滚动发布、协议转换、请求转换、请求映射、服务编排、服务预热、服务降级、智能熔断、流量镜像、健康检查、跨域请求、监控报警、安全防御等。

Kong是一个全新的支持亿级流量、低延迟的云原生网关平台, 在GitHub上28.3K+ 星,是一个具有分布式、高可用、可伸缩、可扩展、高并发、高性能、可观测,可运维、全生态等特点的高度可扩展微服务网关。可供选择的开源插件多达百个,支持公有云、私有云、混合云等多种部署环境和云平台。

进入正题, 正所谓万事开头难,你也许可能经历过,当你满怀热情的将要准备正式学习一个开源软件时,仅仅只是软件的环境搭建、安装配置的过程,就可能让你千头万绪失去了信心,为什么,因为对于一个初次接触的陌生软件,你可能会需要花费更多精力和时间,去解决思考中途所遇到的各种各样的问题。

那么Kong的搭建配置过程又是如何的呢?只需5分钟即可。

下面我们将详细介绍Kong的三种最常用、最快捷的安装方式,以便你快速学习入门:


第1种:一键式安装All-In-One

开箱即用的云原生微服务网关Kong | 留言送书


在这种方式下,将一键式整套自动安装配置Kong(网关)/Konga(UI管理工具)/PostgreSQL(数据库),并立即启动、即刻使用。

工欲善其事,必先利其器,首先需要安装Docker compose (如果已有直接跳过),这是Docker 提供的一个命令行工具,用来管理和运行由多个容器组成的应用,相关命令如下:

$ yum install epel-release      -- 安装并启用epel 源
$ yum install -y python-pip    -- 安装python-pip
$ pip install --upgrade pip     -- 更新pip
$ yum -y install python-devel python-subprocess32 -- 安装python-devel/subprocess32
$ pip install docker-compose   -- 安装docker-compose

安装好后,将下面的docker-compose.yml文件放置到服务器,此文件是在前面提到的Kong、PostgreSQL、Konga 镜像容器的组合(除PostgreSQL也可选择Cassandra),然后只需要运行docker-compose up 一行命令即可完成整个Kong、PostgreSQL 和Konga 的下载、安装、配置、启动,过程中你可通过控制台看到整个安装过程。

version: '3'
services:
  kong-database:
    image: postgres:9.6                                      --镜像postgres
    container_name: kong-database
    ports:
      - 5432:5432                                              --postgres端口
    environment:
      - POSTGRES_USER=kong
      - POSTGRES_DB=kong
      - POSTGRES_PASSWORD=kong
    volumes:
      - "/opt/kong-db-data-postgres:/var/lib/postgresql/data" –数据目录映射

  kong-migrations:                                            
    image: kong:2.3                                              --镜像kong
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_USER=kong
      - KONG_PG_PASSWORD=kong
    command: kong migrations bootstrap                    --kong数据库自动初使化
    restart: on-failure
    depends_on:
      - kong-database

  kong:
    image: kong:2.3                                              --镜像kong
    container_name: kong
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_USER=kong
      - KONG_PG_PASSWORD=kong
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl
    restart: on-failure
    ports:
      - 8000:8000                                              -- kong代理端口
      - 8443:8443                                              -- kong管理端口
      - 8001:8001                                              -- kong SSL代理端口
      - 8444:8444                                              -- kong SSL管理端口
    links:
      - kong-database:kong-database
    depends_on:
      - kong-migrations

  konga:
    image: pantsel/konga:0.14.9                             --镜像konga
    ports:
      - 1337:1337                                              --konga端口
    links:
      - kong:kong
    container_name: konga
    environment:
      - NODE_ENV=production

最后,看到以下信息表示Kong安装启动成功:

using the "epoll" event method
openresty/1.15.8.3
built by gcc 9.2.0 (Alpine 9.2.0) 
OS: Linux 3.10.0-693.el7.x86_64
getrlimit(RLIMIT_NOFILE): 1048576:1048576
start worker processes

最后访问以下地址即刻体验:

  • Kong代理端口:http://ip:8000

  • Konga UI管理:http://ip:8001


第2种:直接安装

开箱即用的云原生微服务网关Kong | 留言送书


不像其他软件那样,安装过程冗长、复杂且存在各种依赖项错误,Kong的安装过程非常简洁。只需要从https://docs.konghq.com/install/centos下载CentOS 7(为例)所需要编译后的rpm安装包,然后用下面一行命令安装即可:

$ yum install kong-2.3.3.el7.amd64.rpm --nogpgcheck   --安装部署

或者通过仓库在线安装:

$ wget https://bintray.com/kong/kong-rpm/rpm -O bintray-kong-kong-rpm.repo
export major_version=`grep -oE '[0-9]+.[0-9]+' /etc/redhat-release | cut -d "." -f1`
$ sed -i -e 's/baseurl.*/&/centos/'$major_version''/ bintray-kong-kong-rpm.repo
$ sudo mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/
$ sudo yum install -y kong

安装成功后,使用kong version命令,可显示出当前所安装的版本号,表示安装成功。

Kong可以通过YML配置文件,在无数据库DB-less模式下运行。首先生成声明性配置文件,通过下面命令将自动生成kong.yml 配置在您当前的文件夹。

$ kong config init

再编辑默认路径/etc/kong/kong.conf配置文件。 打开文件将database选项设置为off,并将declarative_config选项设置为刚生成的kong.yml文件的路径:

database = off
declarative_config = /path/to/kong.yml

最后一行命令启动:

$ kong start

访问http://ip:8000,进行立即体验。


第3种:Kubernetes上安装

开箱即用的云原生微服务网关Kong | 留言送书


有以下2种方式,安装Kong for Kubernetes:

  • YAML manifests

  • Helm Chart


通过kubectl 部署Kong:

$ kubectl apply -f https://bit.ly/kong-ingress-dbless

通过Helm部署Kong:

$ helm repo add kong https://charts.konghq.com
$ helm repo update
$ helm install kong/kong

之后通过Service直接访问Kong即可。

以上介绍了3种方式来快速安装配置Kong,你可以选择任意其一进行体验。


福利

开箱即用的云原生微服务网关Kong | 留言送书


想了解更多关于Kong的知识点,推荐一本书《Kong入门与实战:基于nginx和OpenResty的云原生微服务网关》,本书内容如下:


作者为了感谢粉丝的支持特意准备了6本书作为福利送给大家,留言评论想获得此书的原因,一人一楼,5-10-15-25-35-45楼中奖。中奖者我会回复你的评论与你联系。截至时间为本周四(3月25日)12:00,为了防止刷楼等楼,评论暂不放出(周四12:00统一放出)。

最后,希望你能中奖,也希望你能有收获。如果没中奖的同学可以点击下方链接购买。