证书相关
谁可以访问api server?通过什么方式访问?
账户
用户出于管理的目的对集群的访问
admins 管理员
developers 开发人员
应用程序的安全由程序本身控制
application end users
访问集群的其他进程、服务、应用程序
bots 机器人
使用kubectl还是通过api访问api server都会触发身份验证机制
身份验证机制有静态密码文件、静态令牌文件、证书、第三方身份验证服务(例如LDAP)
静态密码文件
文件包含四列,密码、用户名、用户ID、组ID
指定
--basic-auth-file=user-details.csv
访问方式中指定密码和用户
curl -v -k https://master-node-ip:6443/api/v1/pods \
-u "user1:password123"
静态令牌文件
文件包含四列,密码、用户名、用户ID、组ID
指定
--token-auth-file=user-details.csv
访问方式中指定密码和用户
curl -v -k https://master-node-ip:6443/api/v1/pods \
--header "Authorization: Bearer HGJltlhUgDEnSDjgfdjuyk"
通常带有公钥的证书被命名为 *.crt *.pem
私钥中通常含有key,命名为 *.key *-key.pem
ca自己生成私钥,并自签名生成根证书
生成私钥
openssl genrsa -out ca.key 2048
私钥的证书签名请求
openssl req -new -key ca.key -subj "/CN-KUBERNETES-CA" -out ca.csr
生成根证书
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
客户端生成私钥,用ca签名
生成私钥
openssl genrsa -out admin.key 2048
生成签名请求
openssl req -new -key admin.key -subj "/CN-kube-admin/O=system:masters" -out admin.csr
用ca的根证书签名
openssl x509 -req -in admin.csr -CA ca.crt -CAkey ca.key -out admin.crt
O=system:masters 指定该证书有管理员权限,即证书是为该组使用的
让集群中的各种服务使用服务证书,所有客户端使用客户端证书
两组证书
一组客户端证书,用于客户端连接到api server
一组服务端证书,用于api server验证客户端
上述证书都需要一个证书颁发机构
实际中,etcd单独采用另一个证书颁发机构
查看证书内容
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
ca实际上只是我们生成的一对密钥和证书文件,获得这对文件的人都可以签署k8s环境内的任何证书,进而可以创建用户并赋予任何权限。所以这对文件很重要,需要被放置到安全的位置。放置了这对文件的服务器就是CA服务器。将这对文件放置在k8s的master节点上,master节点就是ca服务器
k8s集群可以自动签署证书,k8s集群有一个内置的CERTIFICATES API。管理员可以调用该接口将证书签名请求发送到k8S,当管理员收到证书签名请求时会创建一个和签名请求同名的对象,管理员通过kubectl certifiicate approve命令来同意签名请求。这些由kube-controller-manager完成
相关配置
cat /etc/kubernetes/manifests/kube-controller-manager.yaml
--cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
--cluster-signing-key-file=/etc/kubernetes/pki/ca.key
用户生成私钥
openssl genrsa -out jane.key 2048
生成签名请求
openssl req -new -key jane.key -subj "jane" -out jane.csr
k8s创建证书签名请求对象
jane-csr.yaml
apiVersion: certificates.k8s.io/v1beta1
kind: CertificatesSigningRequest
metadata:
name: jane
spec:
group:
- system:authenticated
usages:
- digital signature
- key encipherment
- server auth
request: # 证书签名请求的内容的base64编码 cat jane.csr | base64 | tr - d "\n" 或者 cat jane.csr | base64 -w 0
xxxxxxxxxxxx
xxxxxxxxxxxx
查看签名请求对象
kubectl get csr
管理员同意签名请求
kubectl certificate approve jane
标签:证书,ca,openssl,签名,key,jane,相关
From: https://www.cnblogs.com/lixunblogs/p/18167062