• 非对称加密:一个公钥、一个私钥,公钥加密的文件可以用私钥解密,反之也可以;RSA就是一种常见的非对称加密算法;

另外,私钥一般自己保存,只有自己知道;公钥则是公开的

  • openssl:一个开源的组织、一个开源的软件代码库和密码库工具,囊括了主要的密码算法;

阅读更多

OpenSSL 是一个开源项目,其组成主要包括一下三个组件:

  • openssl:多用途的命令行工具
  • libcrypto:加密算法库
  • libssl:加密模块应用库,实现了ssl及tls

openssl可以实现:秘钥证书管理、对称加密和非对称加密。

阅读更多

AdmissionWebhook

什么是AdmissionWebhook,就要先了解k8s中的admission controller, 按照官方的解释是:

admission controller是拦截(经过身份验证)API Server请求的网关,并且可以修改请求对象或拒绝请求

简而言之,它可以认为是拦截器,类似web框架中的middleware。

k8s默认提供很多内置的admission controller,通过kube-apiserver启动命令参数可以 查看到支持的admission controller plugin有哪些。

阅读更多

Go 提供了 pprof 工具,可以用来做性能分析。pprof 可以读取分析样本的集合,并生成报告以可视化并帮助分析数据。

如何生成分析样本

  • runtime/pprof:采集程序的运行数据进行分析,通过调用如 runtime.StartCPUProfileruntime.StopCPUProfile 等 API 生成分析样本。主要用于本地测试。
  • net/http/pprof:采集 HTTP Server 的运行时数据进行分析,通过 HTTP 服务获取 Profile 分析样本,底层还是调用的 runtime/pprof。主要用于服务器端测试。
  • go test: 通过 go test -bench=. -cpuprofile cpuprofile.out … 生成分析样本,主要用于本地基准测试。

阅读更多

因为 TCP 的三只握手等等原因,建立一个连接是一件成本比较高的行为。所以在一个需要多次与特定实体交互的程序中,就需要维持一个连接池,里面有可以复用的连接可供重复使用。

而维持一个连接池,最基本的要求就是要做到:thread safe(线程安全),尤其是在 Golang 这种特性是 goroutine 的语言中。

阅读更多

用来限制容器对宿主节点的可访问范围,以避免容器非法操作宿主节点的系统级别的内容,使得节点的系统或者节点上其他容器组受到影响。

Kubernetes 提供了三种配置 Security Context 的方法:

  • Container-level Security Context:仅应用到指定的容器
  • Pod-level Security Context:应用到 Pod 内所有容器以及 Volume
  • Pod Security Policies(PSP):应用到集群内部所有 Pod 以及 Volume

阅读更多

BEFORE

向其他服务器发送json数据时,都需要先声明一个bytes缓存,然后通过json库把结构体中的内容mashal成字节流,再通过Post函数发送。
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main

import (
"bytes"
"encoding/json"
"io/ioutil"
"log"
"net/http"
)

func init() {
log.SetFlags(log.Lshortfile)
}

func main() {
cli := http.Client{}

msg := struct {
Name, Addr string
Price float64
}{
Name: "hello",
Addr: "beijing",
Price: 123.56,
}
buf := bytes.NewBuffer(nil)
json.NewEncoder(buf).Encode(msg)
resp, err := cli.Post("http://localhost:9999/json", "application/json", buf)

if err != nil {
log.Fatalln(err)
}

body := resp.Body
defer body.Close()

if body_bytes, err := ioutil.ReadAll(body); err == nil {
log.Println("response:", string(body_bytes))
} else {
log.Fatalln(err)
}
}

阅读更多

基本信息

Centos 7 系统最小化安装,默认配置,是没有创建其他用户的。作为服务器操作系统,为了安全起见,一般是使用一般用户。这就牵涉到用户、用户组的创建以及删除。

此外,CentOS 7 和其他版本的Linux一样,都具有相应用户的配置文件及目录,如下:

1
2
3
4
5
6
7
/etc/passwd         //用户账户信息,可以看出用户名称 
/etc/shadow //用户账户加密后信息,包括但不限于/etc/passwd中的信息
/etc/group //组账户信息,可以看出组名称
/etc/gshadow     //组账户安全信息,包括但不限于/etc/group中的信息
/etc/default/useradd //账户创建时默认值
/etc/skel/ //包含默认文件的目录,具体作用尚不清楚
/etc/login.defs //安全性的默认配置,与上面/etc/default/useradd有区别

阅读更多