Skip to content

Latest commit

 

History

History
159 lines (147 loc) · 6.05 KB

k8s使用kong.md

File metadata and controls

159 lines (147 loc) · 6.05 KB

###k8s部署kong 参考网址:https://github.com/Kong/kong-dist-kubernetes/tree/master/minikube 本次实验环境为minikube。 kong可以使用cassandra或postgres作为数据库,这里使用cassandra作为数据库。

kubectl create -f cassandra.yaml

数据库准备

kubectl create -f kong_migration_cassandra.yaml

部署kong

kubectl create -f kong_cassandra.yaml

###kong配置服务转发 创建名为example-service的转发地址为http://mockbin.org的服务。

curl -i -X POST http://192.168.39.32:30374/services/ --data 'name=example-service' --data 'url=http://mockbin.org'

####通过http子url转发 创建路由route通过子url/auth-sample路由到服务example-service

curl -i -X POST \
  --url http://localhost:8001/services/example-service/routes \
  --data 'paths[]=/auth-sample'

通过http://localhost:8000/auth-sample可以访问服务的地址http://mockbin.org

####通过http头部转发 创建路由route通过头部Hosts: example.com路由到服务example-service

curl -i -X POST http://192.168.39.32:30374/services/example-service/routes --data 'hosts[]=example.com'

通过以下命令行测试访问

curl -i -X GET http://192.168.39.32:30556/ --header 'Host: example.com'

以下部署通过firefox浏览器测试访问。 ####firefox中查看http request headers 参考网站:https://o7planning.org/en/11637/how-to-view-http-headers-in-firefox

####firefox中修改http request headers firefox使用插件modefy header firefoxaddon 配置modify header,增加一条记录,为urlhttp://192.168.39.32:30556/添加头部Host和头部值为example.com,如下 modifyheader 再次访问http://192.168.39.32:30556/,显示的页面如下 servicepage

显示的http request hearder如下,可以看到在请求头下有Host: example.com头部。 requestheader

###kong配置认证

####启用key-auth插件

curl -i -X POST --url http://localhost:8001/services/example-service/plugins/ --data 'name=key-auth'

测试插件是否启动成功

curl -i -X GET --url http://localhost:8000/ --header 'Host: example.com'

没有apikey头部,返回401 Unauthorized

HTTP/1.1 401 Unauthorized
Date: Mon, 04 Jun 2018 04:20:28 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
WWW-Authenticate: Key realm="kong"
Server: kong/0.13.1

{"message":"No API key found in request"}

为服务添加用户Jason

curl -i -X POST --url http://localhost:8001/consumers/ --data "username=Jason"

为用户Jason配置key

curl -i -X POST --url http://localhost:8001/consumers/Jason/key-auth/ --data 'key=cef1fe6937e444a6b18a26965d619718'

使用用户与key访问服务。

curl -i -X GET --url http://localhost:8000 --header "Host: example.com" --header "apikey: cef1fe6937e444a6b18a26965d619718"

####启用jwt插件 参考网址:https://getkong.org/plugins/jwt/?_ga=2.54302632.1414723783.1528097448-1093226140.1527845787

curl -i -X POST --url http://localhost:8001/services/example-service/plugins/ --data "name=jwt"

为服务添加用户bill

curl -i -X POST --url http://localhost:8001/consumers/ --data "username=bill"

为用户bill创建jwt证书

 curl -i -X POST --url http://localhost:8001/consumers/bill/jwt -H "Content-Type: application/x-www-form-urlencoded"

获得response

HTTP/1.1 201 Created
Date: Tue, 05 Jun 2018 01:39:25 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/0.13.1

{"created_at":1528162765119,"id":"a0d929d2-51be-47e9-967b-a177897fc911","algorithm":"HS256","secret":"NIt4p3uIUBepybyNc7Ypqse3F9WbS70d","key":"kK5XS2PaAXvUAGAmZtTgIyLPeCqUbMdO","consumer_id":"1a87badc-364e-4b6d-a051-3cc9c9323d8b"}

在网址https://jwt.io/上生成JWT。

jwttoken

Issuer (key from above): kK5XS2PaAXvUAGAmZtTgIyLPeCqUbMdO
Key (secret from above): NIt4p3uIUBepybyNc7Ypqse3F9WbS70d

产生的JWT为

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrSzVYUzJQYUFYdlVBR0FtWnRUZ0l5TFBlQ3FVYk1kTyJ9.Guko4BRzLkRyAtYnu2T9T-M11HdcP5FbBnI_gr-b6BM

使用JWT 访问服务

curl http://localhost:8000 \
    -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrSzVYUzJQYUFYdlVBR0FtWnRUZ0l5TFBlQ3FVYk1kTyJ9.Guko4BRzLkRyAtYnu2T9T-M11HdcP5FbBnI_gr-b6BM'

###kong速率限制 参考网址:https://konghq.com/plugins/ https://getkong.org/plugins/rate-limiting/?_ga=2.54302632.1414723783.1528097448-1093226140.1527845787 https://getkong.org/plugins/request-size-limiting/?_ga=2.18338489.1414723783.1528097448-1093226140.1527845787

####http请求次数限制 kong可以启用插件rate-limiting对一段周期内(秒,分钟,小时,天,月,年)的请求次做限制,如果service/Route没有认证层,则基于client IP为基准配置请求速率限制,如果配置认证层,则基于Consumer为基准配置请求速率限制。 例如,为服务配置请求速率限制为每分钟内5次,没有指定consumer,对所有访问计数限制。

curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=rate-limiting"  \
    --data "config.minute=5"

配置对指定consumer访问服务配置请求速率限制为每分钟内5次。

curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=rate-limiting"  \
    --data "config.minute=5" \
    --data "consumer_id={consumer_id}"

####http请求体大小限制 请求体大小以M为单位。 例如,配置服务的请求体最大为128M。

curl -X POST http://kong:8001/services/{service}/plugins \
    --data "name=request-size-limiting"  \
    --data "config.allowed_payload_size=128"