linux一些收藏运维

Kong

2022-05-15  本文已影响0人  想成为大师的学徒小纪

一、简介

Kong Gateway是一个轻量级、快速、灵活的云原生API网关。 API网关是一种反向代理,可让你管理、配置和将请求路由到你的 API。Kong Gateway在任何RESTful API前面运行,可以通过模块和插件进行扩展。它被设计为在分布式架构上运行,包括混合云和多云部署。

Kong Gateway是一款基于OpenResty(Nginx+Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Kong本身提供包括HTTP基本认证、密钥认证、CORS、TCP、UDP、文件日志、API请求限流、请求转发及Nginx监控等基本功能。整体架构图如下:

二、功能特性

三、相关组件

  • Kong Server

    基于Nginx的服务器,用来接收API请求。

  • Apache Cassandra/PostgreSQL

    用于存储相关数据的数据库。

  • Kong Manager/Konga

    图形化管理工具,可以很好地通过UI观察到现在Kong的所有的配置,并且可以对于管理Kong节点情况进行查看、监控和预警。

四、访问端口

  • 8000:侦听来自客户端的传入HTTP流量并将其转发到上游服务的端口。

  • 8443:侦听传入HTTPS流量的端口。 此端口具有与8000端口类似的行为,只是它只需要HTTPS流量。 可以使用kong.conf配置文件禁用此端口。

  • 8001:Admin API用于配置侦听的端口。

  • 8444:Admin API侦听HTTPS流量的端口。

五、插件介绍

插件官网文档

Kong开源版本一共开放28个插件,主要分8个类型:身份认证类、安全防护类、流量控制类、云平台插件类、分析监控类、转换请求类型类、日志记录类、其他插件类,这儿介绍些常用插件。

六、负载均衡原理

Kong提供了对多个后端服务进行负载平衡的多种方法:一种直接的基于DNS的方法,另一种更动态的Ring-balancer(环形均衡器),它允许服务注册而不需要DNS服务器。

1、基于DNS的负载均衡

当使用基于DNS的负载均衡时,后端服务的注册是在Kong之外完成的,而Kong只接收来自DNS服务器的更新。

如果主机名解析为多个IP地址,每个被定义为包含主机名(而不是IP地址)的服务将自动使用基于DNS的负载平衡,前提是该主机名没有解析到upstream名称或DNS主机文件中的名称。

DNS记录的ttl设置(生存时间)决定了信息被刷新的频率。当使用ttl为0时,每个请求将使用其自己的DNS查询来解决。显然,这将有一个性能缺陷,但更新/更改的延迟将非常低。

graph LR
    A(先前解析的最后一个成功类型) --> B(SRV记录)
    B(SRV记录) --> C(A记录)
    C(A记录) --> D(CNAME记录)

此顺序可通过dns_order配置属性进行配置。

2、Ring-balancer(环形均衡器)

当使用环形均衡器时,后端服务的添加和删除将由Kong处理,不需要更新DNS。Kong将充当服务注册中心,节点可以通过一个HTTP请求被添加/删除,并将立即开始/停止接收流量。

配置环形均衡器是通过upstream和target完成的。

七、健康检查机制原理

Kong支持两种健康检查,可以单独使用,也可以结合使用:

1、是否健康的定义

2、健康检查类型

八、安装部署

环境规划

PostgreSQL、Konga、Nginx 10.81.0.101
Kong Server 10.81.0.102
Kong Server 10.81.0.103
Kong Server 10.81.0.104

1、PostgreSQL安装

konga软件对高版本postgresql不兼容

2、Kong安装

3、安装插件

4、设置负载均衡

upstream kongservice {
  server 10.81.0.101:8000 weight=4 max_fails=2 fail_timeout=30s;
  server 10.81.0.102:8000 weight=4 max_fails=2 fail_timeout=30s;
  server 10.81.0.103:8000 weight=4 max_fails=2 fail_timeout=30s;
  keepalive 256;
}
server {
  listen          80;
  server_name    ~^(.*)$;
  charset utf-8;
  return 301 https://$host$request_uri;
}

server {
  listen          443 ssl;
  server_name    ~^(.*)$;
  charset utf-8;
  ssl_certificate /data/svc/nginx-1.16.1/certs/eminxing-com.crt;
  ssl_certificate_key /data/svc/nginx-1.16.1/certs/eminxing-com.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
  ssl_prefer_server_ciphers on;
  access_log   /data/logs/nginx/elk-nginx-log/kong.access.log nginx-json-log;
  error_log   /data/logs/nginx/elk-nginx-log/kong.error.log;
  client_max_body_size    300m;
  client_body_buffer_size 128k;
  location / {
    proxy_pass http://kongservice/;
    proxy_next_upstream http_502 http_504 error  timeout invalid_header;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header $http_x_forwarded_for $remote_addr;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_connect_timeout  1800;
    proxy_send_timeout     1800;
    proxy_read_timeout     1800;
    proxy_buffer_size      4k;
    proxy_buffers          4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
  } 
  location ^~ /WEB-INF{
    deny all;
  }
}
upstream kongadmin_service {
  server 10.81.0.101:8001 weight=4 max_fails=2 fail_timeout=30s;
  server 10.81.0.102:8001 weight=4 max_fails=2 fail_timeout=30s;
  server 10.81.0.103:8001 weight=4 max_fails=2 fail_timeout=30s;
}
server {
  listen          80;
  server_name    kong-admin.eminxing.com;
  charset utf-8;
  access_log   /data/logs/nginx/elk-nginx-log/kongadmin.access.log nginx-json-log;
  error_log   /data/logs/nginx/elk-nginx-log/kongadmin.error.log;
  client_max_body_size    10m;
  client_body_buffer_size 128k;  
  location / {
    proxy_pass http://kongadmin_service/;
    proxy_next_upstream http_502 http_504 error  timeout invalid_header;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header $http_x_forwarded_for $remote_addr;
    proxy_connect_timeout  1800;
    proxy_send_timeout     1800;
    proxy_read_timeout     1800;
    proxy_buffer_size      4k;
    proxy_buffers          4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
  }
}

server {
  listen          443 ssl;
  server_name    kong-admin.eminxing.com;
  charset utf-8;
  ssl_certificate /data/svc/nginx-1.16.1/certs/eminxing-com.crt;
  ssl_certificate_key /data/svc/nginx-1.16.1/certs/eminxing-com.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
  ssl_prefer_server_ciphers on;
  access_log   /data/logs/nginx/elk-nginx-log/kongadmin.access.log nginx-json-log;
  error_log   /data/logs/nginx/elk-nginx-log/kongadmin.error.log;
  client_max_body_size    10m;
  client_body_buffer_size 128k;
  location / {
    proxy_pass http://kongadmin_service/;
    proxy_next_upstream http_502 http_504 error  timeout invalid_header;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header $http_x_forwarded_for $remote_addr;
    proxy_connect_timeout  1800;
    proxy_send_timeout     1800;
    proxy_read_timeout     1800;
    proxy_buffer_size      4k;
    proxy_buffers          4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
  }
}

九、Konga管理界面

1、安装

2、使用

上一篇下一篇

猜你喜欢

热点阅读