2022年9月

遇到一种场景,某前端服务部署在kubernetes中,有偶发的服务故障。想着健康探针重启就行,忽然想到,如果是重要的线上服务宕机,不查出来心里憋得慌,怎么让服务恢复的同时又能保留现场呢
改当前pod的标签,这样deployment会认为副本消失,自动创建。完美实现老容器保留,业务也及时恢复
截图.jpg

kong中默认有安全插件,黑白名单限流等,限制UA暂时没找到。可以自己开发一个

-- handler.lua
local BasePlugin = require "kong.plugins.base_plugin"
local MyPluginHandler = BasePlugin:extend()

MyPluginHandler.VERSION = "1.0.0"
MyPluginHandler.PRIORITY = 10

function MyPluginHandler:new()
  MyPluginHandler.super.new(self, "block-user-agent")
end

function MyPluginHandler:access(conf)
  MyPluginHandler.super.access(self)
  
  -- 检查 User-Agent 请求头
  local user_agent = kong.request.get_header("User-Agent")
  for i, ua in ipairs(conf.blocked_user_agents) do
    if user_agent == ua then
      -- 如果 User-Agent 被阻止,使用 kong.response.exit 返回响应并停止处理
      return kong.response.exit(conf.response_code, { message = conf.response_message })
    end
  end
end
-- schema.lua
local typedefs = require "kong.db.schema.typedefs"

return {
  name = "block-user-agent",
  fields = {
    { consumer = typedefs.no_consumer },
    { config = {
        type = "record",
        fields = {
          { blocked_user_agents = { type = "array", default = {}, elements = { type = "string", }, }, },
          { response_code = { type = "number", default = 403 }, },
          { response_message = { type = "string", default = "Forbidden" }, },
        },
      },
    },
  },
}

docker启动时注意修改kong/constants.lua,在插件底部加入UA_block

docker stop kong-gateway
docker rm kong-gateway  
docker run -d --name kong-gateway \
 --network=kong-net \
 -e "KONG_DATABASE=postgres" \
 -e "KONG_PG_HOST=kong-database" \
 -e "KONG_PG_USER=kong" \
 -e "KONG_PG_PASSWORD=kongpass" \
 -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" \
 -e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
 -v /data/UA-block:/usr/local/share/lua/5.1/kong/plugins/UA-block \
 -v /data/constants.lua:/usr/local/share/lua/5.1/kong/constants.lua \
 -p 8000:8000 \
 -p 8443:8443 \
 -p 8001:8001 \
 -p 8444:8444 \
 -p 8002:8002 \
 -p 8445:8445 \
 -p 8003:8003 \
 -p 8004:8004 \
 kong/kong-gateway:2.6.1.0-alpine

UA-ill.jpg

最近忙于处理安全事故,在政府的白帽行动中,发现了误暴露在公网的konga,通过发送post请求,能够成功注册管理员进而管理所有规则。我试过两个版本都成功

postman创建.jpg

屏蔽公网访问避免95%的安全问题!