Openresty是基於Nginx的,使用的語言是Lua。
- 官方網站:https://konghq.com
- 官方文檔:https://docs.konghq.com
- 項目地址:https://github.com/Kong/kong
- Kong中文文檔項目地址:https://github.com/qianyugang/kong-docs-cn
依賴
- gcc
- pcre
- zlib
- openssl
- postgresql9.5+
gcc 安裝
安裝 gcc 編譯環境:
yum -y install gcc
pcre 安裝
pcre(Perl Compatible Regular Expressions) 是一個 Perl 庫,包括 perl 兼容的正則表達式,nginx 的 http 庫使用 pcre 解析正則表達式。
yum install -y pcre pcre-devel
zlib 安裝
zlib 庫提供多種壓縮和加壓縮的方式。
sudo yum install -y zlib zlib-devel
openssl 安裝
openssl 是一個請打的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協議。
yum install -y openssl openssl-devel
postgresql 安裝
PostgreSQL是完全由社區驅動的開源項目,由全世界超過1000名貢獻者所維護。它提供了單個完整功能的版本。可靠性是PostgreSQL的最高優先級。Kong 默認使用 postgresql 作爲數據庫。
// 添加 rpm
yum install -y https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
// 安裝 postgresql 9.5
yum install -y postgresql95-server postgresql95-contrib
// 初始化數據庫
/usr/pgsql-9.5/bin/postgresql95-setup initdb
// 設置成 centos7 開機啓動服務
sudo systemctl enable postgresql-9.5.service
// 啓動 postgresql 服務
sudo systemctl start postgresql-9.5.service
// 查看 postgresql 狀態
suso systemctl status postgresql-9.5.service
配置 Postgresql
執行完初始化任務之後,postgresql 會自動創建和生成兩個用戶和一個數據庫:
linux 系統用戶 postgres:管理數據庫的系統用戶;
postgresql 用戶 postgres:數據庫超級管理員;
數據庫 postgres:用戶 postgres 的默認數據庫。
密碼由於是默認生成的,需要在系統中修改一下。
passwd postgres
爲了安全以及滿足 Kong 初始化的需求,需要在建立一個 postgre 用戶 kong 和對應的 linux 用戶 kong,並新建數據庫 kong。
// 新建 linux kong 用戶
sudo adduser kong
// 使用管理員賬號登錄 psql 創建用戶和數據庫
// 切換 postgres 用戶
// 切換 postgres 用戶後,提示符變成 `-bash-4.2$`
su postgres
// 進入 psql 控制檯
psql
// 此時會進入到控制檯(系統提示符變爲'postgres=#')
// 先爲管理員用戶postgres修改密碼
\password postgres
// 建立新的數據庫用戶(和之前建立的系統用戶要重名)
create user kong with password '123456';
// 爲新用戶建立數據庫
create database kong owner kong;
// 把新建的數據庫權限賦予 kong
grant all privileges on database kong to kong;
// 退出控制檯
\q
登錄命令爲:psql -U kong -d kong -h 127.0.0.1 -p 5432
在 work 或者 root 賬戶下登錄 postgresql 數據庫會提示權限問題。
認證權限配置文件爲 /var/lib/pgsql/9.5/data/pg_hba.conf
常見的四種身份驗證爲:
trust:凡是連接到服務器的,都是可信任的。只需要提供psql用戶名,可以沒有對應的操作系統同名用戶;
password 和 md5:對於外部訪問,需要提供 psql 用戶名和密碼。對於本地連接,提供 psql 用戶名密碼之外,還需要有操作系統訪問權。(用操作系統同名用戶驗證)password 和 md5 的區別就是外部訪問時傳輸的密碼是否用 md5 加密;
ident:對於外部訪問,從 ident 服務器獲得客戶端操作系統用戶名,然後把操作系統作爲數據庫用戶名進行登錄對於本地連接,實際上使用了peer;
peer:通過客戶端操作系統內核來獲取當前系統登錄的用戶名,並作爲psql用戶名進行登錄。
psql 用戶必須有同名的操作系統用戶名。並且必須以與 psql 同名用戶登錄 linux 纔可以登錄 psql 。想用其他用戶(例如 root )登錄 psql,修改本地認證方式爲 trust 或者 password 即可。
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 trust
pgsql 默認只能通過本地訪問,需要開啓遠程訪問。
修改配置文件 /var/lib/pgsql/9.5/data/postgresql.conf
,將 listen_address
設置爲 '*'。
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
執行 sudo systemctl restart postgresql-9.5.service
重啓 postgresql。
kong 安裝
參照官方的安裝方法[https://getkong.org/install/centos/]
cat > /etc/yum.repos.d/kong.repo <<EOT
[kong]
baseurl=https://kong.bintray.com/kong-rpm/centos/7
gpgcheck=0
EOT
sudo yum install epel-release
sudo yum install kong-1.4.1
下面修改 kong 的配置文件,默認配置文件位於 /etc/kong/kong.conf.default
sudo cp /etc/kong/kong.conf.default /etc/kong/kong.conf
將之前安裝配置好的 postgresql 信息填入 kong 配置文件中:sudo vi /etc/kong/kong.conf
#------------------------------------------------------------------------------
# DATASTORE
#------------------------------------------------------------------------------
# Kong will store all of its data (such as APIs, consumers and plugins) in
# either Cassandra or PostgreSQL.
#
# All Kong nodes belonging to the same cluster must connect themselves to the
# same database.
database = postgres # Determines which of PostgreSQL or Cassandra
# this node will use as its datastore.
# Accepted values are `postgres` and
# `cassandra`.
pg_host = 127.0.0.1 # The PostgreSQL host to connect to.
pg_port = 5432 # The port to connect to.
pg_user = kong # The username to authenticate if required.
pg_password = 123456 # The password to authenticate if required.
pg_database = kong # The database name to connect to.
pg_ssl = off # 如果不希望開放 8443 的 ssl 訪問可關閉
導入kong的數據到postgres
kong migrations bootstrap
如果啓動過程中,碰到提示 FATAL: Ident authentication failed for user "kong" 的問題,請確認在配置 postgresql 的認證文件時,採用了 password 或者 trust 連接方式。
Kong默認監聽下面端口:
8000,監聽來自客戶端的HTTP流量,轉發到你的upstream服務上。
8443,監聽HTTPS的流量,功能跟8000一樣。可以通過配置文件禁止。
8001,Kong的HTTP監聽的api管理接口。
8444,Kong的HTTPS監聽的API管理接口。
kong的管理端口8001默認監聽 127.0.0.1 修改爲監聽全部ip,修改/etc/kong/kong.conf ,取消admin_listen所在行的註釋,並改爲:admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl