关于认证的详细概述,请参阅 Kubernetes 官方文档中的 Authentication 和 Authorization。
对于用户而言,最好使用 Kubernetes 的身份提供者(OpenID Connect)。
如果您正在使用 GKE / ACS,则需要与相应的身份验证和访问管理框架集成。
如果您自己托管 Kubernetes(当您使用 kops 时),则可以使用 coreos/dex 与 LDAP / OAuth2 身份提供者进行集成 - 可以参考这篇详细的两部分 SSO for Kubernetes 文章。
kops(1.10+)现在具有内置的 authentication support,如果您正在使用 AWS,则可以轻松地将其与 AWS IAM 作为身份提供者进行集成。
对于 Dex,有一些开源的 cli 客户端,如下所示:
如果您正在寻找快速且简便(不是最安全且易于长期管理的方法)入门的方法,则可以滥用serviceaccounts
-有两个专业策略选项来控制访问权限(见下文)。
注意:自1.6版本以来,强烈建议使用基于角色的访问控制!本答案不涵盖RBAC设置。
编辑:Bitnami提供了一个出色但过时(2017-2018年)的关于使用RBAC的用户设置的指南。
启用服务帐户访问的步骤如下(根据您的集群配置是否包括RBAC或ABAC策略,这些帐户可能具有完整的管理员权限!):
编辑: 这里有一个Bash脚本可以自动化创建服务账户——请参考下面的步骤
Create service account for user Alice
kubectl create sa alice
Get related secret
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
Get ca.crt
from secret (using OSX base64
with -D
flag for decode)
kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
Get service account token from secret
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
Get information from your kubectl config (current-context, server..)
c=$(kubectl config current-context)
name=$(kubectl config get-contexts $c | awk '{print $3}' | tail -n 1)
endpoint=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}")
On a fresh machine, follow these steps (given the ca.cert
and $endpoint
information retrieved above:
Install kubectl
brew install kubectl
Set cluster (run in directory where ca.crt
is stored)
kubectl config set-cluster cluster-staging \
--embed-certs=true \
--server=$endpoint \
--certificate-authority=./ca.crt
Set user credentials
kubectl config set-credentials alice-staging --token=$user_token
Define the combination of alice user with the staging cluster
kubectl config set-context alice-staging \
--cluster=cluster-staging \
--user=alice-staging \
--namespace=alice
Switch current-context to alice-staging
for the user
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
文件,并在API服务器中添加--authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json
标志。
这将允许Alice(通过她的服务帐户)仅对默认名称空间中的所有资源具有只读权限。
ca.crt
和token
,但这对于设置 kubeconfig 来说还不够或不正确。如果您知道如何配置 kubeconfig,请告诉我。 - peterl