- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已在 AWS 上使用 kops 创建了一个 Kubernetes 集群。并可以从我的本地计算机通过 kubectl
成功管理它。
我可以使用 kubectl config view
查看当前配置,也可以直接访问 ~/.kube/config
中存储的状态,例如:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://api.{CLUSTER_NAME}
name: {CLUSTER_NAME}
contexts:
- context:
cluster: {CLUSTER_NAME}
user: {CLUSTER_NAME}
name: {CLUSTER_NAME}
current-context: {CLUSTER_NAME}
kind: Config
preferences: {}
users:
- name: {CLUSTER_NAME}
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
password: REDACTED
username: admin
- name: {CLUSTER_NAME}-basic-auth
user:
password: REDACTED
username: admin
我需要允许其他用户也进行管理。这个user guide描述了如何在另一台用户计算机上定义这些,但没有描述如何在集群本身内实际创建用户的凭据。你如何做到这一点?
此外,仅共享 cluster.certificate-authority-data
是否安全?
最佳答案
有关身份验证的完整概述,请参阅 Authentication 上的官方 Kubernetes 文档。和 Authorization
对于用户来说,最好使用 Kubernetes 的身份提供程序 (OpenID Connect)。
如果您使用 GKE/ACS,则可以与相应的身份和访问管理框架集成
如果您自行托管 kubernetes(使用 kops 时就是这种情况),您可以使用 coreos/dex与 LDAP/OAuth2 身份提供商集成 - 一个很好的引用是详细的 2 部分 SSO for Kubernetes文章。
kops (1.10+) 现在内置 authentication support如果您使用的是 AWS,这可以简化与作为身份提供商的 AWS IAM 的集成。
对于 Dex,有一些开源 cli 客户端,如下所示:
如果您正在寻找一种快速、简单(从长远来看不是最安全且易于管理)的开始方式,您可能会滥用 serviceaccounts
- 有 2 个用于控制专门策略的选项使用权。 (见下文)
注意,从 1.6 开始,强烈建议使用基于角色的访问控制!这个答案不包括 RBAC 设置
编辑:很棒,但已经过时了(2017-2018),由 Bitnami 在 User setup with RBAC 上指导也可用。
启用服务帐户访问的步骤如下(具体取决于您的集群配置是否包含 RBAC 或 ABAC 策略,这些帐户可能拥有完整的管理员权限!):
编辑:Here is a bash script to automate Service Account creation - see below steps
为用户Alice
创建服务帐户
kubectl create sa alice
获取相关 secret
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
从 secret 中获取 ca.crt
(使用 OSX base64
和 -D
标志进行解码)
kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
从 secret 中获取服务帐户 token
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(通过她的服务帐户)仅对默认命名空间中的所有资源具有只读权限。
关于kubernetes - 如何向 Kubernetes(kubectl)添加用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42170380/
我是一名优秀的程序员,十分优秀!