zoukankan      html  css  js  c++  java
  • k8s 三节点签发所需证书

      准备三台主机:

           192.168.1.71

           192.168.1.72

           192.168.1.73

    Step1:

      在第一台  192.168.1.71 签发证书  也可以在其它机器进行签发证书

           创建一个保存证书的目录 最好在 /etc/ 下

      mkdir -pv /etc/ssl/k8s

      cd /etc/ssl/k8s

      创建ca.key

      openssl genrsa -out ca.key  3072

      编辑ca证书签发key给k8s准备的配置文件

      vi ca.cnf

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    
    [ v3_req ]
    keyUsage = critical, cRLSign, keyCertSign, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth, clientAuth
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true, pathlen:2

      使用ca配置文件签发 ca 根证书 ca.pem

      openssl req -x509 -new -nodes -key ca.key -days 1095 -out ca.pem -subj "/CN=kubernetes/OU=System/C=CN/ST=Beijing/L=Beijing/O=k8s" -config ca.cnf -extensions v3_req

      

      签发 API 证书

      vim api-server.cnf  

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth, clientAuth
    #subjectKeyIdentifier = hash
    #authorityKeyIdentifier = keyid:always,issuer
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 10.0.0.1
    IP.5 = 192.168.1.70
    IP.2 = 192.168.1.71
    IP.3 = 192.168.1.72
    IP.4 = 192.168.1.73
    DNS.1 = kubernetes
    DNS.2 = kubernetes.default
    DNS.3 = kubernetes.default.svc
    DNS.4 = kubernetes.default.svc.cluster
    DNS.5 = kubernetes.default.svc.cluster.local

      配置文件简单讲解 

      10.0.0.1        是集群使用的ip这个ip地址段可以容纳40多万ip

        192.168.1.70 是后期集群高可用阶段使用的虚拟vip 配合keepalive进行使用

      开始生成api.key

      3072指的是长度

      openssl genrsa -out apiserver.key 3072

      生成api请求证书apiserver.csr

      openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=kubernetes/OU=System/C=CN/ST=Beijing/L=Beijing/O=k8s" -config api-server.cnf

      签发证书之前 修改 api-server.cnf 配置文件 去掉注释的2行

      

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth, clientAuth
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 10.0.0.1
    IP.5 = 192.168.1.70
    IP.2 = 192.168.1.71
    IP.3 = 192.168.1.72
    IP.4 = 192.168.1.73
    DNS.1 = kubernetes
    DNS.2 = kubernetes.default
    DNS.3 = kubernetes.default.svc
    DNS.4 = kubernetes.default.svc.cluster
    DNS.5 = kubernetes.default.svc.cluster.local

      开始签发证书 最后 -days 1095 是证书有效期限 如果是企业使用最好 数字设置的大点 避免以后出问题

      openssl x509 -req -in apiserver.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out apiserver.pem -days 1095 -extfile api-server.cnf -extensions v3_req

      查看 apiserver.pem 证书信息

      openssl x509 -noout -text -in apiserver.pem

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                c3:09:20:fd:72:67:da:7a
        Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN=kubernetes, OU=System, C=CN, ST=Beijing, L=Beijing, O=k8s
            Validity
                Not Before: May 18 05:51:47 2019 GMT
                Not After : May 17 05:51:47 2022 GMT
            Subject: CN=kubernetes, OU=System, C=CN, ST=Beijing, L=Beijing, O=k8s
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (3072 bit)
                    Modulus:
                        00:cc:65:a0:e6:97:64:51:f7:42:c1:c8:bc:43:89:
                        63:6e:9d:1d:23:9b:a9:0a:e3:e6:a5:0e:7a:1d:a9:
                        3c:dc:5d:0f:c8:99:f5:1b:39:ad:39:f2:f7:d3:c9:
                        66:47:33:01:5d:db:53:5a:23:e2:49:75:d7:4a:61:
                        bb:8b:c3:a3:b2:00:9a:01:6f:98:26:4e:cb:16:b3:
                        38:f7:3b:be:e5:b5:9e:e9:0c:e5:c7:d8:bb:8b:a4:
                        3d:f8:99:e0:34:93:0c:48:d7:c7:c2:72:63:42:2f:
                        ff:94:c8:d0:47:c2:3a:56:fd:ae:79:b7:cb:8e:72:
                        c6:8b:6a:33:be:34:82:bd:6e:1e:b9:23:1b:01:c8:
                        c5:db:11:3e:5f:c6:66:a2:f6:6a:c0:67:0b:b9:8a:
                        36:2a:ce:07:54:08:a9:50:1e:bc:52:cc:9b:af:ee:
                        1d:f4:b8:15:77:a1:4d:75:e4:9d:14:35:8a:58:ed:
                        77:d6:e3:2f:c8:e2:14:9c:9e:75:ea:82:b9:e4:4f:
                        3a:7b:88:d2:93:39:37:b9:c5:74:cd:74:5f:47:0c:
                        4d:fc:a8:c0:af:f5:4c:c9:c5:7f:bb:4e:57:58:36:
                        12:bc:54:54:db:bd:af:3f:8f:e6:8b:ca:34:50:26:
                        6f:d2:8c:b6:ee:cf:2d:d2:62:ae:32:26:8d:da:8a:
                        d0:a3:7c:40:60:97:0c:b4:de:4c:77:9d:28:3e:73:
                        1f:91:23:76:5b:3b:d9:74:85:fd:69:d4:b3:fd:1d:
                        5a:8b:38:35:51:07:5a:09:c8:53:67:89:f8:e6:d1:
                        99:63:7d:d9:7f:a9:ca:49:ab:a6:80:14:68:cb:8d:
                        4c:b5:42:5e:24:f3:2f:54:04:3f:be:a8:9d:65:84:
                        46:ed:6a:85:7d:6a:b6:62:4a:69:05:0d:da:2f:92:
                        85:bd:de:18:b4:48:4b:fc:3f:26:49:92:17:47:91:
                        dd:b5:7a:4d:e3:9e:c5:1f:39:58:bd:52:c3:05:65:
                        0b:4e:f0:2b:2d:b6:af:65:1a:13
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: 
                    TLS Web Server Authentication, TLS Web Client Authentication
                X509v3 Subject Key Identifier: 
                    D8:15:2E:2C:D1:28:59:EC:0C:97:6E:85:5F:3D:8B:90:7F:FD:40:1F
                X509v3 Authority Key Identifier: 
                    keyid:B8:73:3B:D4:66:50:67:B9:3C:E1:3C:31:AD:91:CD:4D:94:6E:CA:A5
    
                X509v3 Subject Alternative Name: 
                    IP Address:10.0.0.1, IP Address:192.168.1.70, IP Address:192.168.1.71, IP Address:192.168.1.72, IP Address:192.168.1.73, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster, DNS:kubernetes.default.svc.cluster.local
        Signature Algorithm: sha256WithRSAEncryption
             b1:db:2f:81:48:01:83:16:2b:78:0e:ad:25:cd:46:e8:bd:f7:
             ba:5c:7b:a8:74:a9:d3:9c:1b:0b:48:06:68:84:b6:57:99:2f:
             c5:33:5f:5e:15:79:de:74:87:15:bc:54:be:a9:cf:a9:5a:cc:
             b6:3e:61:34:c1:f1:2a:94:c3:89:a1:06:67:4c:d3:84:fa:89:
             1c:df:8d:d5:38:d8:5b:d7:0b:7e:da:aa:fb:7c:64:e2:68:21:
             15:b8:7f:35:7a:58:48:7d:f6:89:4b:f8:84:44:96:45:9d:e8:
             7f:e0:cf:a2:21:ab:29:94:1e:aa:0e:5d:ea:44:69:5c:ff:4a:
             5f:f2:f1:bf:0b:1c:f0:95:c6:9b:1a:20:d5:fb:33:42:0a:fc:
             17:c5:ba:76:fe:bd:12:ac:9a:8c:c7:2b:0e:ae:b1:f1:30:43:
             ea:8d:8b:c8:b3:45:98:f6:d8:3d:71:b3:cd:7e:f7:f6:92:1c:
             1a:c8:69:5e:67:ad:c5:a6:13:1a:e4:cb:50:ca:a6:96:56:4e:
             ed:50:4f:6a:0f:de:c8:3b:b6:e5:15:e2:b6:53:48:ab:9a:c6:
             68:18:2d:ac:1c:90:a9:f2:4d:c0:44:6c:ed:48:9e:d7:72:1c:
             e3:49:f5:3d:33:67:6c:24:ed:6c:6e:07:0d:59:dc:59:ec:fa:
             76:ae:ff:40:ad:ea:b2:d4:aa:42:19:16:67:06:07:05:59:c0:
             1e:e5:5a:b8:03:c5:1c:5c:18:6d:40:41:50:9e:69:fd:90:f4:
             ab:5e:91:2a:6b:a0:64:c9:39:9d:f8:f2:04:1f:f4:35:fb:58:
             08:17:f7:17:4c:41:30:95:98:a7:e3:59:7c:a4:60:56:a0:01:
             e9:d3:6f:93:76:6f:09:38:35:37:4d:15:02:f8:e6:9b:0f:1d:
             f7:1b:7b:bc:4a:e8:ed:44:1a:ba:84:e1:13:da:cb:06:6d:b9:
             96:43:f3:a2:d8:25:20:01:51:83:99:bd:f7:5f:b1:5d:52:9f:
             32:5c:b0:4a:40:1c

      从上面可以看出这个证书对哪些ip是有效的

      签发 kubelet 证书

      配置签发 kubelet 证书文件 一台一台进行添加

      vi client.cnf

      从下面可以看出证书只对 192.168.1.71 有效

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 192.168.1.71

      首先设置一个变量 方便点 证书主要以 ip 地址后 2 段记名称

      fn=1-71

      生成 kubelet-$fn.key 

      openssl genrsa -out kubelet-$fn.key 3072

      生成证书请求

      openssl req -new -key kubelet-$fn.key -out kubelet-$fn.csr -subj "/CN=admin/OU=System/C=CN/ST=Beijing/L=Beijing/O=system:masters" -config client.cnf

      签发证书

      openssl x509 -req -in kubelet-$fn.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out kubelet-$fn.pem -days 1095 -extfile client.cnf -extensions v3_req

      

      使用同样的方法给 以下 2 台主机进行签发证书

      192.168.1.72

      192.168.1.73

      修改 client.cnf 配置文件 ip 地址

      vi client.cnf

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 192.168.1.72

      修改 fn 变量标签

      fn=1-72

      同样执行以下命令

      openssl genrsa -out kubelet-$fn.key 3072

      openssl req -new -key kubelet-$fn.key -out kubelet-$fn.csr -subj "/CN=admin/OU=System/C=CN/ST=Beijing/L=Beijing/O=system:masters" -config client.cnf

      openssl x509 -req -in kubelet-$fn.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out kubelet-$fn.pem -days 1095 -extfile client.cnf -extensions v3_req

      

      使用同样的方法修改 client.cnf 配置文件 fn 变量 签发 192.168.1.73 证书

      vi client.cnf

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 192.168.1.73

      fn=1-73

      重新执行上面的3条命令 签发证书

      查看当前目录 因证书太多 容易整乱 创建相对应目录保存证书文件

      pwd

      /etc/ssl/k8s

      mkdir apiserver

      mkdir kubelet

      mv api-server.cnf apiserver.* apiserver

      mv kubelet-1-7* kubelet

      

      签发kube-proxy证书 基本和上面的操作类似 但是名称变了

      重新设置变量 fn

      fn=1-71

      修改 client.cnf  配置文件

      vi client.cnf

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 192.168.1.71

      生成kube-proxy-$fn.key

      openssl genrsa -out kube-proxy-$fn.key 3072

      生成证书请求

      openssl req -new -key kube-proxy-$fn.key -out kube-proxy-$fn.csr -subj "/CN=system:kube-proxy/OU=System/C=CN/ST=Beijing/L=Beijing/O=k8s" -config client.cnf

      签发证书

      openssl x509 -req -in kube-proxy-$fn.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out kube-proxy-$fn.pem -days 1095 -extfile client.cnf -extensions v3_req

      同样 修改 client.cnf 配置文件 ip  fn 变量 给 72 73 主机签发kube-proxy证书

      之后创建 kube-proxy 目录保存刚才创建的 kube-proxy 证书

      mkdir kube-proxy

      mv kube-proxy-1-7* kube-proxy

      

      签发etcd证书文件 

      首先签发 192.168.1.71 然后用同样的方法 修改配置文件签发第二台和第三台证书

      编辑 client.cnf 文件  

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 192.168.1.71

      设置 fn 变量

      fn=1-71

      生成etcd-$fn.key

      openssl genrsa -out etcd-$fn.key 3072

      生成证书请求

      openssl req -new -key etcd-$fn.key -out etcd-$fn.csr -subj "/CN=etcd/OU=System/C=CN/ST=Beijing/L=Beijing/O=k8s" -config client.cnf

      签发证书

      openssl x509 -req -in etcd-$fn.csr -out etcd-$fn.pem -CA ca.pem -CAkey ca.key -CAcreateserial -days 1095 -extfile client.cnf -extensions v3_req

      切记使用同样的方法签发其他2台主机的etcd证书

      创建etcd目录保存证书文件

      mkdir etcd

      mv etcd-1-7* etcd

      签发 flanneld 证书

      重新设置变量fn

      fn=1-71

      修改 client.cnf 配置文件  

    [ req ]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = critical, CA:FALSE
    keyUsage = critical, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    IP.1 = 192.168.1.71

      生成flanneld-$fn.key

      openssl genrsa -out flanneld-$fn.key 3072

      生成证书flanneld-$fn.csr请求

      openssl req -new -key flanneld-$fn.key -out flanneld-$fn.csr -subj "/CN=flanneld/OU=System/C=CN/ST=Beijing/L=Beijing/O=k8s" -config client.cnf

      签发证书 flanneld-$fn.pem

      openssl x509 -req -CA ca.pem -CAkey ca.key -CAcreateserial -in flanneld-$fn.csr -out flanneld-$fn.pem -days 1095 -extfile client.cnf -extensions v3_req

      使用同样的方法 修改 client.cnf 配置文件ip fn变量签发其它2台主机的flanneld证书

      最后创建目录保存 flanneld 证书

      mkdir flanneld

      mv flanneld-1-7* flanneld

      到此k8s基本所需的证书都已经签发结束了 请看下节 etcd 安装

  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/S--S/p/10885952.html
Copyright © 2011-2022 走看看