zoukankan      html  css  js  c++  java
  • K8S从入门到放弃系列-(2)集群根证书准备

    k8s从1.8版本开始,集群中各个组件需要使用TLS证书对通信进行加密,每个k8s集群都需要有独立的CA证书体系,这里我们采用比较常用的CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。
    使用证书的组件如下:
    • etcd:使用 ca.pem、etcd-key.pem、etcd.pem;(etcd对外提供服务、节点间通信(etcd peer)使用同一套证书)
    • kube-apiserver:使用 ca.pem、ca-key.pem、kube-apiserver-key.pem、kube-apiserver.pem;
    • kubelet:使用 ca.pem ca-key.pem;
    • kube-proxy:使用 ca.pem、kube-proxy-key.pem、kube-proxy.pem;
    • kubectl:使用 ca.pem、admin-key.pem、admin.pem;
    • kube-controller-manager:使用 ca-key.pem、ca.pem、kube-controller-manager.pem、kube-controller-manager-key.pem;
    • kube-scheduler:使用ca-key.pem、ca.pem、kube-scheduler-key.pem、kube-scheduler.pem;

    1)安装cfssl

    生成证书时可在任一节点完成,这里在k8s-master01主机执行,证书只需要创建一次即可,以后在向集群中添加新节点时只要将 /etc/kubernetes/ssl 目录下的证书拷贝到新节点上即可。
    [root@k8s-master01 ~]# mkdir k8s/cfssl -p
    [root@k8s-master01 ~]# cd k8s/cfssl/
    [root@k8s-master01 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
    [root@k8s-master01 cfssl]# chmod +x cfssl_linux-amd64
    [root@k8s-master01 cfssl]# cp cfssl_linux-amd64 /usr/local/bin/cfssl
    [root@k8s-master01 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
    [root@k8s-master01 cfssl]# chmod +x cfssljson_linux-amd64
    [root@k8s-master01 cfssl]# cp cfssljson_linux-amd64 /usr/local/bin/cfssljson
    [root@k8s-master01 cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
    [root@k8s-master01 cfssl]# chmod +x cfssl-certinfo_linux-amd64
    [root@k8s-master01 cfssl]# cp cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
    2)创建CA根证书

    由于维护多套CA实在过于繁杂,这里CA证书用来签署集群其它组件的证书
    这个文件中包含后面签署etcd、kubernetes等其它证书的时候用到的配置
    [root@k8s-master01 ~]# vim /opt/k8s/certs/ca-config.json
    {
        "signing": {
          "default": {
            "expiry": "87600h"
        },
        "profiles": {
          "kubernetes": {
            "usages": [
                "signing",
                "key encipherment",
                "server auth",
                "client auth"
            ],
            "expiry": "87600h"
          }
        }
      }
    }
    • ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
    • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
    • server auth:表示client可以用该 CA 对server提供的证书进行验证;
    • client auth:表示server可以用该CA对client提供的证书进行验证;
    • expiry: 表示证书过期时间,我们设置10年,当然你如果比较在意安全性,可以适当减少
    3) 创建 CA 证书签名请求模板

    [root@k8s-master01 ~]# vim /opt/k8s/certs/ca-csr.json
    {
      "CN": "kubernetes",
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "ShangHai",
          "L": "ShangHai",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    4)生成CA证书、私钥和csr证书签名请求
    该命令会生成运行CA所必需的文件ca-key.pem(私钥)和ca.pem(证书),还会生成ca.csr(证书签名请求),用于交叉签名或重新签名。
    [root@k8s-master01 ~]# cd /opt/k8s/certs/
    [root@k8s-master01 certs]# cfssl gencert -initca /opt/k8s/certs/ca-csr.json | cfssljson -bare ca
    2019/04/22 15:14:58 [INFO] generating a new CA key and certificate from CSR
    2019/04/22 15:14:58 [INFO] generate received request
    2019/04/22 15:14:58 [INFO] received CSR
    2019/04/22 15:14:58 [INFO] generating key: rsa-2048
    2019/04/22 15:14:58 [INFO] encoded CSR
    2019/04/22 15:14:58 [INFO] signed certificate with serial number 546879892516414984619692113039590478695154941398

    5)分发证书

     可采用scp直接传输到所有节点,我这里还是采用ansible

    [root@k8s-master01 certs]# ansible k8s-all -m copy -a 'src=/opt/k8s/certs/ca.csr dest=/etc/kubernetes/ssl/'
    [root@k8s-master01 certs]# ansible k8s-all -m copy -a 'src=/opt/k8s/certs/ca-key.pem dest=/etc/kubernetes/ssl/'
    [root@k8s-master01 certs]# ansible k8s-all -m copy -a 'src=/opt/k8s/certs/ca.pem dest=/etc/kubernetes/ssl/'

  • 相关阅读:
    react入门教程 |菜鸟教程
    React 组件构造方法: ES5 (createClass) 还是 ES6 (class)?
    代码设置LinearLayout的高度
    android调用webservice发送header身份验证不成功
    GridView中item获得焦点放大缩小
    关于url从服务器上获取图片资源
    Android中删除照片操作
    android采用Ksoap2访问webservice,AndroidHttpTransport call方法异常
    创建新的Android项目,Eclipse自动创建的appcompat内容
    Windroy、Windroye、Bluestacks运行Android实现原理
  • 原文地址:https://www.cnblogs.com/tchua/p/10750571.html
Copyright © 2011-2022 走看看