首页 > 其他分享 >Kong网关混合部署实践

Kong网关混合部署实践

时间:2023-01-13 12:05:48浏览次数:60  
标签:网关 Nginx 部署 端口 kong nginx Kong data 节点

Kong网关混合部署实践

部署资源为一个2核4G的虚拟机,部署在了一台虚拟机上,有条件的的可以把数据节点部署到别的机器上。

具体思路是一台虚机部署Kong的控制节点,管理端端口只能本机访问,Konga和控制节点部署到一块。

Nginx作为数据节点的统一入口。

数据节点可以部署到其他机器上,Nginx可以单独部署,也可以部署到其他机器上。

基于PostgresSQL数据库,本文不涉及数据库安装部分。

由于Nginx守护进程需要root,lua插件安装也要使用root用户,所以部署全程使用root用户

1. 部署Kong

  1. 下载kong安装包
mkdir -p /data/kong
cd /data/kong
curl -Lo kong-enterprise-edition-2.8.1.1.rpm $(rpm --eval "https://download.konghq.com/gateway-2.x-centos-%{centos_ver}/Packages/k/kong-enterprise-edition-2.8.1.1.el%{centos_ver}.noarch.rpm")
  1. 安装Kong
sudo yum install kong-enterprise-edition-2.8.1.1.rpm

部署控制节点

  1. 生成密钥
# 创建证书存放的文件夹
mkdir kong_cert
cd kong_cert
# 证书默认有限期为三年 可以通过 --days参数进行调整
kong hybrid gen_cert
  1. 将证书文件夹复制到CP节点的同一目录下。
  2. 进入Kong配置文件夹 并复制出配置文件
cd /etc/kong
# 复制默认的配置文件
cp kong.conf.default kong.conf

Kong在启动时会默认查找 ​​/etc/kong/kong.conf​​ ​​/etc/kong.conf​​配置文件。

  1. Kong配置文件修改
vim /etc/kong/kong.conf

增加以下配置:

# kong工作的文件夹
prefix = /data/kong/kong
# 插件
plugins = bundled
# 控制节点
role = control_plane
# 证书
cluster_cert = /data/kong/kong_cert/cluster.crt
# 证书key
cluster_cert_key = /data/kong/kong_cert/cluster.key
# 管理后台监听的端口 通过此端口进行数据的添加
admin_listen = 127.0.0.1:8001
# 集群监听端口
cluster_listen = 0.0.0.0:8005
# 数据库 相关信息根据自己情况进行修改
database = postgres
# 主机
pg_host = 172.16.166.129
# 端口
pg_port = 5432
# 用户名
pg_user = kong
# 密码
pg_password = kong
# 数据库
pg_database = kong
  1. 启动Kong
kong start

部署数据节点

  1. 将控制层面的证书复制到数据节点的文件夹中 ​​/data/kong/kong_cert​
  2. 进入 ​​/etc/kong​​ ,创建配置文件 ​​vim /etc/kong/kong-data.conf​
  3. 修改配置文件
# kong工作的文件夹 因为我部署到一块了 所以修改了一下名字
prefix = /data/kong/kong-data
# 插件 以及自定义插件
plugins = bundled
# 数据平面
role = data_plane
# 关闭数据库 数据都从控制层面获取
database = off
#数据请求监听端口
proxy_listen = 0.0.0.0:8000
# 控制平面端口
cluster_control_plane = 172.16.166.134:8005
# 证书
cluster_cert = /data/kong/kong_cert/cluster.crt
# 证书key
cluster_cert_key = /data/kong/kong_cert/cluster.key
# 缓存大小设置 具体参考 此链接 https://docs.konghq.com/gateway/latest/plan-and-deploy/sizing-guidelines/#in-memory-caching
# 4core and 8G ram 建议 4-6G缓存
mem_cache_size = 4028M
  1. 启动kong
kong start -c /etc/kong/kong-data.conf

验证是否部署成功

执行以下命令,验证是否部署成功,​​<admin-hostname>​​ 替换为你的主机地址。

curl -i -X GET http://<admin-hostname>:8001/clustering/data-planes

查看执行结果

[root@localhost ~]# curl -i -X GET http://localhost:8001/clustering/data-planes
HTTP/1.1 200 OK
Date: Wed, 06 Jul 2022 10:14:50 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
X-Kong-Admin-Request-ID: 1E07gFF8H29g4kGeJ2RkrLSYN9XHKsRe
Content-Length: 1006
X-Kong-Admin-Latency: 804
Server: kong/2.8.1.1-enterprise-edition

{"next":null,"data":[{"id":"2eca2deb-8813-443a-adbb-a9cddc68cd8a","ttl":1209574,"config_hash":"9a5678342c9ed85a8fc474c746082bf0","sync_status":"normal","ip":"127.0.0.1","last_seen":1657158142,"hostname":"localhost.localdomain","version":"2.8.1.1-enterprise-edition"}]}

请注意: /clustering/data-planes 此站点返回的数据是在数据库clustering_data_planes表中存储的因为id是随机的,所以每次重启数据节点都会新增一条数据,Kong使用cluster_data_plane_purge_delay配置来防止表无限扩大,默认是14天没有收到DP的消息,就会将其数据删除。

部署数据节点的统一入口 Nginx

  1. 安装Nginx

安装Nginx依赖的组件

sudo yum install yum-utils

设置Nginx存储库,创建​​etc/yum.repos.d/nginx.repo​​文件,把以下内容复制进去。

# 稳定版本
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 最新版本
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

默认使用稳定版本,如果想使用最新版本,执行下面的命令

sudo yum-config-manager --enable nginx-mainline

安装Nginx

sudo yum install nginx
  1. 修改Nginx配置文件

Nginx配置文件增加upstream ,修改​​/etc/nginx/nginx.conf​​ 在 http 模块增加代码。

upstream kong {
server 172.16.166.134:8000; # kong数据节点地址 一般是多个
}

修改 ​​/etc/nginx/conf.d/default.conf​

location / {
# 代理upstream
proxy_pass http://kong;
}

启动Nginx

nginx

2. 部署 Konga

首先要安装docker。

启动Konga容器

docker run -d -p 1337:1337 \ 
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgresql://kong:[email protected]:5432/konga" \
-e "NODE_ENV=production" \
--name konga \
pantsel/konga

3. 通过Konga创建路由并通过Nginx统一入口访问。

测试通过​​https://httpbin.org/进行测试。​

创建路由

以​​http://httpbin.org/get为例​

首先要新建一个服务

创建成功后,点击 列表中创建的服务名称->Routes->Add Route 创建路由

测试

[root@localhost ~]# curl http://172.16.166.134/get
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.29.0",
"X-Amzn-Trace-Id": "Root=1-62c642ba-3d4a9277190d25e44f446351",
"X-Forwarded-Host": "kong",
"X-Forwarded-Path": "/get"
},
"origin": "172.16.166.134, 123.232.37.227",
"url": "http://kong/get"
}

可以看到通过Nginx访问可以正常返回数据,这说明控制节点添加的数据已经同步到数据节点了。

最后说一下要开放的防火墙端口:

控制节点:

  1. 8001 管理端的端口,如果使用Konga管理可以不开放,直接开放Konga端口也可以
  2. 8005 数据节点和控制节点交互的端口

数据节点:

  1. 8000 监听数据请求的端口

Nginx:

  1. 80 Nginx端口

标签:网关,Nginx,部署,端口,kong,nginx,Kong,data,节点
From: https://blog.51cto.com/u_14199987/6005867

相关文章

  • 在 Kubernetes 中部署并使用 KubeEdge
    作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及Kubernetes、KubeSphere、KubeKey等。边缘计算在广泛制造业、工业、零售和金融等行业,随......
  • Docker 部署 Jenkins
    Docker部署Jenkins 1.拉取镜像                       参考:https://www.cnblogs.com/fuzongle/p/12834080.html......
  • maven引入本地jar不能打入部署包的问题解决
    引入的三方依赖 jar 包, scope 为 system 的包 maven 默认是不打包进去的,需要加这个配置在pom.xml文件中找到spring-boot-maven-plugin插件,添加如下配置<configu......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • RHEL9练习部署pig4cloud
    手动安装便于学习理解本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正一、环境说明pig4cloud3.6的环境要求工具版本下载备注pig4cloud3.6https......
  • 使用原子主机、Ansible 和 Cockpit 部署容器
    来自原子项目的原子主机是一个轻量级容器操作系统,可以以Docker格式运行 ​​Linux 容器。它专门为提高效率而定制,使其成为用于云环境的Docker运行时系统的理想选择。......
  • kubernetes集群部署
    kubeadm方式部署部署准备改主机名称#master节点[root@k8s-master~]#echo"k8s-master">/etc/hostname#node01节点[root@k8s-node01~]#echo"k8s-node01">......
  • Nexus私有maven库部署和使用
    原文地址:Nexus私有maven库部署和使用-Stars-One的杂货小窝前段圣诞节前后,Jitpack网站突然崩溃了,无法下载依赖,然后过了一个星期才解决了,好在没啥紧急的Android开发任务,......