kubernetes1.6 安装之证书(一)

来源:互联网 发布:idea 查看java源代码 编辑:程序博客网 时间:2024/04/28 17:48

安装kubernetes最麻烦的地方应该就是证书的认证,由于kubernetes1.6后加的RBAC,使得配置更加麻烦了,先是制作证书,如果你对openssl或者easyrsa熟悉的话,同理可以替换,先安装cfssl。

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64chmod +x cfssl_linux-amd64sudo mv cfssl_linux-amd64 /usr/local/bin/cfsslwget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64chmod +x cfssljson_linux-amd64sudo mv cfssljson_linux-amd64 /usr/local/bin/cfssljsonwget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64chmod +x cfssl-certinfo_linux-amd64sudo mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo

关于证书请参考我之前blog

1.生成ca证书

创建ca-config.json

{  "signing": {    "default": {      "expiry": "8760h"    },    "profiles": {      "kubernetes": {        "usages": [            "signing",            "key encipherment",            "server auth",            "client auth"        ],        "expiry": "8760h"      }    }  }}

创建ca-csr.json

{  "CN": "kubernetes",  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "k8s",      "OU": "System"    }  ]}

生成证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

查看ca证书

ls ca*ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

2.生成kubernetes证书

创建kubernetes-csr.json

{  "CN": "kubernetes",  "hosts": [    "127.0.0.1",    "10.39.0.6",    "10.39.0.7",    "10.39.0.17",    "10.39.0.53",    "10.254.0.1",    "kubernetes",    "kubernetes.default",    "kubernetes.default.svc",    "kubernetes.default.svc.cluster",    "kubernetes.default.svc.cluster.local"  ],  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "k8s",      "OU": "System"    }  ]}

这个里面配置的IP,是使用该证书机器的IP,根据自己的环境填写其中10.254.0.1是kubernetes自带的service,执行生成命令:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes

查看生成结果:

 ls kube*kubernetes.csr  kubernetes-csr.json  kubernetes-key.pem  kubernetes.pem

3.创建admin证书

创建admin-csr.json

{  "CN": "admin",  "hosts": [],  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "system:masters",      "OU": "System"    }  ]}

生成证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

查看结果:

ls admin*admin.csr  admin-csr.json  admin-key.pem  admin.pem

4.创建proxy证书

创建kube-proxy-csr.json

{  "CN": "system:kube-proxy",  "hosts": [],  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "k8s",      "OU": "System"    }  ]}

生成证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes  kube-proxy-csr.json | cfssljson -bare kube-proxy

验证

ls kube-proxy*kube-proxy.csr  kube-proxy-csr.json  kube-proxy-key.pem  kube-proxy.pem

5.秘钥分发

mkdir -p /etc/kubernetes/sslcp *.pem /etc/kubernetes/ssl

上面的是要分发到每台机器上面的,但不是每台机器的证书都是一样的,master上面和node上面要分别根据安装的组件去分发。
总的证书概览:
etcd:使用 ca.pem、kubernetes-key.pem、kubernetes.pem;
kube-apiserver:使用 ca.pem、kubernetes-key.pem、kubernetes.pem;
kubelet:使用 ca.pem;
kube-proxy:使用 ca.pem、kube-proxy-key.pem、kube-proxy.pem;
kubectl:使用 ca.pem、admin-key.pem、admin.pem;

0 0