you are better than you think

备忘

last update:

2022年终总结早就写了一部分,趁这两天头疼休息,把一些有意思的点,按照时间顺序整理到博客。

3款vpn客户端的容器化

  • 解决客户端共享的问题
  • 解决硬件绑定问题
  • 解决验证码依赖
  • 避免路由冲突

客户使用的vpn服务商各不相同;有些客户的vpn客户端再第一次登录后会绑定当前硬件;有些客户端除了用户名密码,还强制短信验证码登录。 随着客户越来越多,遇到路由冲突的可能性也会越来越高。

容器化之后,客户端全部扔到一起,每个容器只需要暴露一个端口做代理即可,浏览和登录都可以利用这个端口。

这里配合云厂商的数据热迁移,只用一台低配服务器就可以搞定。除了降本外,容器化客户端这里有个有意思的点,是如何解决只输入一次短信验证码?我的解决方案是通过tcp代理转到ssh 共享的session上。这里跟tcp转unix socket还有一些差异,还需要做一点特殊转换,利用转换就可以在其他机器上通过这个tcp代理登录了。转换细节后面再整理一篇博文介绍。

tcl脚本

  • 支持proxy
  • 支持relay
  • 支持password
  • 支持identity file

大概5年前也简单学习了tcl的语法,整理了一个脚本发布在公司wiki上。后面整理到博客了,见一份登录脚本。 这次升级主要是配合vpn容器化,再加上重新整理,proxy/relay/password/identity file抽成单独的方法,并支持这些方式组合登录。留个坑,后面再发一遍博文单独介绍。

FAQ 随手记

一些采坑或者日常答疑问题的记录,这些问题有时不是很直观,有时排查链路比较长,为了避免反复排查同类问题,简单记录一下。

1.cadvisor如何统计fd数目

cadvisor获取容器cgroup路径下的cgroup.procs 拿到容器内所有进程pid,然后统计所有pid对应/proc/$pid/fd目录数

一 实践

1.1 角色与权限配置

role和serviceaccount均以talk-test为前缀 , namespace为flashtalk

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations: {}
  labels:
    app: n9e
    component: categraf
  name: talk-test-role
rules:
  - apiGroups: [""]
    resources:
      - nodes
      - nodes/metrics
      - services
      - endpoints
      - pods
    verbs: ["get", "list", "watch"]
  - apiGroups:
      - extensions
      - networking.k8s.io
    resources:
      - ingresses
    verbs: ["get", "list", "watch"]
  - nonResourceURLs: ["/metrics", "/metrics/cadvisor"]
    verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations: {}
  labels:
    app: n9e
    component: categraf
  name: talk-test-serviceaccount
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations: {}
  labels:
    app: n9e
    component: categraf
  name: talk-test-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: talk-test-role
subjects:
- kind: ServiceAccount
  name: talk-test-serviceaccount
  namespace: flashtalk