kong java_KONG网关 — 介绍安装

0B53EAF3-1445-429B-A3E7-BA451B3DCC55.png

网关是微服务中不可或缺的一部分,它承载了所有请求流量入口,参数验证拦截,用户权限验证,但是除了JAVA的spring cloud之外,公共网关屈指可数,其中最受关注的就是KONG了,笔者半年前就已经在使用kong的那时候使用的是0.11.2-bate版本(之前还被官方坑了一次),前不久终于等到了1.X的正式版发布了,笔者就在这里给大家分享一下kong网关的基本情况以及使用安装的方式。

附上:

PS:本文使用的是Kong1.0.3版本

一,kong是什么

F90E840A-181A-492F-8CB5-082D47A5C1B2.png

kong在girhub有不小的人气,star都有2W多次了相比也知道大家对于kong的热爱(确实也不使用JAVA栈没有什么好的选择),从下面这张官方配图可以看出,kong把本身每个服务都需要重复编写的操作汇总到了一起,让业务关注业务实现不用在为很多的规则进行重复的处理。

68747470733a2f2f6b6f6e6768712e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031382f30352f6b6f6e672d62656e65666974732d6769746875622d726561646d652e706e67.png

从笔者总结数来kong的主要优势:

插件市场丰富,很多插件可以降低开发成本;

可扩展性,可以编写lua脚本来定制自己的参数验证权限验证等操作;

基于openResty,openResty基于Nginx保障了强劲的性能;

便捷性能扩容,只需要水平增加服务器资源性能就能提升 ;

负载均衡健康检查

二,Docket部署kong

PS:postgreSql数据库版本必须 > 9.4

因为不是通过docker-composer启动的容器需要互相访问需要在同一个网络名下才可以互相访问

docker network create kong-net

数据库使用 postgres

docker run -d --name kong-database \

--network=kong-net \

-p 5432:5432 \

-e "POSTGRES_USER=kong" \

-e "POSTGRES_DB=kong" \

postgres:9.6

准备数据库数据和配置,只需要运行一遍运行完成后会自动结束

docker run --rm \

--network=kong-net \

-e "KONG_DATABASE=postgres" \

-e "KONG_PG_HOST=kong-database" \

-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \

kong:1.0.3 kong migrations bootstrap

288B7E98-F2D9-45E3-9E23-0CDE00E0B607.png

启动kong-service

docker run -d --name kong \

--network=kong-net \

-e "KONG_DATABASE=postgres" \

-e "KONG_PG_HOST=kong-database" \

-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:1.0.3

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d82c2b7729ae kong:1.0.3 "/docker-entrypoin..." 3 seconds ago Up 2 seconds 0.0.0.0:8000-8001->8000-8001/tcp, 0.0.0.0:8443-8444->8443-8444/tcp kong

9b7f5a9c808f postgres:9.6 "docker-entrypoint..." 26 seconds ago Up 25 seconds 0.0.0.0:5432->5432/tcp kong-database

然后调用了一下地址有输出即可:

curl -i http://localhost:8001/

使用docker-compose部署kong

version: '2.1'

services:

kong-migrations:

image: "kong:1.0.3"

command: kong migrations bootstrap

depends_on:

db:

condition: service_healthy

environment:

KONG_DATABASE: postgres

KONG_PG_DATABASE: kong

KONG_PG_HOST: db

KONG_PG_PASSWORD: kong

KONG_PG_USER: kong

links:

- db:db

kong:

image: "kong:1.0.3"

depends_on:

db:

condition: service_healthy

environment:

KONG_ADMIN_ACCESS_LOG: /dev/stdout

KONG_ADMIN_ERROR_LOG: /dev/stderr

KONG_ADMIN_LISTEN: '0.0.0.0:8001'

KONG_CASSANDRA_CONTACT_POINTS: db

KONG_DATABASE: postgres

KONG_PG_DATABASE: kong

KONG_PG_HOST: db

KONG_PG_PASSWORD: kong

KONG_PG_USER: kong

KONG_PROXY_ACCESS_LOG: /dev/stdout

KONG_PROXY_ERROR_LOG: /dev/stderr

links:

- db:db

ports:

- "8000:8000/tcp"

- "8001:8001/tcp"

- "8443:8443/tcp"

- "8444:8444/tcp"

restart: on-failure

db:

image: postgres:9.6

environment:

POSTGRES_DB: kong

POSTGRES_PASSWORD: kong

POSTGRES_USER: kong

healthcheck:

test: ["CMD", "pg_isready", "-U", "kong"]

interval: 30s

timeout: 30s

retries: 3

restart: on-failure

stdin_open: true

tty: true

db的 healthcheck 做了数据层初始化完成检测,数据库完成之后才会按照顺序继续启动接下来的容器

docker-compose up -d

三,使用外部数据库

很多使用我们并不在容器中运行DB实例,因为如果出现任何问题数据丢失,我们先准备好对应的postgres数据库

{DB-host}:{DB-port}

{DB-user}

{DB-pass}

创建数据库

CREATE DATABASE "kong" WITH ENCODING='UTF8';

初始化kong需要的数据库

version: '2.1'

services:

kong-migrations:

image: "kong:1.0.3"

command: kong migrations bootstrap

environment:

KONG_DATABASE: postgres

KONG_PG_DATABASE: kong

KONG_PG_HOST: {DB-host}

KONG_PG_PORT: {DB-port}

KONG_PG_PASSWORD: {DB-pass}

KONG_PG_USER: {DB-user}

> docker-compose up -d

Creating network "kong_default" with the default driver

Creating kong_kong-migrations_1 ...

Creating kong_kong-migrations_1 ... done

在通过docker-compose来运行kong服务

version: '2.1'

services:

kong:

image: "kong:1.0.3"

environment:

KONG_ADMIN_ACCESS_LOG: /dev/stdout

KONG_ADMIN_ERROR_LOG: /dev/stderr

KONG_ADMIN_LISTEN: '0.0.0.0:8001'

KONG_CASSANDRA_CONTACT_POINTS: db

KONG_DATABASE: postgres

KONG_PG_DATABASE: kong

KONG_PG_HOST: {DB-host}

KONG_PG_PORT: {DB-port}

KONG_PG_PASSWORD: {DB-pass}

KONG_PG_USER: {DB-user}

KONG_PROXY_ACCESS_LOG: /dev/stdout

KONG_PROXY_ERROR_LOG: /dev/stderr

ports:

- "8000:8000/tcp"

- "8001:8001/tcp"

- "8443:8443/tcp"

- "8444:8444/tcp"

restart: on-failure

docker-compose up -d

Creating kong_kong_1 ...

Creating kong_kong_1 ... done

kubernetes编排

apiVersion: extensions/v1beta1 # K8S对应的API版本

kind: Deployment # 对应的类型

metadata:

name: kong

labels:

name: kong

namespace: kong # namespace

spec:

replicas: 1 # 镜像副本数量

template:

metadata:

labels: # 容器的标签 可和service关联

app: kong

spec:

containers:

- name: kong # 容器名和镜像

image: kong:1.0.3

imagePullPolicy: Always

ports:

- containerPort: 8000

env: # 环境变量

- name: KONG_DATABASE

value: postgres

- name: KONG_PG_DATABASE

value: dev-kong

- name: KONG_PG_HOST

value: {DB-host}

- name: KONG_PG_PORT

value: {DB-port}

- name: KONG_PG_PASSWORD

value: {DB-pass}

- name: KONG_PG_USER

value: {DB-user}

- name: KONG_LOG_LEVEL

value: warn

resources: # 资源限制

requests:

memory: "256Mi"

cpu: "200m"

limits:

memory: "512Mi"

cpu: "400m"

---

apiVersion: v1

kind: Service

metadata:

namespace: kong # 在哪个命名空间中创建

name: kong # 名称

labels:

name: kong

spec:

type: NodePort # 开放端口的类型

selector: # service负载的容器需要有同样的labels

app: kong

ports:

- name: http

port: 8000 # 通过service来访问的端口

targetPort: 8000 # 对应容器的端口

nodePort: 30180

- name: https

port: 8443 # 通过service来访问的端口

targetPort: 8443 # 对应容器的端口

nodePort: 30143

- name: api

port: 8001 # 通过service来访问的端口

targetPort: 8001 # 对应容器的端口

nodePort: 30801

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值