How to configure certs for HA cluster for v1.15.0

In a Kubernetes cluster, there are several different components, such as etcd, api-service, scheduler, controller, Kube-proxy, Kubelet etc, lots of communication will happen among all these components, its a very important to make sure all these communication secured, so setup tls certs to secure all these communication is another important task when creating a K8s cluster, by default, K8s will generate tls certs automatically with only 1 year duration, this means 1 year later, all these certs will be expired, we need to follow some process to renew these certs otherwise your K8s cluster will stop working. in this blog, I will describe how to use cfssl tool to generate tls certs and use these certs for new K8s cluster.

install cfssl:

    curl -s -L -o /bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 
    curl -s -L -o /bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 
    curl -s -L -o /bin/cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 
    chmod +x /bin/cfssl*

Write configuration file:

    CA cert configuration
    root@ppydalbik0103:/etc/kubernetes/certs# more ca-config.json
    {
        "signing": {
            "default": {
                "expiry": "87600h"
            },
            "profiles": {
                "server": {
                    "expiry": "87600h",
                    "usages": [
                        "signing",
                        "key encipherment",
                        "server auth"
                    ]
                },
                "client": {
                    "expiry": "87600h",
                    "usages": [
                        "signing",
                        "key encipherment",
                        "client auth"
                    ]
                },
                "peer": {
                    "expiry": "87600h",
                    "usages": [
                        "signing",
                        "key encipherment",
                        "server auth",
                        "client auth"
                    ]
                },
                "kubernetes": {
                    "expiry": "87600h",
                    "usages": [
                        "signing",
                        "key encipherment",
                        "server auth",
                        "client auth"
                    ]                
                }
            }
        }
    }
    
    ca cert csr configuration(certificate signing request)
    root@ppydalbik0103:/etc/kubernetes/certs# more ca-csr.json
    {
        "CN": "Kubernetes",
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
              "C": "US",
              "ST": "Dallas, TX",
              "L": "Dallas, TX",
              "O": "k8s",
              "OU": "System"
            }
        ]
    }
    
    kubernetes certs csr file
    root@ppydalbik0103:/etc/kubernetes/certs# more certs-csr.json
   {
  "CN": "kubernetes",
  "hosts": [
  "127.0.0.1",
  "::1",
  "10.94.xxx.xxx",
  "10.95.xxx.xxx",
  "10.94.xxx.xxx",
  "10.94.xxx.xxx",
  "172.17.0.1",
  "ppydalbik0101.xxx.xxx.xxx.com",
  "ppydalbik0102.xxx.xxx.xxx.com",
  "ppydalbik0103.xxx.xxx.xxx.com",
  "ppydalbik0104.xxx.xxx.xxx.com",
  "ppydalbik0101",
  "ppydalbik0102",
  "ppydalbik0103",
  "ppydalbik0104",
  "localhost",
  "kubernetes",
  "kubernetes.default",
  "kubernetes.default.svc",
  "kubernetes.default.svc.cluster",
  "kubernetes.default.svc.cluster.local"
],    
"key": {
    "algo": "rsa",
    "size": 2048
},
"names": [
    {
      "C": "US",
      "ST": "Dallas, TX",
      "L": "Dallas, TX",
      "O": "k8s",
      "OU": "System"
    }
]
}

generate CA certs:

    cfssl gencert -initca ca-csr.json | cfssljson -bare ca
    cfssl gencert -initca ca-csr.json | cfssljson -bare front-proxy-ca
    cfssl gencert -initca ca-csr.json | cfssljson -bare etcd-ca
    
    
    ##generate all the srever certs:
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem --config=ca-config.json -profile=server certs-csr.json | cfssljson -bare apiserver
    cfssl gencert -ca=etcd-ca.pem -ca-key=etcd-ca-key.pem --config=ca-config.json -profile=kubernetes certs-csr.json | cfssljson -bare server
    cfssl gencert -ca=etcd-ca.pem -ca-key=etcd-ca-key.pem --config=ca-config.json -profile=peer certs-csr.json | cfssljson -bare peer
    
    ##generate all the clients certs:
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem --config=ca-config.json -profile=client certs-csr.json | cfssljson -bare apiserver-kubelet-client
    cfssl gencert -ca=front-proxy-ca.pem -ca-key=front-proxy-ca-key.pem --config=ca-config.json -profile=client certs-csr.json | cfssljson -bare front-proxy-client
    cfssl gencert -ca=etcd-ca.pem -ca-key=etcd-ca-key.pem --config=ca-config.json -profile=client certs-csr.json | cfssljson -bare apiserver-etcd-client
    cfssl gencert -ca=etcd-ca.pem -ca-key=etcd-ca-key.pem --config=ca-config.json -profile=client certs-csr.json | cfssljson -bare healthcheck-client
                    
    ##deploy new certs to kuberenetes certs folder:
    mkdir -p /etc/kubernetes/pki/etcd
    cp /etc/kubernetes/certs/front-proxy-client.pem /etc/kubernetes/pki/front-proxy-client.crt
    cp /etc/kubernetes/certs/front-proxy-client-key.pem /etc/kubernetes/pki/front-proxy-client.key
    
    cp /etc/kubernetes/certs/front-proxy-ca.pem /etc/kubernetes/pki/front-proxy-ca.crt
    cp /etc/kubernetes/certs/front-proxy-ca-key.pem /etc/kubernetes/pki/front-proxy-ca.key
    
    cp /etc/kubernetes/certs/apiserver-kubelet-client.pem /etc/kubernetes/pki/apiserver-kubelet-client.crt
    cp /etc/kubernetes/certs/apiserver-kubelet-client-key.pem /etc/kubernetes/pki/apiserver-kubelet-client.key
    
    cp /etc/kubernetes/certs/apiserver.pem /etc/kubernetes/pki/apiserver.crt
    cp /etc/kubernetes/certs/apiserver-key.pem /etc/kubernetes/pki/apiserver.key
    
    cp /etc/kubernetes/certs/apiserver-etcd-client.pem /etc/kubernetes/pki/apiserver-etcd-client.crt
    cp /etc/kubernetes/certs/apiserver-etcd-client-key.pem /etc/kubernetes/pki/apiserver-etcd-client.key
    
    cp /etc/kubernetes/certs/ca.pem /etc/kubernetes/pki/ca.crt
    cp /etc/kubernetes/certs/ca-key.pem /etc/kubernetes/pki/ca.key
    
    cp /etc/kubernetes/certs/etcd-ca.pem /etc/kubernetes/pki/etcd/ca.crt
    cp /etc/kubernetes/certs/etcd-ca-key.pem /etc/kubernetes/pki/etcd/ca.key
    
    cp /etc/kubernetes/certs/healthcheck-client.pem /etc/kubernetes/pki/etcd/healthcheck-client.crt
    cp /etc/kubernetes/certs/healthcheck-client-key.pem /etc/kubernetes/pki/etcd/healthcheck-client.key
    
    cp /etc/kubernetes/certs/server.pem /etc/kubernetes/pki/etcd/server.crt
    cp /etc/kubernetes/certs/server-key.pem /etc/kubernetes/pki/etcd/server.key
    
    cp /etc/kubernetes/certs/peer.pem /etc/kubernetes/pki/etcd/peer.crt
    cp /etc/kubernetes/certs/peer-key.pem /etc/kubernetes/pki/etcd/peer.key

copy all the certs to all master nodes:

root@ppydalbik0102:/etc/kubernetes/pki# ls -lt
total 52
drwx------ 2 root root 4096 Jul 19 02:59 etcd
-rw------- 1 root root 1679 Jul 19 02:59 ca.key
-rw------- 1 root root 1375 Jul 19 02:59 ca.crt
-rw------- 1 root root 1675 Jul 19 02:59 apiserver-etcd-client.key
-rw------- 1 root root 1838 Jul 19 02:59 apiserver-etcd-client.crt
-rw------- 1 root root 1679 Jul 19 02:59 apiserver.key
-rw------- 1 root root 1838 Jul 19 02:59 apiserver.crt
-rw------- 1 root root 1838 Jul 19 02:59 apiserver-kubelet-client.crt
-rw------- 1 root root 1675 Jul 19 02:59 apiserver-kubelet-client.key
-rw------- 1 root root 1679 Jul 19 02:59 front-proxy-ca.key
-rw------- 1 root root 1375 Jul 19 02:59 front-proxy-ca.crt
-rw------- 1 root root 1679 Jul 19 02:59 front-proxy-client.key
-rw------- 1 root root 1838 Jul 19 02:59 front-proxy-client.crt
root@ppydalbik0102:/etc/kubernetes/pki# cd etcd
root@ppydalbik0102:/etc/kubernetes/pki/etcd# ls -lt
total 32
-rw------- 1 root root 1679 Jul 19 02:59 peer.key
-rw------- 1 root root 1850 Jul 19 02:59 peer.crt
-rw------- 1 root root 1675 Jul 19 02:59 server.key
-rw------- 1 root root 1838 Jul 19 02:59 server.crt
-rw------- 1 root root 1675 Jul 19 02:59 healthcheck-client.key
-rw------- 1 root root 1838 Jul 19 02:59 healthcheck-client.crt
-rw------- 1 root root 1375 Jul 19 02:59 ca.crt
-rw------- 1 root root 1675 Jul 19 02:59 ca.key

then we can use Kubeadm to initialize cluster.

kubeadm init --config=/etc/kubernetes/k8s-cluster-bi.yaml --upload-certs

check certs status:

    kubeadm alpha certs check-expiration
    CERTIFICATE                EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
    admin.conf                 Jul 17, 2020 08:46 UTC   364d            no      
    apiserver                  Jul 15, 2029 07:53 UTC   9y              no      
    apiserver-etcd-client      Jul 15, 2029 08:38 UTC   9y              no      
    apiserver-kubelet-client   Jul 15, 2029 08:25 UTC   9y              no      
    controller-manager.conf    Jul 17, 2020 08:46 UTC   364d            no      
    etcd-healthcheck-client    Jul 15, 2029 08:41 UTC   9y              no      
    etcd-peer                  Jul 15, 2029 08:40 UTC   9y              no      
    etcd-server                Jul 15, 2029 08:39 UTC   9y              no      
    front-proxy-client         Jul 15, 2029 08:35 UTC   9y              no      
    scheduler.conf             Jul 17, 2020 08:46 UTC   364d            no   

attention there are 3 client certs with 1 year expiration in .conf files, these client certs will be refreshed automatically when they will be expired.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值