专栏首页Kubernetes手记微服务网关Kong系列文章之二:Kong安装
原创

微服务网关Kong系列文章之二:Kong安装

本地部署

1、配置YUM仓库

sudo yum install -y wget
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

2、安装Postgresql

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql11 postgresql11-server

/usr/pgsql-11/bin/postgresql-11-setup initdb
systemctl enable postgresql-11
systemctl start postgresql-11
# 登录psql
sudo su postgres
psql

# 设置密码
postgres=# \password
Enter new password: 
Enter it again: 
postgres=# 

# 创建数据库
CREATE USER kong with password 'kong';
CREATE DATABASE kong OWNER kong; 
grant all privileges on database kong to kong;

# 修改安全配置
vim /var/lib/pgsql/11/data/pg_hba.conf
# 修改最下面几行
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

#重启Postgresql
systemctl restart postgresql-11

3、配置kong

# 这里需要提前配置kong配置文件,默认/etc/kong/kong.conf.default
cp /etc/kong/kong.conf.default /etc/kong/kong.conf

# 修改里面的数据库配置,写入用户、密码、数据库、端口等信息
vim /etc/kong/kong.conf

[root@master /]# egrep -v "^#|^$|^[[:space:]]+#" /etc/kong/kong.conf
database = postgres             # Determines which of PostgreSQL or Cassandra
pg_host = 127.0.0.1             # Host of the Postgres server.
pg_port = 5432                  # Port of the Postgres server.
pg_timeout = 5000               # Defines the timeout (in ms), for connecting,
pg_user = kong                  # Postgres user.
pg_password = kong                # Postgres user's password.
pg_database = kong              # The database name to connect to.

4、执行Migration

[root@master ~]# kong migrations bootstrap -c /etc/kong/kong.conf
Bootstrapping database...
migrating core on database 'kong'...
core migrated up to: 000_base (executed)
core migrated up to: 001_14_to_15 (executed)
core migrated up to: 002_15_to_1 (executed)
core migrated up to: 003_100_to_110 (executed)
core migrated up to: 004_110_to_120 (executed)
core migrated up to: 005_120_to_130 (executed)
core migrated up to: 006_130_to_140 (executed)
core migrated up to: 007_140_to_200 (executed)
migrating hmac-auth on database 'kong'...
hmac-auth migrated up to: 000_base_hmac_auth (executed)
hmac-auth migrated up to: 001_14_to_15 (executed)
hmac-auth migrated up to: 002_130_to_140 (executed)
migrating oauth2 on database 'kong'...
oauth2 migrated up to: 000_base_oauth2 (executed)
oauth2 migrated up to: 001_14_to_15 (executed)
oauth2 migrated up to: 002_15_to_10 (executed)
oauth2 migrated up to: 003_130_to_140 (executed)
migrating jwt on database 'kong'...
jwt migrated up to: 000_base_jwt (executed)
jwt migrated up to: 001_14_to_15 (executed)
jwt migrated up to: 002_130_to_140 (executed)
migrating basic-auth on database 'kong'...
basic-auth migrated up to: 000_base_basic_auth (executed)
basic-auth migrated up to: 001_14_to_15 (executed)
basic-auth migrated up to: 002_130_to_140 (executed)
migrating key-auth on database 'kong'...
key-auth migrated up to: 000_base_key_auth (executed)
key-auth migrated up to: 001_14_to_15 (executed)
key-auth migrated up to: 002_130_to_140 (executed)
migrating acl on database 'kong'...
acl migrated up to: 000_base_acl (executed)
acl migrated up to: 001_14_to_15 (executed)
acl migrated up to: 002_130_to_140 (executed)
migrating session on database 'kong'...
session migrated up to: 000_base_session (executed)
migrating response-ratelimiting on database 'kong'...
response-ratelimiting migrated up to: 000_base_response_rate_limiting (executed)
response-ratelimiting migrated up to: 001_14_to_15 (executed)
response-ratelimiting migrated up to: 002_15_to_10 (executed)
migrating rate-limiting on database 'kong'...
rate-limiting migrated up to: 000_base_rate_limiting (executed)
rate-limiting migrated up to: 001_14_to_15 (executed)
rate-limiting migrated up to: 002_15_to_10 (executed)
rate-limiting migrated up to: 003_10_to_112 (executed)
35 migrations processed
35 executed
Database is up-to-date

5、启动

修改配置文件kong.conf

vim /etc/kong/kong.conf

database=off
[root@master ~]# kong start -c /etc/kong/kong.conf
Kong started
[root@master ~]# kong health
nginx.......running

Kong is healthy at /usr/local/kong
微服务API网关

6、测试使用

  • 创建一个Service

如我们在术语部分的介绍,服务是上游服务的抽象,可以是一个应用,或者具体某个接口。Kong 提供了管理接口,我们可以通过请求 8001 管理接口直接创建,也可以通过安装的管理界面,实现的效果是一样的。

curl -i -X POST \
--url http://139.196.189.67:8001/services/ \
--data 'name=baidu-service' \
--data 'url=https://www.baidu.com/'
  • 创建一个routes

创建好服务之后,我们需要创建具体的 API 路由。路由是请求的转发规则,根据 Hostname 和 PATH,将请求转发。

curl -ik -X POST \
--url http://139.196.189.67:8001/services/baidu-service/routes \
--data 'hosts[]=baidu.com' \
--data 'paths[]=/api/baidu'
  • 访问测试
curl -k http://139.196.189.67:8000/api/baidu --header 'Host: baidu.com'
微服务API网关

容器部署

1、部署postgresql

1.1 创建网络

docker network create kong-net

1.2 创建数据卷

docker volume create pgsql docker volume create kong konga

1.3 部署postgres:

➜ docker run -d --name kong-database \ 
--network=kong-net \ 
-p 54432:5432 \ 
-e "POSTGRES_PASSWORD=pgsql" \ 
-v /$your_path/pgsql/data:/var/lib/postgresql/data \ 
-v /$your_path/pgsql/etc:/etc/postgresql \
 postgres:9.6 

1.4 添加数据库信息

docker exec -it kong-database bash 
> su postgres 
> psql -h localhost --password 
# 输入密码
# 通过一下语句创建账户和数据库
CREATE USER kong password 'kong'; 
CREATE DATABASE kong OWNER kong; 
grant all privileges on database kong to kong;   

CREATE USER konga password 'konga'; 
CREATE DATABASE konga OWNER konga; 
grant all privileges on database konga to konga;

2、部署kong

2.1 准备数据

➜ docker run --rm \ 
--network=kong-net \ 
-e "KONG_DATABASE=postgres" \ 
-e "KONG_PG_HOST=kong-database" \ 
-e "KONG_PG_USER=kong" \ 
-e "KONG_PG_PASSWORD=kong" \ 
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ 
kong:latest kong migrations bootstrap

2.2 启动kong

➜ docker run -d --name kong \ 
--network=kong-net \ 
-e "KONG_DATABASE=postgres" \ 
-e "KONG_PG_HOST=kong-database" \ 
-e "KONG_PG_USER=kong" \ 
-e "KONG_PG_PASSWORD=kong" \ 
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ 
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ 
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ 
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ 
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ 
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \ 
-p 8000:8000 \ 
-p 8443:8443 \ 
-p 8001:8001 \
-p 8444:8444 \ 
kong:latest

参考文档

https://hub.docker.com/_/kong

https://hub.docker.com/_/postgres

https://hub.docker.com/r/pantsel/konga

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务网关Kong系列文章之四:Kong代理

    8000:此端口是Kong用来监听来自客户端的HTTP请求的,并将此请求转发到您的上游服务。这也是本教程中最主要用到的端口。

    Honest1y
  • 微服务网关Kong系列文章之三:Konga安装

    Honest1y
  • 微服务网关Kong系列文章之六:安全

    Honest1y
  • 微服务网关Kong系列文章之一:简介

    当使用单体应用程序架构时,客户端(Web 或移动端)通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一...

    Honest1y
  • 微服务网关Kong系列文章之七:流量控制

    Honest1y
  • 微服务网关Kong系列文章之五:身份验证

    API网关身份验证是控制允许使用您的API传输的数据的重要方法。基本上,它使用一组预定义的凭据来检查特定使用者是否有权访问API。

    Honest1y
  • 云原生架构下的 API 网关实践: Kong (二)

    Kong 是 Mashape 开源的一款云原生架构下的分布式 API 网关,其性能和可扩展性在同类组件中,表现都很优异。Kong 官方提供了很多直接可用的插件,...

    aoho求索
  • 选择Kong作为你的API网关

    在微服务架构之下,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度。如上图左所示,在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要...

    kirito-moe
  • 微服务网关方案:Kong & Nacos

    文章连接:https://mp.weixin.qq.com/s/Kk6Cl7n0sFGgCyyZtExa6A

    程序员架构进阶
  • 微服务网关方案:Kong & Nacos

    前面我们介绍了 Spring Cloud 体系下的网关 Gateway(Zuul)。事实上,还有很多开源且广泛应用的网关方案,例如 Kong 和 Nacos。本...

    程序员架构进阶
  • 花5分钟时间来了解一下高性能网关Kong会有意外收获

    前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营...

    心莱科技雪雁
  • Kong入口控制器和服务网格:Kubernetes设置入口到Istio

    Kubernetes已经成为在服务中编排容器和服务的实际方法。但是我们如何让集群外部的服务访问集群内部的内容呢?Kubernetes附带了Ingress API...

    CNCF
  • 因为没有网关,我的服务器被 DDoS 了

    大家好,我是鸭血粉丝,想起来之前生产发生的事故,阿粉我的内心到现在都还很忐忑不安,今天我们来学习一个 Kong 以及跟你们聊聊做好网关限流控制的重要性。

    纯洁的微笑
  • 云原生架构下的 API 网关实践:Kong (三)

    在前面的文章介绍了 Kong 的相关实践,本文将会介绍 Kong 的利器:插件以及自定义插件。

    aoho求索
  • 又肝了下微服务 API 网关“金刚”,也是蛮香的~

    Kong 是由 Mashape 公司开源的云原生、高性能、可扩展的微服务 API 网关。它基于 OpenResty 实现,使用 Cassandra 或 Post...

    芋道源码
  • 微服务API网关-Kong初探

    Kong是一个clould-native、快速的、可扩展的、分布式的微服务抽象层(也称为API网关、API中间件或在某些情况下称为服务网格)框架。更确切地说,K...

    KaliArch
  • 来自骷髅岛的 Ingress Controller:Kong

    Kong,是一个在 Nginx 反向代理基础上发展而来的 API 网关产品。我之前一直在推动的 Service Mesh,主要关注的是集群(Mesh)内微服务之...

    崔秀龙
  • .Net微服务实战之负载均衡(下)

    相关源码:https://github.com/SkyChenSky/Sikiro

    陈珙
  • 云原生架构下的 API 网关实践:Kong (一)

    ,有点懒怠。最近抽空捣鼓了 Kong 网关的使用实践,微服务网关之前的文章也写过,读者可以翻看之前的文章推送。插件是 Kong 扩展的重要特性,这次除了会介绍 ...

    aoho求索

扫码关注云+社区

领取腾讯云代金券