文档章节

kubernetes 设置CA双向数字证书认证

Kanonpy
 Kanonpy
发布于 01/14 19:07
字数 1662
阅读 77
收藏 0

openssh

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的三个字母,其实还是证书的意思。

双向签名数字证书认证

创建CA证书和私钥相关文件:

(1)生成客户端的密钥,即客户端的公私钥对

//生成私钥文件
# openssl genrsa -out ca.key 2048
Generating RSA private key, 2048 bit long modulus
.......................+++
................................................+++
e is 65537 (0x10001)

(2)生成自签名证书:用自己的私钥为证书请求文件签名,生成证书文件

openssl req -x509 -new -nodes -key ca.key -subj "/CN=master" -days 7000 -out ca.crt

(3)kube-apiservice的私钥:

openssl genrsa -out server.key 2048

(4)通过配置文件生成签名请求证书:

创建一个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-apiserver启动参数

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

设置 kube-controller-manager 的客户端

(1)生成证书签名请求文件和证书文件

私钥文件:

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

创建kubeconfig

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

配置参数,重新启动kube-controller-manager

/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

kube-scheduler配置重启

# 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

Node节点设置

从master复制ca.crt和ca.key到Node节点上,按照前面的方式生成证书签名请求和证书文件。

kubelet客户端

私钥:

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

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

© 著作权归作者所有

Kanonpy
粉丝 16
博文 42
码字总数 45373
作品 0
广州
程序员
私信 提问
Kubernetes集群安全:Api Server认证

Kubernetes提供了三种级别的客户端认证方式: HTTPS证书认证,是基于CA根证书签名的双向数字证书认证方式,是最严格的认证 HTTP Token认证,通过Token识别每个合法的用户 HTTP Basic认证 HT...

数据架构师
2018/11/11
0
0
Kubernetes从懵圈到熟练:认证与调度

不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了。现在我们上微博、或者网购,操作的其实不是眼前这台设备,而是一个又一...

shengdong
04/21
0
0
kubectl认证 授权 准入控制

版权声明:知识就是为了传播! https://blog.csdn.net/weixin_36171533/article/details/82689958 kubernetes 认证及serviceaccount(服务账号) kubernetes中apiservice是唯一访问的入口 认...

JESSE_JAVA
2018/09/13
0
0
创建TLS证书和秘钥

创建TLS证书和秘钥 前言 执行下列步骤前建议你先阅读以下内容: 管理集群中的TLS:教您如何创建TLS证书 kubelet的认证授权:向您描述如何通过认证授权来访问 kubelet 的 HTTPS 端点。 TLS bo...

懿懿懿
2017/11/09
0
0
Nginx HTTPS功能部署实践

30.1 文档目的... 2 30.2 文档内容... 2 30.3 单向认证与双向认证的概念... 2 30.3.1 什么是单向认证... 2 30.3.2 什么是双向认证... 2 30.4 openssl的介绍... 3 30.5 Nginx单双向ssl的配置前...

xiaofeng886
2017/03/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
4
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部