大家好,又见面了,我是你们的朋友全栈君。
网关是微服务中不可或缺的一部分,它承载了所有请求流量入口,参数验证拦截,用户权限验证,但是除了JAVA的spring cloud之外,公共网关屈指可数,其中最受关注的就是KONG了,笔者半年前就已经在使用kong的那时候使用的是0.11.2-bate版本(之前还被官方坑了一次),前不久终于等到了1.X的正式版发布了,笔者就在这里给大家分享一下kong网关的基本情况以及使用安装的方式。
附上:
喵了个咪的博客:w-blog.cn
kong官网:https://konghq.com/
PS:本文使用的是Kong1.0.3版本
一,kong是什么
kong在girhub有不小的人气,star都有2W多次了相比也知道大家对于kong的热爱(确实也不使用JAVA栈没有什么好的选择),从下面这张官方配图可以看出,kong把本身每个服务都需要重复编写的操作汇总到了一起,让业务关注业务实现不用在为很多的规则进行重复的处理。
从笔者总结数来kong的主要优势:
- 插件市场丰富,很多插件可以降低开发成本;
- 可扩展性,可以编写lua脚本来定制自己的参数验证权限验证等操作;
- 基于openResty,openResty基于Nginx保障了强劲的性能;
- 便捷性能扩容,只需要水平增加服务器资源性能就能提升 ;
- 负载均衡健康检查
二,Docket部署kong
PS:postgreSql数据库版本必须 > 9.4
因为不是通过docker-composer启动的容器需要互相访问需要在同一个网络名下才可以互相访问
<code style="margin-left:0">docker network create kong-net</code>
数据库使用 postgres
<code style="margin-left:0">docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:9.6</code>
准备数据库数据和配置,只需要运行一遍运行完成后会自动结束
<code style="margin-left:0">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</code>
启动kong-service
<code style="margin-left:0">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</code>
<code style="margin-left:0">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</code>
然后调用了一下地址有输出即可:
<code style="margin-left:0">curl -i http://localhost:8001/</code>
使用docker-compose部署kong
<code style="margin-left:0">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</code>
db的 healthcheck 做了数据层初始化完成检测,数据库完成之后才会按照顺序继续启动接下来的容器
<code style="margin-left:0">docker-compose up -d</code>
三,使用外部数据库
很多使用我们并不在容器中运行DB实例,因为如果出现任何问题数据丢失,我们先准备好对应的postgres数据库
<code style="margin-left:0">{DB-host}:{DB-port} {DB-user} {DB-pass}</code>
创建数据库
<code style="margin-left:0">CREATE DATABASE "kong" WITH ENCODING='UTF8';</code>
初始化kong需要的数据库
<code style="margin-left:0">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}</code>
<code style="margin-left:0">> docker-compose up -d Creating network "kong_default" with the default driver Creating kong_kong-migrations_1 ... Creating kong_kong-migrations_1 ... done</code>
在通过docker-compose来运行kong服务
<code style="margin-left:0">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</code>
<code style="margin-left:0">docker-compose up -d Creating kong_kong_1 ... Creating kong_kong_1 ... done</code>
kubernetes编排
<code style="margin-left:0">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</code>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/195286.html原文链接:https://javaforall.cn
未经允许不得转载:木盒主机 » kong网关教程_网关怎么登陆