pet*_*erl 62 kubernetes kubectl kops
我在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
Run Code Online (Sandbox Code Playgroud)
我需要让其他用户也能管理.本用户指南介绍了如何在其他用户计算机上定义这些用户指南,但未描述如何在群集本身内实际创建用户凭据.你怎么做到这一点?
另外,分享是否安全cluster.certificate-authority-data?
Vin*_*met 86
有关身份验证的完整概述,请参阅有关身份验证和授权的官方Kubernetes文档
对于用户,理想情况下,您使用Kubernetes(OpenID Connect)的身份提供程序.
如果您使用的是GKE/ACS,则需要与各自的身份和访问管理框架集成
如果您自行托管kubernetes(使用kops时就是这种情况),您可以使用coreos/dex与LDAP/OAuth2身份提供程序集成 - 这是Kubernetes文章的详细2部分SSO的一个很好的参考.
kops(1.10 +)现在具有内置身份验证支持,如果您使用AWS,则可以简化与AWS IAM作为身份提供程序的集成.
对于Dex,有一些开源cli客户端如下:
如果您正在寻找快速简便(从长远来看不是最安全且易于管理)的方式入门,您可能会滥用serviceaccounts- 有2个专用策略选项来控制访问.(见下文)
注意,强烈建议使用1.6基于角色的访问控制!这个答案不包括RBAC设置
编辑:Bitnami的伟大指南也提供了RBAC的用户设置.
启用服务帐户访问的步骤(取决于您的群集配置是否包含RBAC或ABAC策略,这些帐户可能具有完全管理员权限!):
编辑:这是一个自动创建服务帐户的bash脚本 - 请参阅以下步骤
为用户创建服务帐户 Alice
kubectl create sa alice
Run Code Online (Sandbox Code Playgroud)得到相关的秘密
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
Run Code Online (Sandbox Code Playgroud)ca.crt从秘密获取(使用base64带有-D标志的OSX 进行解码)
kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
Run Code Online (Sandbox Code Playgroud)从秘密获取服务帐户令牌
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
Run Code Online (Sandbox Code Playgroud)从您的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}"`
Run Code Online (Sandbox Code Playgroud)在新机器上,请按照以下步骤操作(根据上述检索ca.cert和$endpoint信息:
安装 kubectl
brew install kubectl
Run Code Online (Sandbox Code Playgroud)设置集群(在ca.crt存储的目录中运行)
kubectl config set-cluster cluster-staging \
--embed-certs=true \
--server=$endpoint \
--certificate-authority=./ca.crt
Run Code Online (Sandbox Code Playgroud)设置用户凭据
kubectl config set-credentials alice-staging --token=$user_token
Run Code Online (Sandbox Code Playgroud)定义alice用户与登台集群的组合
kubectl config set-context alice-staging \
--cluster=cluster-staging \
--user=alice-staging \
--namespace=alice
Run Code Online (Sandbox Code Playgroud)将当前上下文切换alice-staging为用户
kubectl config use-context alice-staging
Run Code Online (Sandbox Code Playgroud)要使用策略控制用户访问(使用ABAC),您需要创建一个policy文件(例如):
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "system:serviceaccount:default:alice",
"namespace": "default",
"resource": "*",
"readonly": true
}
}
Run Code Online (Sandbox Code Playgroud)
policy.json在每个主节点上配置此项--authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json并向API服务器添加标志
这将允许Alice(通过她的服务帐户)只读取默认命名空间中所有资源的权限.
| 归档时间: |
|
| 查看次数: |
50439 次 |
| 最近记录: |