外部访问k8s里的服务,都是直接以http方式进行的,缺少TLS安全
生成并信任自签名证书
首先这里生成自签名的服务器证书,官方介绍了easyrsa, openssl 、 cfssl三个工具,这里使用cfssl
安装CFSSL
直接使用二进制源码包安装
1 2 3 4 5 6 7 8 9 10 11
| wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 chmod +x cfssl_linux-amd64 mv cfssl_linux-amd64 /usr/sbin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 chmod +x cfssljson_linux-amd64 mv cfssljson_linux-amd64 /usr/sbin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 chmod +x cfssl-certinfo_linux-amd64 mv cfssl-certinfo_linux-amd64 /usr/sbin/cfssl-certinfo
|
生成默认配置文件
1 2
| cfssl print-defaults config > config.json cfssl print-defaults csr > csr.json
|
生成自定义的config.json文件
1
| cp config.json ca-config.json
|
生成ca和server的证书请求json文件
1 2
| cp csr.json ca-csr.json cp csr.json server-csr.json
|
编辑ca-config.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| { "signing": { "default": { "expiry": "168h" }, "profiles": { "k8s-local": { "expiry": "8760h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } }
|
编辑ca-csr.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "CN": "k8s-local", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "GuangDong", "L": "Shenzhen", "O": "my self signed certificate", "OU": "self signed" } ] }
|
编辑server-csr.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| { "CN": "k8s.local", "hosts": [ "127.0.0.1", "*.k8s.local" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "GuangDong", "L": "Shenzhen", "O": "my self signed certificate", "OU": "self signed" } ] }
|
生成CA证书及服务器证书
1 2
| cfssl gencert -initca ca-csr.json | cfssljson -bare ca cfssl gencert -ca=ca.pem -ca-key=ca-key.pem --config=ca-config.json -profile=k8s-local server-csr.json | cfssljson -bare server
|
得到ca.pem,server-key.pem,server.pem三个证书文件,其中ca.pem是ca的证书,server-key.pem是服务器证书的密钥,server.pem是服务器证书。
在k8s里使用自签名证书
创建默认的tls secret
1
| kubectl -n kube-system create secret tls default-tls-cert --key=server-key.pem --cert=server.pem
|