Kubernetes集群的安全设置

Kubernetes集群的安全设置

1 基于CA签名的双向数字证书认证方式

在一个安全的内网环境中,Kubernetes的各个组件与Master之间可以通过kube-apiserver的非安全端口http://<kube-apiserver-ip>:8080进行访问。但如果API Server需要对外提供服务,或者集群中的某些容器也需要访问API Server以获取集群中的某些信息,则更安全的做法是启用HTTPS安全机制。Kubernetes提供了基于CA签名的双向数字证书认证方式和简单的基于HTTPBase或Token的认证方式,其中CA证书方式的安全性最高。本节先介绍如何以CA证书的方式配置Kubernetes集群,要求Master上的kube-apiserver、kube-controller-manager、kube-scheduler进程及各Node上的kubelet、kube-proxy进程进行CA签名双向数字证书安全设置。

基于CA签名的双向数字证书的生成过程如下:

(1)为kube-apiserver生成一个数字证书,并用CA证书签名。

(2)为kube-apiserver进程配置证书相关的启动参数,包括CA证书(用于验证客户端证书的签名真伪)、自己的经过CA签名后的证书及私钥。

(3)为每个访问Kubernetes API Server的客户端(如kube-controller-manager 、kube-scheduler、kubelet、kube-proxy及调用API Server的客户端程序kubectl等)进程都生成自己的数字证书,也都用CA证书签名,在相关程序的启动参数里增加CA证书、自己的证书等相关参数。

1.1设置kube-apiserver的CA证书相关的文件和启动参数

使用OpenSSL工具在Master服务器上创建CA证书和私钥相关的文件:

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/laoyao-1.novalocal=k8s-master" -days 5000 -out ca.crt
openssl genrsa -out server.key 2048

注意:在生成ca.key时,-subj参数中“/laoyao-1.novalocal”的值为Master主机名。

准备master_ssl.cnf文件,该文件用于x509 v3版本的证书。在该文件中主要需要设置Master服务器的hostname(k8s-master)、IP地址(192.168.10.9),以及Kubernetes Master Service的虚拟服务名称(kubernetes.default等)和该虚拟服务的ClusterIP地址(10.96.0.1)。

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_names
[alt_names]
DNS.1=kubernetes.default
DNS.3=kubernetes.default.svc
DNS.4=kubernetes.default.svc.cluster.local
DNS.5=k8s-master
IP.1=10.96.0.1
IP.2=192.168.10.9
​

基于master_ssl.cnf创建server.csr和server.crt文件。在生成server.csr时,-subj参数中“/laoyao-1.novalocal”的值需为Master的主机名:

openssl req -new -key server.key -subj "/laoyao-1.novalocal=k8s-master" -config master_ssl.cnf -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.cnf -out server.crt

在全部执行完后会生成6个文件:ca.crt、ca.key、ca.srl、server.crt、server.csr、server.key。

将这些文件复制到一个目录下(例如/var/run/kubernetes/),然后设置kube-apiserver的三个启动参数“--client-ca-file”“--tls-cert-file”和“--tls-private-key-file”,分别代表CA根证书文件、服务端证书文件和服务端私钥文件:

--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

同时,可以关闭非安全端口(设置--insecure-port=0),设置安全端口为6443(默认值):

--insecure-port=0
--secure-port=6443
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值