认证插件

Kubernetes使用客户端证书,令牌,或者HTTP基本身份验证用户的API调用。
在API服务器中配置—client-ca-file=SOMEFILE选项,就会启动客户端证书认证。引用文件必须包含一个或多个认证机制,通过认证机制验证传给API服务器的客户端证书。当一个客户端证书通过认证,该证书主题的名字就被作为该请求的用户名。
在API服务器中配置选项:–token-auth-file=SOMEFILE, 启动Token认证。目前,Token没有有效期,必须重启API服务,Token列表的更改才会生效。
令牌文件格式路径:plugin/pkg/auth/authenticator/token/tokenfile/…,该文件是一个CSV文件,含有三行:Token,用户名,用户uid。
当http客户端使用Token认证,apiserver需要含有Bearer Sometoken值的一个Authorization头。
OpenID Connect ID Token,传递下面的参数给apiserver:
  • –oidc-issuer-url (必须) API Server连接到OpenID提供者的URL, 只接受HTTPS协议。
  • –oidc-client-id (必须) API Server用于验证Token用户,合法的ID Token在它的aud参数(aud claims 翻译待考虑)中包含该client-id。
  • –oidc-ca-file (可选) API Server用于和OpenID提供者建立和验证安全连接。
  • –oidc-username-claim (可选, 实验性参数) 指定用户名对应的OpenID。默认设置为sub参数,在指定域中是唯一的,不可变的。集群管理员可以选择其它参数如email,作为用户名,但不保证其唯一性和不变性。
请注意,这个标志仍然处于试验阶段,如果我们可以处理更多关于OpenID用户和Kubernetes用户的映射关系,便可以开始使用。因此,未来的变化还是很有可能的。
目前,该ID Token会通过一些第三方应用程序获取。这意味着应用程序必须和API Server共享该配置–oidc-client-id。
如Token文件,当从HTTP客户端使用Token认证方式,API Server希望在Authorization头添加一个Bearer SOMETOKEN的值。
启动基本认证,需要在API Server配置选项—basic_auth_file=SOMEFILE。当前,基本认证凭据是无限期的,而且重启API Server,密码的修改才会生效。需要注意,基本认证方式是更安全的模式,更容易使用,更通用。
基本认证文件格式,plugin/pkg/auth/authenticator/password/passwordfile/…,该文件是一个CSV文件,含有三个值,密码,用户名和用户id。 如果在HTTP客户端使用基本认证,APIServer需要一个值是Basic BASE64ENCODEDUSER:PASSWOR的Authorization头。
Keystone认证会在API Server启动的时候把–experimental-keystone-url=’AuthURL’参数传给API Server,该认证就会生效。该插件在plugin/pkg/auth/authenticator/request/keystone/keystone.go文件中实现。

插件开发

我们计划给Kubernetes API Server解决Token问题。使用“bedrock”认证用户,外部提供者给Kubernetes。我们计划使Kubernetes和一个Bedrock认证提供者(如 github.com google.com ,Enterprise Directory, Kerberos等等)之间的接口开发更容易。

附录

创建证书

客户端证书认证,用户可以手动产生证书,也可以使用已经存在的脚本部署。
部署脚本路径在cluster/saltbase/salt/generate-cert/make-ca-cert.sh。执行该脚本需要两个参数,一个是API Server的IP地址,另一个是IP:或者DNS:主题备用名称的列表。该脚本会产生三个文件,ca.crt,server.crt和server.key。最后,添加下面的参数作为API Server的启动参数, –client-ca-file=/srv/kubernetes/ca.crt,–tls-cert-file=/srv/kubernetes/server.cert,–tls-private-key-file=/srv/kubernetes/server.key。
Easyrsa可以用来为你的集群手动生成证书。
1. 下载,解压,初始化Easyrsa3的补丁版本。

tar xzf easy-rsa.tar.gz
cd easy-rsa-master/easyrsa3
./easyrsa init-pki
2. 产生一个CA. (–batch设置自动模式。–req-cn使用默认CN。)
./easyrsa –batch “–req-cn=${MASTER_IP}@date +%s” build-ca nopass
3. 产生服务器证书和秘钥。(build-server-full [文件名]:给客户端和服务器生成一个本地的秘钥对和信号)
./easyrsa –subject-alt-name=”IP:${MASTER_IP}” build-server-full kubernetes-master nopass
4. 复制pki/ca.crt,pki/issued/kubernetes-master.crt,pki/private/kubernetes-master.key到你的目录。
5. 记得填写参数–client-ca-file=/yourdirectory/ca.crt,–tls-certfile=/yourdirectory/server.cert,–tls-private-key-file=/yourdirectory/server.key,并作为API Server的启动参数。
Openssl也可以用来给你的集群手动生成证书。
1. 使用2048bit生成ca.key:openssl genrsa -out ca.key 2048
2. 根据ca.key生成ca.crt。(-days设置证书的有效时间)。
openssl req -x509 -new -nodes -key ca.key -subj “/CN=${MASTER_IP}” -days 10000 -out ca.crt
3. 使用2048bit生成server.key:openssl genrsa -out server.key 2048
4. 根据server.key生成server.csr。
5. 根据ca.key,ca.crt和server.csr生成server.crt。
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000
6. 查看证书:openssl x509 -noout -text -in ./server.crt。 最后,记得填写参数,并作为APIServer的启动参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值