zoukankan      html  css  js  c++  java
  • kong konga从开始就踩坑

    因为之前有用过nginx,httpd,还有各种的自己写tcp端口来处理服务的。所以当使用kong konga的时候就各种与之前的知识打架。

    坑1:

    我就是要在原机上装kong,konga

    操作:首先官网文档走起,一步一步地按照文档操作。

    结果:glibc要求2.28.

    原来我在centos7上,以为在centos8上操作。本来有两台机,一个7,一个8.结果7在操作一大半,发现操作错了。

    改回到8.很顺利地装好了kong. 

    坑2:

    kong manger是什么东西,各种配端口。结果发现,毛用都没用。这个是kong manger管理界面。直接换成konga

    坑3:

    我要装mysql,看下官方文档,原来只支持postpres.毛线,花N多时间找资料,至于为什么想用mysql,因为想数据统一管理呗。

    还有konga只支持postpres吧。

    坑4:

    我就是要在原机装konga.。。。。嗯嗯.各种源安装,数据库创建,git so easy.毛线,前端各种依赖跟不上。而且玩过前端的都知道装个npm -g 毛线的那个node_moudle占多十几G,以为我的机子是开发机吗?

    直接玩docker

    为毛之前不想玩docker,因为我没钱,买的配置很低,不想跑doceker呀。

    坑5:

    老实人跟着人家说的kong窗口走。下面我贴一下人家的容器命令

    安装kong,按照官网的教程:
    docker pull kong/kong-gateway:2.4.1.0-alpine
    docker images
    docker tag <IMAGE_ID> kong-ee
    docker network create kong-ee-net
    

      上面那个tag 要改成 镜像ID之外,没问题,还有这里这个网络很有用。它可以让几个容器之间可以访问

    建数据库:
    docker run -d --name kong-ee-database 
    --network=kong-ee-net 
    -p 5432:5432 
    -e "POSTGRES_USER=kong" 
    -e "POSTGRES_DB=kong" 
    -e "POSTGRES_PASSWORD=kong" 
    postgres:9.6
    

      走起,没问题,这里有指明一个sql的镜像,如果没下载,它会自动给你下载来的。

    导docker库数据:
    docker run --rm --network=kong-ee-net 
    -e "KONG_DATABASE=postgres" 
    -e "KONG_PG_HOST=kong-ee-database" 
    -e "KONG_PG_PASSWORD=kong" 
    -e "KONG_PASSWORD=kong" 
    kong-ee kong migrations bootstrap
    

      这个命令也没问题,就是弄一下数据库初始化

    启动kong:
    docker run -d --name kong 
    --network=kong-ee-net 
    -e "KONG_DATABASE=postgres" 
    -e "KONG_PG_HOST=kong-ee-database" 
    -e "POSTGRES_DB=kong" 
    -e "KONG_PG_USER=kong" 
    -e "KONG_PG_PASSWORD=kong" 
    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001,0.0.0.0:8444 ssl" 
    -p 8000:8000 
    -p 8001:8001 
    -p 8443:8443 
    -p 8444:8444 
    kong:latest
    

      这里要说一下,这个kong:latest,因为上面已经把它改为kong-ee,所以要改,不过这里最大的坑是8000:8000,8443:8443

    这里说明一下,因为这个kong本来就是要用来做代理的。所以它就是一个对外提供端口服务网关。8000,8443要改为80,443,这样才能对接外面的无端口域名,https无端口域名的访问。

    坑6:

    kong代理线路,upstreams里的名称,要跟service里的host一致。service里的protocol是指的目标服务器的协议,因为目标服务器可以是http和https,service里的端口就像是nginx里的listen,什么?你说为什么使用80端口,也能用https?配就是了。这个我也不懂,不过我就是用80

    routes就像是nginx里的location,不过rotes里要配service alias就是域名映射,有点像nginx的域名解析。path就是要代理的路径。

    https的配置,先在左边的证书栏目里添加证书。添加一个snis,这个snis要跟routes里的snis一致。好了。https配置成功。这里的https在上面一定要把容器的8443改为443.  致于路径的配置。service里的路径就像upstreams端口后面的路径。routes的路径就像是location代理的路径。所以如果走不通。先在nginx走一次看看能不能通。再把对应的参数在konga里修改

     更多坑:如果让http强制转到https

    看到有的文章说,要把容器里的东西映射到宿主机。不过这个做法有点复杂

    可能使用lua脚本来处理,使用插件。

    在要使用到的route里添加上对应的插件:plugins->serverless->pre function  这个意思是,在执行操作前,运行这个函数

    在添加的函数下添加以下代码:

    local a=kong.request.get_scheme()if a=="http"then local b=kong.request.get_host()local c=kong.request.get_path_with_query()local d="https://"..b..c;kong.response.set_header("Location",d)return kong.response.exit(302,d)end
    

      记得按enter,它才认为有数据填入。然后,http的就会自动转到https了

    坑7:大坑

    居然8001端口随便访问?还有没有王法。自从装了这个东西,让我天天睡不着觉。怎么可能重要的服务让人家乱搞嘛。

    下面是解决方案。

    首先,让8001的服务变为kong自己的一个服务。然后把这个服务加上验证。

    走起:

    先建一个upsteam,然后目标弄为内网IP加端口。如localhost:8001,这个时候,上面的容器就可以再处理一下,再弄一个不要绑定8001端口的。

    建一个service对应upsteam

    建一个route对应service,这里,给这个route加一个单独的域名吧。没有域名的关我毛事。给route添加basic auth.也就是说这个8001要用户名和密码才能使用。

    最后在konga的connects那里,改为这个新的验证

    最后一步。到服务器,去掉对外的8001端口

    我们把上面的kong的容器停止,删掉。然后用下面的语句创建一个新的

    docker run -d --name kong 
    --network=kong-ee-net 
    -e "KONG_DATABASE=postgres" 
    -e "KONG_PG_HOST=kong-ee-database" 
    -e "POSTGRES_DB=kong" 
    -e "KONG_PG_USER=kong" 
    -e "KONG_PG_PASSWORD=kong" 
    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001,0.0.0.0:8444 ssl" 
    -p 80:8000 
    -p 443:8443 
    kong-ee:latest
    

      这时,尽量减少了对外的端口

    那个konga的就留着吧,因为那个有验证。88

    坑X:

    场景-》如果是代理的目标是一个nginx服务器,而nginx服务器是使用域名来识别站点的。就是都用80端口来。根据域名不同指向不同的站点。

    查了很多,都 是说把docker里的配置文件映射到宿主机出来。然后直接改配置文件 ,像改nginx一样。

    就是改那个poxy_set_header

    其实konga里有一个,是否开启host向前传递的功能。 

    Preserve Host   设置为开启,就可能把域名传过去。让目标服务器识别了。

    如果国内有些站点要备案,另当别论。

  • 相关阅读:
    [唐胡璐]QTP技巧 代码换行符
    [唐胡璐]QTP技巧 最小化QTP
    [唐胡璐]QTP技巧 QTP的对象封装与运作原理
    [唐胡璐]QTP技巧 Ctrl+Shift+Space快捷键
    [唐胡璐]QTP技巧 ALT+G快捷键
    [唐胡璐]VBS技巧 引用(include)外部函数库
    C# Array详细解析
    C# winform DataGridView 常见属性(转)
    教你在windows7下安装虚拟网卡(转)
    ORA12541:TNS:无监听程序
  • 原文地址:https://www.cnblogs.com/bfyang5130/p/15202903.html
Copyright © 2011-2022 走看看