这期内容当中小编将会给大家带来有关kubernetes中怎么设置CA双向数字证书认证,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
opessl中RSA算法指令主要有三个:
指令 | 功能 |
---|---|
genrsa | 生成并输入一个RSA私钥 |
rsa | 处理RSA密钥的格式转换等问题 |
rsautl | 使用RSA密钥进行加密、解密、签名和验证等运算 |
genrsa [args] [numbits] //密钥位数,建议1024及以上 -des encrypt the generated key with DES in cbc mode //生成的密钥使用des方式进行加密 -des3 encrypt the generated key with DES in ede cbc mode (168 bit key) //生成的密钥使用des3方式进行加密 -seed encrypt PEM output with cbc seed //生成的密钥还是要seed方式进行 -aes128, -aes192, -aes256 encrypt PEM output with cbc aes //生成的密钥使用aes方式进行加密 -camellia128, -camellia192, –camellia256 encrypt PEM output with cbc camellia //生成的密钥使用camellia方式进行加密 -out file output the key to 'file //生成的密钥文件,可从中提取公钥 -passout arg output file pass phrase source //指定密钥文件的加密口令,可从文件、环境变量、终端等输入 -f4 use F4 (0x10001) for the E value //选择指数e的值,默认指定该项,e值为65537 -3 use 3 for the E value //选择指数e的值,默认值为65537,使用该选项则指数指定为3 -engine e use engine e, possibly a hardware device. //指定三方加密库或者硬件 -rand file:file:... load the file (or the files in the directory) into //产生随机数的种子文件 the random number generator
req 命令:使用已有私钥生成证书请求
openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits][-newkey alg:file] [-nodes] [-key filename] [-keyform PEM|DER] [-keyout filename] [-keygen_engine id] [-[digest]] [-config filename] [-subj arg] [-multivalue-rdn] [-x509] [-days n] [-set_serial n][-asn1-kludge] [-no-asn1-kludge] [-newhdr] [-extensions section] [-reqexts section] [-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-batch] [-verbose] [-engine id] -new :说明生成证书请求文件 -x509 :说明生成自签名证书 -key :指定已有的秘钥文件生成秘钥请求,只与生成证书请求选项-new配合。 -newkey :-newkey是与-key互斥的,-newkey是指在生成证书请求或者自签名证书的时候自动生成密钥, 然后生成的密钥名称由-keyout参数指定。当指定newkey选项时,后面指定rsa:bits说明产生 rsa密钥,位数由bits指定。 如果没有指定选项-key和-newkey,默认自动生成秘钥。 -out :-out 指定生成的证书请求或者自签名证书名称 -config :默认参数在ubuntu上为 /etc/ssl/openssl.cnf, 可以使用-config指定特殊路径的配置文件 -nodes :如果指定-newkey自动生成秘钥,那么-nodes选项说明生成的秘钥不需要加密,即不需要输入passphase. -batch :指定非交互模式,直接读取config文件配置参数,或者使用默认参数值
CSR - Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好
CRT - CRT应该是certificate的三个字母,其实还是证书的意思。
//生成私钥文件 # openssl genrsa -out ca.key 2048 Generating RSA private key, 2048 bit long modulus .......................+++ ................................................+++ e is 65537 (0x10001)
openssl req -x509 -new -nodes -key ca.key -subj "/CN=master" -days 7000 -out ca.crt
openssl genrsa -out server.key 2048
创建一个master-ssl.cnf配置文件,用来生成书证签名请求文件和证书文件:
[req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [v3_req] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_name [alt_name] DNS.1 = kubernetes DNS.2 = kubernetes.default DNS.3 = kubernetes.default.svc DNS.4 = kubernetes.default.svc.cluster.local # master hostname DNS.5 = master # master IP IP.1 = 192.168.1.122 # kubernetes.default's ClusterIP IP.2 = 10.254.0.1
查看kubernetes.default的cluster IP:
# kubectl get svc kubernetes -o yaml apiVersion: v1 kind: Service metadata: creationTimestamp: 2019-01-10T08:31:18Z labels: component: apiserver provider: kubernetes name: kubernetes namespace: default resourceVersion: "18" selfLink: /api/v1/namespaces/default/services/kubernetes uid: 1a258e01-14b2-11e9-86b7-525400bea75c spec: clusterIP: 10.254.0.1 ports: - name: https port: 443 protocol: TCP targetPort: 6443 sessionAffinity: ClientIP type: ClusterIP status: loadBalancer: {}
基于mstaer_ssl.cnf创建server.csr和server.crt文件.
创建证书签名请求文件:
openssl req -new -key server.key -subj "/CN=master" -config master_ssl.cnf -out server.csr
创建证书文件:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 7000 -extensions v3_req -extfile master_ssl.cnf -out server.crt
下面生成server.crt 和ca.srl
KUBE_API_ARGS="--client-ca-file=/var/run/kubernetes/ca.crt --tls-private-key-file=/var/run/kubernetes/server.key --tls-cert-file=/var/run/kubernetes/server.crt --secure-port=6443"
--client-ca-file
表示CA根证书文件、--tls-private-key-file
服务端证书文件、--tls-cert-file
服务端私钥文件;
重启kube-apiserver服务:
systemctl restart kube-apiserver
私钥文件:
openssl genrsa -out cs_client.key 2048
证书签名请求(Certificate Signing Request)文件:
openssl req -new -key cs_client.key -subj "/CN=master" -out cs_client.csr
证书文件:
openssl x509 -req -in cs_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 7000 -out cs_client.crt
apiVersion: v1 kind: Config users: - name: controllermanager user: client-certificate: /var/run/kubernetes/cs_client.crt client-key: /var/run/kubernetes/cs_client.key clusters: - name: local cluster: certificate-authority: /var/run/kubernetes/ca.crt contexts: - context: cluster: local user: controllermanager name: my-context current-context: my-context
/etc/kubernetes/controller-manager
# Add your own! KUBE_CONTROLLER_MANAGER_ARGS="--master=https://192.168.1.122:6443 --service-account-key-file=/var/run/kubernetes/server.key --root-ca-file=/var/run/kubernetes/ca.crt --kubeconfig=/etc/kubernetes/kubeconfig"
重启服务
systemctl restart kube-controller-manager
# Add your own! KUBE_SCHEDULER_ARGS="--address=0.0.0.0 --master=https://192.168.1.122:6443 --kubeconfig=/etc/kubernetes/kubeconfig"
重启服务:
systemctl restart kube-scheduler
从master复制ca.crt和ca.key到Node节点上,按照前面的方式生成证书签名请求和证书文件。
私钥:
openssl genrsa -out kubelet_client.key 2048
证书签名请求文件:
openssl req -new -key kubelet_client.key -subj "/CN=node2" -out kubelet_client.csr
证书文件:
openssl x509 -req -in kubelet_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 7000 -out kubelet_client.crt
设置kubelet启动:
KUBELET_ARGS="--certificate-authority=/var/run/kubernetes/ssl_keys/ca.crt --client-certificate=/var/run/kubernetes/ssl_keys/cs_client.crt --client-key=/var/run/kubernetes/ssl_keys/cs_client.key"
# Add your own! KUBELET_ARGS="--kubeconfig=/etc/kubernetes/keubeconfig"
重启:
systemctl restart kubelet
KUBE_PROXY_ARGS="--bind-address=0.0.0.0 --master=https://192.168.1.122:6443 --kubeconfig=/etc/kubernetes/kubeconfig"
重启:
systemctl restart kube-proxy
在设置完成之后master注意开启6443端口:
#添加端口 firewall-cmd --zone=public --add-port=6443/tcp --permanent #重新载入 firewall-cmd --reload
测试是否成功:
# kubectl --server=https://192.168.1.122:6443 --certificate-authority=/var/run/kubernetes/ssl_keys/ca.crt --client-certificate=/var/run/kubernetes/ssl_keys/cs_client.crt --client-key=/var/run/kubernetes/ssl_keys/cs_client.key get nodes NAME STATUS AGE node1 Ready 5d node2 Ready 5d
上述就是小编为大家分享的kubernetes中怎么设置CA双向数字证书认证了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。