有关身份验证的完整概述,请参阅有关身份验证和授权的官方 Kubernetes 文档
对于用户,理想情况下您使用 Kubernetes 的身份提供程序(OpenID Connect)。
如果您在 GKE / ACS 上,您将与各自的身份和访问管理框架集成
如果您自托管 kubernetes(使用 kops 时就是这种情况),您可以使用coreos/dex与 LDAP / OAuth2 身份提供程序集成 - 一个很好的参考是这篇详细的 2 部分SSO for Kubernetes文章。
kops (1.10+) 现在具有内置的身份验证支持,如果您在 AWS 上,它可以简化与 AWS IAM 作为身份提供者的集成。
对于 Dex,有几个开源的 cli 客户端如下:
如果您正在寻找一种快速且简单(从长远来看不是最安全且易于管理)的入门方式,您可能会滥用serviceaccounts
- 使用 2 种专用策略选项来控制访问。(见下文)
注意自 1.6 以来强烈推荐基于角色的访问控制!这个答案不包括 RBAC 设置
编辑:很棒,但已经过时(2017-2018),Bitnami 提供的关于使用 RBAC 进行用户设置的指南也可用。
启用服务帐户访问的步骤是(取决于您的集群配置是否包括 RBAC 或 ABAC 策略,这些帐户可能具有完整的管理员权限!):
编辑:这是一个用于自动创建服务帐户的 bash 脚本 - 请参见以下步骤
为用户创建服务帐户Alice
kubectl create sa alice
获取相关秘密
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
ca.crt
从秘密中获取(使用base64
带有-D
标志的 OSX 进行解码)
kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
从 secret 中获取服务帐户令牌
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
从您的 kubectl 配置(当前上下文、服务器..)中获取信息
# get current context
c=$(kubectl config current-context)
# get cluster name of context
name=$(kubectl config get-contexts $c | awk '{print $3}' | tail -n 1)
# get endpoint of current context
endpoint=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}")
在新机器上,按照以下步骤操作(鉴于上面检索到的ca.cert
和信息:$endpoint
安装kubectl
brew install kubectl
设置集群(在ca.crt
存储的目录中运行)
kubectl config set-cluster cluster-staging \
--embed-certs=true \
--server=$endpoint \
--certificate-authority=./ca.crt
设置用户凭据
kubectl config set-credentials alice-staging --token=$user_token
定义 alice 用户与暂存集群的组合
kubectl config set-context alice-staging \
--cluster=cluster-staging \
--user=alice-staging \
--namespace=alice
alice-staging
为用户切换当前上下文
kubectl config use-context alice-staging
要使用策略控制用户访问(使用ABAC),您需要创建一个policy
文件(例如):
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "system:serviceaccount:default:alice",
"namespace": "default",
"resource": "*",
"readonly": true
}
}
policy.json
在每个主节点上配置它--authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json
并向 API 服务器添加标志
这将允许 Alice(通过她的服务帐户)仅对默认命名空间中的所有资源拥有只读权限。