kubernetes Authenticating(认证)

kubernetes 用户体系

所有Kubernetes集群都有两类用户:由Kubernetes管理的服务帐户和普通用户。

普通用户由外部独立服务管理。 管理员分发私钥,用户存储如Keystone或者用户名和密码列表的文件。 普通用户不能通过API调用添加到群集中。

相反,服务帐户是由Kubernetes API管理的用户。 它们绑定到特定的名称空间,并由API服务器自动创建或通过API调用手动创建。 服务帐户绑定到一系列存储为秘密的凭证,这些凭证安装在容器中,允许群集内进程与Kubernetes API对话。

kubernetes 认证策略

Kubernetes使用客户端证书,bearer tokens,身份验证代理或HTTP基本身份验证来通过身份验证插件对API请求进行身份验证。 由于向API服务器发出HTTP请求,插件会尝试将以下属性与请求关联:

用户名:标识最终用户的字符串。 常用值可能是kube-admin或jane@example.com。
UID:标识最终用户并尝试比用户名更一致和唯一的字符串。
组:一组将用户与一组常用用户关联的字符串。
额外字段:包含附加信息的字符串列表的字符串映射授权人可能会觉得有用。

X509 Client Certs
客户端证书身份验证通过将--client-ca-file = SOMEFILE选项传递给API服务器来启用。 引用的文件必须包含一个或多个证书颁发机构,用于验证呈现给API服务器的客户端证书。 如果提供并验证客户端证书,则使用主题的公用名称作为请求的用户名。 从Kubernetes 1.4开始,客户端证书还可以使用证书的组织字段来指示用户的组成员身份。 要为用户包含多个组成员身份,请在证书中包含多个组织字段。
例如

openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"
//该命令行生成了jbeda-csr.pem证书,该证书是给用户jbeda进行颁发证书,该用户属于两个组织app1和app2

Static Token File

当在命令行上提供--token-auth-file = SOMEFILE选项时,API服务器从文件读取承载令牌。 目前,令牌持续无限期,并且无需重新启动API服务器即可更改令牌列表。

令牌文件是一个至少包含3列的csv文件:令牌,用户名,用户uid,后跟可选组名。 请注意,如果您有多个组,则该列必须使用双引号,例如

token,user,uid,"group1,group2,group3"

该认证策略只要是放在HTTP的HEADERS里
例如

Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269

Bootstrap Tokens
为了允许为新集群提供简化的引导,Kubernetes包括一个名为Bootstrap Token的动态管理的Bearer标记类型。 这些令牌作为秘密存储在kube-system命名空间中,在那里可以动态管理和创建它们。 控制器管理器包含一个TokenCleaner控制器,可在引导令牌过期时删除引导令牌。
该类令牌必须符合正则表达式[a-z0-9]{6}.[a-z0-9]{16},并且由两个部分组成
token ID 和token secret,这种方式也是放在HEADERS里,例如

Authorization: Bearer 781292.db7bc3a58fc5f07e

使用必要条件

  1. 在api-server启动参数加--experimental-bootstrap-token-auth
  2. 在Controller Manager 启动参数添加--controllers=*,tokencleaner

Static Password File
该认证策略启用的方式--basic-auth-file=SOMEFILE,一旦启用密码就不能修改
是cvs文件,组成:password, user name, user id

password,user,uid,"group1,group2,group3"

使用

Authorization:Basic BASE64ENCODED(USER:PASSWORD)

Service Account Tokens

服务帐户是使用签名的承载令牌来验证请求的自动启用的验证器。 该插件需要两个可选标志:

--service-account-key-file包含用于签署持票人令牌的PEM编码密钥的文件。 如果未指定,则将使用API服务器的TLS私钥。
--service-account-lookup如果启用,将从API中删除的令牌将被撤销。

服务帐户通常由API服务器自动创建,并通过ServiceAccount准入控制器与集群中运行的Pod相关联。 承载令牌被安装到众所周知的位置,并允许群集内进程与API服务器通信。 帐户可以使用PodSpecserviceAccountName字段与Pod进行显式关联。

apiVersion: apps/v1 # this apiVersion is relevant as of Kubernetes 1.9
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
spec:
  replicas: 3
  template:
    metadata:
    # ...
    spec:
      serviceAccountName: bob-the-bot
      containers:
      - name: nginx
        image: nginx:1.7.9

可以通过kubectl create serviceaccount (NAME)创建serviceaccount

服务帐户使用用户名系统进行身份验证:serviceaccount:(NAMESPACE):( SERVICEACCOUNT),并分配给组系统:serviceaccountssystem:serviceaccounts:(NAMESPACE)

end 还要更多内容,请前往Authenticating
参考
Authenticating

在MongoDB中,验证MongoCredential是指使用用户名和密码来验证用户身份以访问MongoDB数据库。 要验证MongoCredential,需要使用MongoClient对象和MongoCredential对象。首先,我们需要创建一个MongoCredential实例,该实例需要指定验证方法、数据库名称、用户名和密码。验证方法可以是从MongoCredential类的静态方法中选择,如MONGODB-CR、SCRAM-SHA-1、SCRAM-SHA-256等。然后,我们可以使用MongoClient对象的withCredential()方法来设置验证凭据。 接下来,我们可以通过调用MongoClient对象的connect()方法来建立与MongoDB的连接。当使用验证凭据时,如果用户名和密码与数据库中的凭据匹配,连接将成功建立。否则,将抛出错误,表示身份验证失败。 以下是使用Java语言进行MongoCredential验证的示例代码: ```java import com.mongodb.*; import org.bson.codecs.configuration.CodecRegistry; import org.bson.codecs.pojo.PojoCodecProvider; public class MongoDBAuth { public static void main(String[] args) { String host = "localhost"; int port = 27017; String database = "mydatabase"; String username = "myuser"; String password = "mypassword"; MongoClientSettings settings = MongoClientSettings.builder() .codecRegistry(CodecRegistry.DEFAULT) .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress(host, port)))) .credential(MongoCredential.createCredential(username, database, password.toCharArray())) .build(); MongoClient mongoClient = MongoClients.create(settings); // 连接成功执行其他操作 System.out.println("连接成功!"); mongoClient.close(); } } ``` 在这个例子中,我们使用MongoClientSettings.Builder类来设置MongoClient的配置。我们指定了主机和端口号,并创建了一个MongoCredential对象。然后,我们使用这些设置来创建一个MongoClient实例并建立与MongoDB的连接。最后,我们在连接成功后执行其他操作,并在结束时关闭连接。 总之,通过验证MongoCredential,我们可以使用用户名和密码来验证用户身份以访问MongoDB数据库。这是确保MongoDB数据库安全性的重要措施之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值