概述

支持的安装方式https://konghq.com/install/
image.png

端口

端口 作用
8000 http网关
8443 https网关
8001 管理api
8444 https的管理api
  • 8000:此端口是 Kong 用来监听来自客户端传入的 HTTP 请求,并将此请求转发到上游服务器;(Kong 根据配置的规则转发到真实的后台服务地址)
  • 8443:此端口是 Kong 用来监听来自客户端传入的HTTPS请求的。它跟8000端口的功能类似,转发 HTTPS 请求的。可以通过修改配置文件来禁止它;
  • 8001:Admin API,通过此端口,管理者可以对 Kong 的监听服务进行配置,插件设置、API 的增删改查、以及负载均衡等一系列的配置都是通过 8001 端口进行管理;
  • 8444:通过此端口,管理者可以对 HTTPS 请求进行监控。

docker

个人开发试验推荐使用docker方式https://docs.konghq.com/install/docker/,安装文档 https://docs.konghq.com/install/docker/
创建网络

  1. $ docker network create kong-net
  2. 955f176da787ab7b6e924680c8c165427c6e2d329519a97bdcbcbd4f104211a6

创建数据库postgres

  1. $ docker run -d --name kong-database \
  2. --network=kong-net \
  3. -p 5432:5432 \
  4. -e "POSTGRES_USER=kong" \
  5. -e "POSTGRES_DB=kong" \
  6. -e "POSTGRES_PASSWORD=kong" \
  7. postgres:9.6

数据库初始化

  1. docker run --rm \
  2. --network=kong-net \
  3. -e "KONG_DATABASE=postgres" \
  4. -e "KONG_PG_HOST=kong-database" \
  5. -e "KONG_PG_USER=kong" \
  6. -e "KONG_PG_PASSWORD=kong" \
  7. -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
  8. kong:latest kong migrations bootstrap

启动

  1. docker run -d --name kong \
  2. --network=kong-net \
  3. -e "KONG_DATABASE=postgres" \
  4. -e "KONG_PG_HOST=kong-database" \
  5. -e "KONG_PG_USER=kong" \
  6. -e "KONG_PG_PASSWORD=kong" \
  7. -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
  8. -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
  9. -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
  10. -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
  11. -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
  12. -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
  13. -p 8000:8000 \
  14. -p 8443:8443 \
  15. -p 127.0.0.1:8001:8001 \
  16. -p 127.0.0.1:8444:8444 \
  17. kong:latest

测试启动

  1. curl -i http://localhost:8001/

docker-compose

只含有kong

kong的运行需要数据库的支持,目前官方支持postgresql和cassandra,安装官方的docker安装方式也比较啰嗦,本地调试推荐使用docker-compose方便快捷,个人使用的一个docker-compose模板板:https://gist.github.com/pantsel/73d949774bd8e917bfd3d9745d71febfhttps://github.com/Kong/docker-kong/blob/master/compose/docker-compose.yml

  1. version: "3.7"
  2. volumes:
  3. kong_data: {}
  4. networks:
  5. kong-net:
  6. name: kong-net
  7. services:
  8. #######################################
  9. # Postgres: The database used by Kong
  10. #######################################
  11. kong-database:
  12. image: postgres:9.6
  13. container_name: kong-postgres
  14. restart: on-failure
  15. networks:
  16. - kong-net
  17. volumes:
  18. # - ./init-user-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh
  19. - kong_data:/var/lib/postgresql/data
  20. environment:
  21. POSTGRES_USER: kong
  22. POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-kong}
  23. POSTGRES_DB: kong
  24. ports:
  25. - "5432:5432"
  26. healthcheck:
  27. test: ["CMD", "pg_isready", "-U", "kong"]
  28. interval: 30s
  29. timeout: 30s
  30. retries: 3
  31. #######################################
  32. # Kong database migration
  33. #######################################
  34. kong-migration:
  35. image: ${KONG_DOCKER_TAG:-kong:latest}
  36. command: kong migrations bootstrap
  37. networks:
  38. - kong-net
  39. restart: on-failure
  40. environment:
  41. KONG_DATABASE: postgres
  42. KONG_PG_HOST: kong-database
  43. KONG_PG_DATABASE: kong
  44. KONG_PG_USER: kong
  45. KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
  46. depends_on:
  47. - kong-database
  48. #######################################
  49. # Kong: The API Gateway
  50. #######################################
  51. kong:
  52. image: ${KONG_DOCKER_TAG:-kong:latest}
  53. restart: on-failure
  54. networks:
  55. - kong-net
  56. environment:
  57. KONG_DATABASE: postgres
  58. KONG_PG_HOST: kong-database
  59. KONG_PG_DATABASE: kong
  60. KONG_PG_USER: kong
  61. KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
  62. KONG_PROXY_LISTEN: 0.0.0.0:8000
  63. KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
  64. KONG_ADMIN_LISTEN: 0.0.0.0:8001
  65. depends_on:
  66. - kong-database
  67. healthcheck:
  68. test: ["CMD", "kong", "health"]
  69. interval: 10s
  70. timeout: 10s
  71. retries: 10
  72. ports:
  73. - "8000:8000"
  74. - "8001:8001"
  75. - "8443:8443"
  76. - "8444:8444"

包含konga

konga是kong的第三方dashbord,kong 官方社区版只提供了admin api没有可视化UI配置界面,穷屌丝推荐第三方ui的是konga
访问地址是安装过程中定义的ip端口,默认:http://{your server’s public ip}:1337,首次打开需要注册管理员

  1. version: "3.7"
  2. volumes:
  3. kong_data: {}
  4. networks:
  5. kong-net:
  6. services:
  7. #######################################
  8. # Postgres: The database used by Kong
  9. #######################################
  10. kong-database:
  11. image: postgres:9.6
  12. container_name: kong-postgres
  13. restart: on-failure
  14. networks:
  15. - kong-net
  16. volumes:
  17. - kong_data:/var/lib/postgresql/data
  18. environment:
  19. POSTGRES_USER: kong
  20. POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-kong}
  21. POSTGRES_DB: kong
  22. ports:
  23. - "5432:5432"
  24. healthcheck:
  25. test: ["CMD", "pg_isready", "-U", "kong"]
  26. interval: 30s
  27. timeout: 30s
  28. retries: 3
  29. #######################################
  30. # Kong database migration
  31. #######################################
  32. kong-migration:
  33. image: ${KONG_DOCKER_TAG:-kong:latest}
  34. command: kong migrations bootstrap
  35. networks:
  36. - kong-net
  37. restart: on-failure
  38. environment:
  39. KONG_DATABASE: postgres
  40. KONG_PG_HOST: kong-database
  41. KONG_PG_DATABASE: kong
  42. KONG_PG_USER: kong
  43. KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
  44. depends_on:
  45. - kong-database
  46. #######################################
  47. # Kong: The API Gateway
  48. #######################################
  49. kong:
  50. image: ${KONG_DOCKER_TAG:-kong:latest}
  51. restart: on-failure
  52. networks:
  53. - kong-net
  54. environment:
  55. KONG_DATABASE: postgres
  56. KONG_PG_HOST: kong-database
  57. KONG_PG_DATABASE: kong
  58. KONG_PG_USER: kong
  59. KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong}
  60. KONG_PROXY_LISTEN: 0.0.0.0:8000
  61. KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
  62. KONG_ADMIN_LISTEN: 0.0.0.0:8001
  63. depends_on:
  64. - kong-database
  65. healthcheck:
  66. test: ["CMD", "kong", "health"]
  67. interval: 10s
  68. timeout: 10s
  69. retries: 10
  70. ports:
  71. - "8000:8000"
  72. - "8001:8001"
  73. - "8443:8443"
  74. - "8444:8444"
  75. #######################################
  76. # Konga database prepare
  77. #######################################
  78. konga-prepare:
  79. image: pantsel/konga:latest
  80. command: "-c prepare -a postgres -u postgresql://kong:${KONG_PG_PASSWORD:-kong}@kong-database:5432/konga"
  81. networks:
  82. - kong-net
  83. restart: on-failure
  84. depends_on:
  85. - kong-database
  86. #######################################
  87. # Konga: Kong GUI
  88. #######################################
  89. konga:
  90. image: pantsel/konga:latest
  91. restart: always
  92. networks:
  93. - kong-net
  94. environment:
  95. DB_ADAPTER: postgres
  96. DB_URI: postgresql://kong:${KONG_PG_PASSWORD:-kong}@kong-database:5432/konga
  97. NODE_ENV: production
  98. depends_on:
  99. - kong-database
  100. ports:
  101. - "1337:1337"
  1. $ docker-compose up -d

出现下面内容表示安装完成了

  1. Status: Downloaded newer image for kong:latest
  2. Creating compose_db_1 ... done
  3. Creating compose_kong-migrations-up_1 ... done
  4. Creating compose_kong_1 ... done
  5. Creating compose_kong-migrations_1 ... done

查看启动的服务

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. e3de856b6bb3 kong:latest "/docker-entrypoint.…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:8000-8001->8000-8001/tcp, 0.0.0.0:8443-8444->8443-8444/tcp compose_kong_1
  4. 4eedde7cd7fd postgres:9.5 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 5432/tcp compose_db_1

k8s

官方安装 https://docs.konghq.com/2.1.x/kong-for-kubernetes/install/

YAML manifests

To deploy Kong via kubectl, use:

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

图片.png
如果使用数据库,我们建议在Kubernetes内部以内存中模式(也称为无db模式)运行Kong,因为所有配置都存储在Kubernetes控制平面中。这种设置简化了Kong的操作,因此无需担心数据库配置、备份、可用性、安全性等问题。如果您决定使用数据库,我们建议您在Kubernetes之外运行数据库。您可以使用Amazon的RDS之类的服务或云提供商提供的类似的托管Postgres服务来自动化数据库操作。

我们不建议在部署Kubernetes时使用与Cassandra一起使用的Kong,因为在Kubernetes中,Kong使用Cassandra所涵盖的特性是通过其他方式处理的。

konga配置

创建konga数据库,这个只需要首次启动konga的时候创建 只要不删除本地的volume 就不需要再次创建

  1. $ docker run --rm --network=kong-net pantsel/konga:latest -c prepare -a postgres -u postgres://kong:kong@kong-database:5432/konga

开启konga服务

  1. $ docker run -p 1337:1337 --network kong-net -e "DB_ADAPTER=postgres" -e "DB_URI=postgres://kong:kong@kong-database:5432/konga" -e "NODE_ENV=production" --name konga -d pantsel/konga

image.png

image.png

image.png

image.png

image.png

cenos

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

日志

ong网关默认日志在/usr/local/kong/logs,主要有access.log,admin_access.log,error.log,access.log和nginx的access日志类似。

  1. 172.17.0.1 - - [10/Nov/2020:14:42:17 +0000] "GET /mock/request?key=hello-world HTTP/1.1" 200 1013 "-" "HTTPie/2.3.0"
  2. 172.17.0.1 - - [10/Nov/2020:15:39:24 +0000] "GET /mock/request?key=hello HTTP/1.1" 403 33 "-" "HTTPie/2.3.0"

k8s

https://blog.csdn.net/qianghaohao/article/details/99691727