记一次压缩问题的排查过程
在对内部OS部门优化的过程中发现,服务器整体利用率很好,编译时可以将服务器所有线程打满,唯一掉链子的时候是解压缩unzip环节,只有单线程升高。简单了解了下,原来已经有了多线程的pigz工具,格式做一些微调即可。详细评测https://zhuanlan.zhihu.com/p/389817246
在翻看docker源码时,发现也会将pigz等压缩工具优先
在对内部OS部门优化的过程中发现,服务器整体利用率很好,编译时可以将服务器所有线程打满,唯一掉链子的时候是解压缩unzip环节,只有单线程升高。简单了解了下,原来已经有了多线程的pigz工具,格式做一些微调即可。详细评测https://zhuanlan.zhihu.com/p/389817246
在翻看docker源码时,发现也会将pigz等压缩工具优先
chatGPT火爆IT圈已经几个星期了,仿佛没用过就被时代所抛弃。了解后发现,使用门槛还是挺高,需要使用海外的手机号注册openai,常见的“机场”都会被屏蔽。偶然发现接口在国内是可以访问的
接下来的事就很简单了,使用django起了个页面,调用接口就可以了,供内网体验
有效代码12行
import openai
openai.api_key = "sk-od9TZTgXar70JLTxf4K1T3BlbkFJlcQjxxxxx"
response = openai.Completion.create(
engine="text-davinci-003", # select model
prompt="人生的意义何在?",
max_tokens=512, # response tokens
temperature=1, # diversity related
top_p=0.75, # diversity related
n=1, # num of response
)
completed_text = response["choices"][0]["text"]
print(completed_text)
需求描述:对某一地址,公司网络解析至172.16.1.1,外部解析到1.1.1.1
现状:公司内无单独的DNS服务器,DHCP分配上海公共DNS 202.96.209.5/133
过程:
云解析是通过识别LOCALDNS的出口IP,来判断访问者来源。
如客户端LOCALDNS支持EDNS
因为云解析DNS支持 edns-client-subnet,所以在获取访问者来源IP时,优先获取 edns-client-subnet 扩展里携带的IP ,如果edns-client-subnet 扩展里存在IP,云解析DNS会以该IP来判断访问者的地理位置 ;如果不存在,则以LocalDNS出口ip来判断访问者的地理位置。
dig +short TXT whoami.ds.akahelp.net 不错的办法,但我的DNS出口IP带ipv6,测试下来不生效
一、一直自诩是柔性的管理者,讲情怀、谈感情、不涉及原则问题都是友善提醒。谈谈近期遇到的一位伙伴小王,他是一个月前加入,原本负责网络的同学匆忙离开。积压的问题越来越多,小王在上手之后不太能搞定,我经常提醒不要成为“沟通黑洞”,发包过去一声不吭。无奈,离开
二、会议效率降低怪象
对待故障要敬畏,要追根因。惩罚机制要恰到好处,避免大家不敢动,更应该把故障看成一份宝贵的经验包;对待历史问题不逃避。我反对把责任甩的一干二净。
正因为我这种“大包大揽”的责任感,质量部门经常莫名其妙定责给我。前天一次故障,其部门自行维护的服务单点宕机,事故前多次反复提醒仍不整改。坑惨一波又一波接任者
三、越来越像项目经理,技术上已得不到成长,离我的“专家”目标渐远
遇到一种场景,某前端服务部署在kubernetes中,有偶发的服务故障。想着健康探针重启就行,忽然想到,如果是重要的线上服务宕机,不查出来心里憋得慌,怎么让服务恢复的同时又能保留现场呢
改当前pod的标签,这样deployment会认为副本消失,自动创建。完美实现老容器保留,业务也及时恢复
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最近忙于处理安全事故,在政府的白帽行动中,发现了误暴露在公网的konga,通过发送post请求,能够成功注册管理员进而管理所有规则。我试过两个版本都成功
屏蔽公网访问避免95%的安全问题!
近一周安全问题频发,明显是针对性的精准渗透行为,钓鱼邮件、ERP服务器被拿下、线上kubernetes集群被拿到部分权限成功部署反弹shell。从入侵轨迹来看,未做破坏但有明显的扫描内网行为,对方对安全、运维都有比较深入的了解。与政府组织的“磐石行动”时间点吻合,推测是对我们的白帽行为
云安全中心提醒还是很精准的,以容器中被运行反弹shell为例。从kubernetes审计日志,“黑客”使用被泄露账号通过暴露在公网的k8s api server进来,在进行了一系列尝试后发现有A命名空间的管理权限,具有onl的namespace 权限,查看了cm发现免密登陆,推送镜像,创建deployment ,镜像中传输数据。已关服务,wifi api server取消外网监听
过程中用到的命令
pstree -p -a #查看
docker inspect #查看pod信息
docker run -it --entrypoint /bin/sh xxxxx #启动疑似容器
查看kubernetes 审计日志
kubernetes get rolebinding -n xxx -o yaml
最新战报:
内部员工已中招,对方社工客服运行了可执行文件,导致在OA内向其他用户发送病毒文件
ERP服务器沦陷,有扫描内网的行为
CRM服务器中毒
🏳️
在一次常态的EMQ集群巡检时发现,有非周期的CPU超过80%毛刺,按照预案新增了如下防火墙规则限流(此规则验证过多次),当天为了方便使用&&将多行语句连接成一行。执行后发现连接数立刻下降,通过监控发现大量连接都变成了non-establish
# 清空INPUT链,标记RELATED,ESTABLISHED,对超出限速的REJECT
iptables -F INPUT
iptables -t filter -A INPUT -p tcp -m multiport -m state --dport 1883,8883 --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport -m state -m limit --dport 1883,8883 --limit 200/second --limit-burst 600 --state NEW -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dport 1883,8883 -j REJECT --reject-with tcp-reset
service iptables save
# 当天为批量执行,简化为一条
iptables -F INPUT && iptables -t filter -A INPUT -p tcp -m multiport -m state --dport 1883,8883 --state RELATED,ESTABLISHED -j ACCEPT && iptables -t filter -A INPUT -p tcp -m multiport -m state -m limit --dport 1883,8883 --limit 200/second --limit-burst 600 --state NEW -j ACCEPT && iptables -t filter -A INPUT -p tcp -m multiport --dport 1883,8883 -j REJECT --reject-with tcp-reset && service iptables save
黄色为non-establish
经排查,在执行标记流量 --state RELATED,ESTABLISHED 会将连接当前状态写入系统内核文件 /proc/net/nf_conntrack,当时每台机器均有100000左右连接,写入磁盘需要2-3秒。用&&将命令合并=没有间隔马上执行下条命令,未写完的连接未标记完成,命中了第三条REJECT tcpreset。陷入取消限速集群扛不住,增加限速丢弃连接死循环,通过SLB限速后,原厂删除集群信息后重建恢复。结论:iptables标记流量需要考虑写盘IO,执行时慢一些
家中台式机win10,连接的小爱蓝牙音响。使用中有个小bug查了好久,当使用chrome播放视频关闭标签页后,电脑声音消失,必须打开蓝牙重新连接。
今天偶然搜到 chrome浏览器 输入: chrome://flags/#hardware-media-key-handling 把Hardware Media Key Handling设置成disable ,重启浏览器.解决
在家隔离的2个多月,重新捡起了运维开发工作
已实现or改进:
待实现or改进
附几张效果图
今天在排错时遇到个奇怪的现象,相同名称添加多条A记录超过512字节时,就会影响部分递归DNS的记录同步。
测试域名 liyang.sunmi.com 添加了36条A记录,大小610字节
必现部分递归DNS无法更新、解析失败
1.查阅了DNS的RFC1035,udp包有512字节的长度限制,超出部份会被截断 原文
2.超过限制后使用tcp协议进行解析
3.公共DNS中,只有114.114.114.114会把超长结果截断在509字节,其他DNS都会原样返回
疫情在家一个月了,记录一下
近期接到个古怪需求,历史原因有部分设备在代码中访问废弃接口uat.api.xxx.com,现有接口为 api.uat.xxx.com(顺序变化)。老设备升级rom版本较繁琐,网关不想动了,在外侧加了台nginx转发
# 通过rewrite301跳转
server {
listen 80;
server_name uat.api.xxx.com;
location / {
root /usr/share/nginx/html;
if ( $host ~* uat.api.xxx.com ){
rewrite .* http://api.uat.xxx.com$request_uri permanent;
}
}
}
# 方法2
在location中加,更优
proxy_set_header Host api.uat.xxx.com;
proxy_pass https://api.uat.xxx.com;
背景:海外用户投诉我们一个边缘功能失效,定位到程序假死。随着各种复盘会,把这件小事无限放大。
难点:探针改造复杂,尽管已经有了基础的http接口检测,但针对服务连接各种中间件等场景无法一一覆盖
在研发根治此问题前,使用“熔断”来降低此类故障的影响
熔断,是创建弹性微服务应用程序的重要模式。熔断能够使您的应用程序具备应对来自故障、潜在峰值和其他未知网络因素影响的能力
中间方案,通过网关日志,假死会有504超时的信息,SLS已支持触发各种钩子,逐个重启故障服务的pod
更优istio方案,使用VirtualService配合DestinationRule对超时或者错误重试,并将故障pod踢出
环境:
from flask import Flask
import time
app = Flask(__name__)
@app.route("/", methods=["GET"])
def index():
time.sleep(5)
return "Hello World Pyvo 2!"istio中配置如下
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: backend-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: vs-backend-flask
spec:
hosts:
- "*"
gateways:
- backend-gateway
http:
- match:
- uri:
prefix: /flask
rewrite:
uri: /
route:
- destination:
host: backend-flask
port:
number: 80
retries:
attempts: 3
perTryTimeout: 2s
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: dr-backend-flask
spec:
host: backend-flask
trafficPolicy:
outlierDetection:
consecutive5xxErrors: 1
interval: 10s
baseEjectionTime: 30s
效果如图,访问出现上游服务超时错误后,在30秒内不会再调度到故障节点
网购、中介、挪车等不想留真实号码的场景,可以用阿里小号。通过软件方法绑定一个真实号码,可以呼入呼出收发短信。以往的¥40/年,忽然涨价到¥120/年。
咸鱼买到个方法分享出来
【淘宝】https://m.tb.cn/h.fn38Yzz?sm=250fe0?tk=XfzD24SBX0s「阿里小号.普通小号卡券(仅供已有联通小号用户充值使用)」
点击链接直接打开,反馈后就能以20每年的价格购买5年了
文化差异
一副人行道上的镶嵌画。描绘的是年轻的许拉斯(Hylas)被仙女绑架,因为当她们看到他从泉水里取水时,便爱上了他
将自己敬重、喜爱的神镶嵌在人行道,天天被人“踩踏”。
又是一个在图书馆“消磨”的上午,昨晚追了B站的“房车旅行生活”,缓了一晚上才从梦中走出来,羡慕当今有想法的年轻人,敢于在人生的上半段选择,看着他们在自媒体从业、创业、裸辞、购车、改装、出发种种,心中的小火苗被勾的险些着起来。
回归现实,到图书馆十点,想看的基本技术类书籍都找不到,翻到贺嘉的《表达力》,摘几段有意思的
消除演讲紧张的12种方法(入门),演讲前紧张,大家只会说深呼吸,收获的回复就可能像女朋友不舒服时“多喝热水”得到的反馈一样,只有慢慢的白眼。。。
上台前
- 准备-准备-充分准备
- 试讲至少3遍,提前到现场彩排
- 充分的睡眠
- 在现场听众中提前认识一些朋友,起码在冷场时有他们和你互动
- 和亲戚朋友打个电话,聊聊接下来的演讲。和熟人谈论演讲内容能让自己情绪放松
- 在厕所里,对自己说“我是最棒的”,充分的心理暗示
上台后
- 把观众想成冬瓜
- 目光看向稍远处,不直视听众
- 双手叉腰2分钟。这个肢体动作可以帮助我们提高激素分泌,帮我们更好的消除紧张感
- 紧张的时候喝口水,用这个时间想词。带瓶水
- 通过发气泡音来放松自己的心情。啥是气泡音特意查了下,打哈欠时像青蛙一个个吐出的声,存疑,这有啥用
- 带一个熟悉的道具。比如遥控笔、穿一套最好看的西装
我加了一条,不要把自己放在被评价的位置,重视的前提下爱咋咋,首先要对自己肯定!不断的给自己暗示,大家都是芸芸众生,除了你自己,不会有人记得你的演讲。不要和自己过不去。
水一篇,公司从前年上thoughts后,编辑md文档还是很爽的,但也仅限于标题、分割、缩进、引用,今天花了点时间尝试了所有md支持的格式,原来各个编辑器还是有差异,常用的typora居然收费了。
有道云笔记默认的md格式就很好用了。
花10分钟学习工具使用,方便一生 :smile:
《2002年的第一场雪》已经是20年前的歌了,还真挺让人意外的。小朋友2岁半了,从一出生的惊喜、无感、逃避、苦闷、烦恼、和解、欣喜、期盼,体会了当父亲的不易与责任。
由于工作的关系,每天到家都20:00以后了,吃个热乎饭(在这要感谢我丈母娘,帮我带娃还负责一家人晚上的伙食),陪小朋友玩1小时,给他讲故事,有时还不爱听我讲,必须找妈妈。我太太在教育方面还是非常用心,给娃清淡饮食,不抱自然睡习惯 - -。小朋友各种翻腾、找借口,用着仅会的几个词:“楼上吵”“妈妈抱”折腾到十点半,有时甚至十一点。
22年给自己定两个目标,首先是在口语上要进步,不能再哑巴英语。去年的目标完成度一般,起码阅读英文文档障碍不大。基本每天都能坚持15个单词,百词斩中《专升本》程度已经完成(顺便说一下,我也是以优异的成绩考上了大专:)相应的,职场软技能也要提升;其次,在技术层面也要投精力,暂定的课题是API网关相关,输出文档或者课程。
就俩吧,工作已经很忙了!与君共勉